【看表情包学Linux】shell 命令及运行原理 | Linux 权限 | 文件权限的修改和转让 | 目录的权限 | Sticky bit 粘滞位(一)

简介: 本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。

💭 写在前面


本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。

Ⅰ. shell 命令及运行原理


0x00 什么是 shell

严格意义上说的是一个操作系统,我们称之为 ——  (核心),


但我们一般用户,是不能直接使用  的,而是通过  的 "外壳" 程序,


也就是所谓的  ,来与  进行 "沟通 " 。


中, 就是命令行解释器(command Interpreter),其主要包含:


① 将使用者的命令翻译给  处理。  ② 同时将  的处理结果翻译给使用者。


 中, 就是    (图形化界面),


我们操作  也不是直接操作  内核的,


而是通过图形接口,点击从而完成我们的操作,所以其实也是一个外壳程序。


对于 ,有相同的作用,主要是对我们的指令进行解析,


解析指令给  内核。反馈结果在通过内核运行出结果,通过  解析给用户。


0x01 shell 的意义

❓ 思考:为什么不能直接使用 ,而是要通过 ?


① 降低操作 OS 的成本:用户不善于和内核沟通,需要通过外壳来做解释。


②  保护操作系统:外壳的存在让内核不会暴露给用户,用户所有的非法、不合理操作会直接被外壳拦住,某种意义上来说是对操作系统的一种保护。


我们通常采用的命令行解释器,命令并不是 而是 bash,


它是存在于 /usr/bin 目录下的一个可执行文件:

4b79270e5888d46114cf5cb4ffa80e02_f8452a21691f4a0389dff2a371d51963.png


我们的  常用的命令行解释器(shell),叫做 bash。


他们两个之间有什么关系呢?  是所有解释器的统称,bash 是具体的一款解释器。


bash 属于  中的一种,常见的  工具:sh、bash、csh、tcsh、ash 等。


它们的关系就像是 Linux 和 Centos7.6 的关系,一个是统称的,一个是具体的。


Ⅱ. Linux 权限


0x00 Linux 具体用户的分类

Linux 的用户分为 root 和普通用户,root 为超级用户,就像 Windows 系统中的管理员。


超级用户:可以在 Linux 系统下做任何事情,不受限制。

普通用户:在 Linux下做有限的事情。

超级用户的命令提示符是 # ,普通用户的命令提示符是 $ 。

💭 确认当前你是哪个用户,可以输入 whoami 指令:


whoami

6931d0a56879ebff939b14363d7f92cf_0983aae35a0246208cc1b5fd4b07957e.png


💭 我们当前是普通用户,如果想切换至 root 用户,我们可以输入 su -


su -

affdd2e079460f6837a6146f0a66a765_7ffb356716b04053bfb7956f4960c689.png


root 和 Linux 下任何一个用户,都要设置密码。


建议不要把 root 密码和普通用户的密码设置成一样的! 这不仅是出于安全角度,


设置成一样的话现阶段容易搞混,你不知道什么时候要输的是什么密码。


这里我们要切到 root,所以输入的是 root 的密码:

fe63b0f31ac5b734ee252c3d988c0cba_d73291d16e764acf9f906da07153d393.png

(输入密码时是不回显的,并不是没输进去)


💭 实操:当我们 su - 并输入正确的密码后,就可以完成用户的切换操作:

$ su -
Password:

30f6c8fbdf5395f6c254381e3d6f40ee_c6462178f78a4e5ba185e1738fe426dd.png

在 root 用户下,想要切到普通用户甚至连密码都不需要输:


# su [用户名]

6cb933859652677e3a794eb7699d0d93_1489d09674e842c69fe687b50dc5964a.png

当然,如果你是普通用户想切换到另一个普通用户,当然还是需要输入密码的。


$ su [用户名]
Password:

root 什么身份都可以切,切到你账户删库跑路记录的还是你账户自己删的。


即便是不切,通过 root 拿你数据库的 "私♂密♂数♂据", 多危险!由此可见 root 账号非常重要!


root 密码一定不能设置的太简单!设置的太简单,就相当于是 "裸奔" !


0x01 Linux 中文件相关的权限概念

当我们输入 ls -l 显示详细信息时,你有没有注意过这些信息?

9d463f9db41855f02a76b7d55e1cd0fc_4d1ef431b7ab4960a37440fef96ca0f1.png

通过 ls -l 显示出来的是 文件的属性,而用过 cat 看到里面的是 文件的内容。

83cae6bef5687bf874b9e30a91cd183a_36c554ffa4d044bd8372eb799b6986e8.png


0x02 文件类型

我们既然要学习权限,我们重点要理解 ls -l 显示的若干的字母组合。


-rw-rw-r--
drwxrwxr-x

第一列的第一个字符,叫做 "文件类型" 。


Linux 中不是以文件名后缀区分文件类型的,而是通过 ls -l 显示的第一个字符区分文件类型的。


这有点颠覆我们的直觉,因为我们 Windows 是文件末尾 [ .类型 ] 的格式去区分文件类型:

bdece882eaf497c0d803bd3b67ab1ab1_1fedeccf68a24bc9bb6f5a494d16b716.png


而在 Linux 下你跟我说文件类型跟后缀没有关系?!我们验证一下看看:

37f0acd2703bb060510d677de43d3c65_2404d3bb2dcd4215a8656875b3e51694.png


在我们 Windows 下,这里的 a.txt 这就是一个文本,但是在 Linux 是完全不关心你后缀是什么的。


Linux 的文件后缀纯属摆设,我们写后缀只是是为了给自己看的。


📚 概念:Linux 是根据第一列第一个字符去区分文件的类型的。


- 普通文件,文本、源代码、可执行文件、第三方动态库等。

  目录文件

   链接文件(比如快捷方式)

  管道文件

  块设备文件,磁盘

   字符设备文件

📌 注意事项:


既然 Linux 文件后缀纯属摆设,那我们把 test.c 改成 test.txt,然后用 gcc 编译可以吗?

0b2fba6db8700ab6ff1ca767c18bde68_7f8fc7044679439bb64e82359f2a16cf.png

 ( 絕對不可以!)


虽然 Linux不以文件名后缀区分类型,但是 Linux 并不排斥以后缀做文件类型。


0x03 基本权限

❓ 思考:什么是权限?


① 约束人的(对人进行分类)


② 需要对应的事物具有特定的属性


Linux 上,对文件的权限:


这个文件谁能访问?这个文件谁不能访问?


对应的文件应该具备的某种属性:r,w,执行 x

bb54f6101a4a1234e5731de13e8c67cb_3be6ba9589274233ba53cd8718edae4d.png

所以权限的概念以及操作都是围绕人和概念的属性展开的。


在 Linux 系统中,人分三类:


① 文件的拥有者 owner     ② 文件的所属组 grouper       ③ 文件的其他用户 other


Linux 系统中文件的权限属性分为 r(读)、w(写)、x(可执行)。

b213c931740462d66d5b9b424ff0eaea_5a3f07e70dc8448b8085021ba7161cd7.png

root 和普通用户都可称为文件的拥有者、所属组、其他用户,他们并不冲突,反而是相互补充的。


每一组,对应的权限的为止含义是确定的。

e484e68eb8913fcdfbc8f0b7b2e05b06_ce2dc8be604e482d9b5455524bdf0ad4.png

那么文件的权限操作,应该涉及到几方面呢?  ① 修改文件的属性    ② 修改人


0x04 文件权限值的表示方法

📚 字符表示方法:

Linux 表示 说明 Linux 表示 说明
只读 仅可写
仅可执行 可读可写
可写可执行 可读可执行
可读可写可执行 无权限

只需要搞明白 r w x - 这四个字符分别代表说明意思,就能轻松理解。


📚 八进制数值表示方法:推荐使用 👍


权限符号(读写执行)
4 100
2 010
1 001
6 110
5 101
3 011
7 111
- - - 0 000

(利用八进制数值进行操作,用起来会非常的方便,等下面讲完文件的修改操作后再详细讲解)


0x05 file 指令

❓ 思考:如何区分一个文件?

ff92564453b924b925d9e424efa1546a_7b283d2374ee4ea68a20ce5641cc33c0.png

显然这一串信息是无法满足我们了,我们还有一个专门用来辨识文件类型的指令 —— file 指令。


file [选项] 文件或目录

🔨  功能:辨识文件类型


📜  常用选项:


-c  详细显示指令执行过程,便于排错或分析程序执行的情形。

-z  尝试去解读压缩文件的内容。

💭 操作演示:file

f5630895dcfaebf11e955a2be02aad0d_70eb62b0e3fd41ac9699eeb1a704a1ae.png


Ⅲ. 文件权限的修改


0x00 chmod 指令

chmod [参数] 权限 文件名

🔨  功能:设置文件的访问权限


📜  常用选项:


R -> 递归修改目录文件的权限。

说明:只有文件的拥有者和root才可以改变文件的权限。

chmod 命令权限值的格式:


① 用户表示符+/-=权限字符


+  向权限范围增加权限代号所表示的权限

-   向权限范围取消权限代号所表示的权限

=  向权限范围赋予权限代号所表示的权限

用户符号:  


u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户

比如:

# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt

看蒙了也没关系,我们直接看操作演示,会轻松很多:


💭 操作演示:去掉某身份的权限

e7f579ec9133317c3e51d9bafaa28f15_a055c3cf87c3462d8be098af735c4e90.png


如果我想去掉某身份的读权限,我们可以:


chmod [分类]-[权限] {文件名]     # 去除权限

9c2ed70aa82633d82e7df9ea9d7d7512_2334402d46eb430a8839844e62d2174a.png

好,现在拥有者、所属组和 other 都没有读的权限了。


我们可以给让它们把读权限加回去吗?当然可以:


chmod [分类]+[权限] {文件名]     # 添加权限

237695eece261e94785b2dd2f6139102_d0e8c087b496425bb01e0983c4458146.png


0x01 指令的复合使用

当然,还允许复合使用:

c40596894134b6f0e8a902e64e293664_fca34194d98b4eb29a970e0b14c7d991.png


0x02 root 用户不受权限约束

当你什么权限都没有时,会受到种种限制:

6eb6a60f1f7bc8c80b9c0e4ac688e312_5323662ce1e64435ab474d8961080063.png


然而这些限制对至高无上的 root 来说,并没有什么卵用:

d58ce8f0d8e9cd349cdd2b3390af52b5_26ca8a8dd62b47e1b454787c9dd3bac7.png


0x03 八进制数值表示方法

讲完权限的修改了,我们再回到 Ⅱ.0x04  继续探讨 "八进制数值表示方法"。


权限符号(读写执行)
4 100
2 010
1 001
6 110
5 101
3 011
7 111
- - - 0 000

任何一个八进制数(0~7)都可以被写成三个比特位,这三个比特位壹壹和每一类人对应。


我们有三类人,则需要3个八进制数与之对应,所以就有了 777、000、333 等更改权限的方案。


譬如  的 - - - 分别对应   ,有或者无(两态),111 → 八进制 → 7。


→ 5 → 101 → ,原理是将八进制看作成二进制,对应上我们的权限。


💭 用法演示:八进制数值表示方法

a40d76bc3b18893767d0a48c597bf40c_872528454a604f5ebc148b3877b7a412.png

相关文章
|
2月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
58 2
|
6天前
|
机器学习/深度学习 人工智能 Ubuntu
|
18天前
|
存储 数据可视化 Java
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
如何在Linux系统下部署和运行Java项目jar包,包括传输文件到Linux、使用nohup命令运行jar包、查看端口状态、杀死进程和查看项目运行状态,以及如何解决“没有主清单属性”的错误。
128 1
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
|
1月前
|
Linux Shell
6-9|linux查询现在运行的进程
6-9|linux查询现在运行的进程
|
16天前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
1月前
|
存储 传感器 Linux
STM32微控制器为何不适合运行Linux系统的分析
总的来说,虽然技术上可能存在某些特殊情况下将Linux移植到高端STM32微控制器上的可能性,但从资源、性能、成本和应用场景等多个方面考虑,STM32微控制器不适合运行Linux系统。对于需要运行Linux的应用,更适合选择ARM Cortex-A系列处理器的开发平台。
163 0
|
1月前
|
Linux
用QEMU模拟运行uboot从SD卡启动Linux
用QEMU模拟运行uboot从SD卡启动Linux
|
3月前
|
Linux
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
|
3月前
|
Linux
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
|
3月前
|
Linux
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的