shell 运行原理 和 Linux权限

目录

一、shell运行原理

二、权限

1.权限的理解:

2. 用户账号的切换和提权

3.权限管理

1) 所属组存在的意义

2) 详谈读写执行权限

(1)文件类型

(2) 更改文件权限

(3)读,写,执行权限的理解

3) 粘滞位


一、shell运行原理

1. Linux 操作系统可以从狭义或者广义上理解:

狭义: Linux操作系统内核

广义: Linux操作系统内核 + 外壳和配套的各种软件程序

对于windows来说,外壳其实就是 图形化界面+搭载在操作系统上的各种软件

2. 用户并没有直接和操作系统打交道,用户都是在和外壳进行交互

外壳的作用:

1) 将用户输入的指令解释传递给内核  

2) 内核执行命令,得到结果,将结果通过外壳传递给用户

shell 运行原理 和 Linux权限_第1张图片

windows下的图形化界面本质就是一种外壳程序

3.用户为啥不直接和操作系统交互?

1) 用户不善于和操作系统打交道,成本太高

2) 有些非法指令到输入,因此需要外壳进行保护操作系统

4.shell 真正的工作原理

1) shell会创建子进程,让子进程帮助我们执行命令

2) 子进程有任何问题了,都不会影响父进程

二、权限

1.权限的理解:

1) 权限就是一件事允不允许你做,能做就是有权限,不能做就是没有权限

2) 权限一定要从两方面去理解,一方面就是角色,不同的角色权限可能不同;另一方面就是事物本身的属性,比如在教室就不能吃饭(不适合)

3) 权限一定是拦住一部分人,放开一部分人

2. 用户账号的切换和提权

Linux下的用户分为两大类,一类是root用户,又叫超级管理员,几乎不受权限约束;另一类是普通用户,要受权限的约束, 我们大多数情况下都是用普通账号登录的,但是有的时候要做一些高权限的事情,就需要切换账号

1) 普通用户-》root用户    su  / su -  

shell 运行原理 和 Linux权限_第2张图片

shell 运行原理 和 Linux权限_第3张图片

su 与 su - 的区别在于 su 是账号的直接切换, su - 需要退出当前用户,重新登录root用户,会出现login与logout的提示

2) root用户 -》普通用户   su 普通用户

root用户不受权限约束,因此想变成谁直接变就行

shell 运行原理 和 Linux权限_第4张图片

3) 提权

为了做权限高一点的事情,还要切换成root账号,有点麻烦了,我们可以直接用 sudo 对指令进行短暂的提权,这样就不用切换账号了

shell 运行原理 和 Linux权限_第5张图片

可以看到,第一次要输入普通账号的密码,而第二次就不用输入密码了,因为第一次sudo输入密码通过之后,用户在短时间内可能还要提权一些指令,因此linux系统相当于给密码设置了一个冷冻期,短时间内再sudo就不用再输密码了

3.权限管理

linux下的文件 角色分为拥有者,所属组和 other, 文件属性包括读/写/执行(r/w/x)

1) 所属组存在的意义

在公司中,一般是团队合作完成某个项目,为了实现组内共享而组外人看不见的目的, 如果角色只有拥有者和其他人,如果开放了other权限,意味着组内的人和组外的人都能查看,而不开放other权限,组内的人也看不了,因此我们引入了所属组这个角色

2) 详谈读写执行权限

第一列表示文件类型,剩下的9列三三为一组,分别表示拥有者权限,所属组权限,other权限,没一个角色的三列分别表示该角色的读,写,执行权限

(1)文件类型

重点: linux操作系统不以文件后缀来作为文件类型的区分,而是看第一列的字符来区分文件类型

shell 运行原理 和 Linux权限_第6张图片

ps:只是系统层面不以后缀区分文件类型,不代表软件不看文件后缀

shell 运行原理 和 Linux权限_第7张图片

- 普通文件(包括文本文件,可执行程序,动静态库)
d

目录文件

c 字符设备文件
b 块文件
l 链接文件
p

管道文件

简单介绍一下字符设备文件,链接文件和管道文件

①字符设备文件: printf("%d", 123)的时候,我们本质上是将123这个整数格式化了,最终打印在显示屏上的是‘1’‘2’‘’3 这三个字符,输入123也是一样的,本质输入的时3个字符,格式化之后放入一个整数变量里面,因此显示器和键盘都是以字符为单位进行输入输出的,而Linux下一切皆文件,因此键盘和显示器又被叫做字符设备文件

shell 运行原理 和 Linux权限_第8张图片

②链接文件: windows操作系统下的快捷方式本质就是一种链接文件,链接文件的目的就是使我们可以更快捷方便的使用一些文件

shell 运行原理 和 Linux权限_第9张图片

③管道文件

类似于上一篇博客提到的 | 管道,不过管道文件是真真正正存在的文件~

shell 运行原理 和 Linux权限_第10张图片

(2) 更改文件权限

法一: chmod    u/g/o/a   +/-    r/w/x

shell 运行原理 和 Linux权限_第11张图片

法二:八进制方案修改权限

对于每一个角色来说(user, group, other),  _ _ _ 每个位置要么是r/-,要么是w/-, 要么是x/-, 所以每个位置都是二元的,要么是1,要么是0,所以总共可能就是 000 到 111, 八进制就是0到7

二进制 权限 八进制
000 --- 0

001

--x

1
010 -w- 2
011 -wx 3
100 r-- 4
101 r-x 5
110 rw- 6
111 rwx 7

shell 运行原理 和 Linux权限_第12张图片

ps: 修改文件拥有者/所属组

shell 运行原理 和 Linux权限_第13张图片

当然也可以先变成root, 然后把文件给别人~

(3)读,写,执行权限的理解

1) 进入一个目录需要的是 目录的 可执行权限shell 运行原理 和 Linux权限_第14张图片

2) 是否允许用户查看目录里的文件列表 需要的是目录的 读权限

shell 运行原理 和 Linux权限_第15张图片

3) 能否新建或者删除目录下的文件 需要的是目录的写权限

① 是否允许用户在一个目录下新建文件 需要的是目录 写权限

shell 运行原理 和 Linux权限_第16张图片

② 能否删除目录下的文件需要的是目录的 写权限, 而与文件本身有没有 写权限无关

shell 运行原理 和 Linux权限_第17张图片

(4)研究一下默认权限

可以看到,我们新建一个普通文件/目录的时候,权限如下图所示

①普通文件的默认权限是664,目录文件的默认权限是775(上图所示)

②普通文件的起始权限是666,目录文件的起始权限是777(既定事实)

那为什么起始权限和默认权限最终不一样呢,就是因为有"权限掩码"的存在

③文件的最终权限 就是 在起始权限中去掉 权限掩码(umask) 后的权限

"去掉"的意思的是   =>   最终权限 = 起始权限 & (~umask)

shell 运行原理 和 Linux权限_第18张图片

shell 运行原理 和 Linux权限_第19张图片

这样我们就明白了,起始权限是如何去掉默认的权限掩码对应的权限之后得到默认权限的

④权限掩码是可以修改的,修改之后,创建的普通文件与目录文件的默认权限也就会随之变化

shell 运行原理 和 Linux权限_第20张图片

⑤为啥普通文件的起始权限是666呢, 目录文件是777呢???

因为大多数的普通文件是没有"可执行"属性的,因此linux系统直接设置成666

进入目录需要可执行权限,读取目录下的文件列表需要读权限,创建删除文件需要写权限,因此将目录权限设置成777

⑥权限掩码存在的意义是啥,为啥系统默认将权限掩码设置成002呢???

我们知道权限掩码默认设置成002,就会导致普通文件和目录文件的默认权限分别为664和775,而664就是不想让other随意修改我的文件,775就是为了去掉了目录other的写权限,防止出现一种情况,就是我把普通文件的权限设置成了664, 不想让你随意修改,但是目录如果对other开放了写权限,other就可以直接删除我的普通文件,综上所述,将权限掩码设置成002是很合适的

权限掩码就是为了实现对文件更加精细的管理,有些用户可能有更加精细化的需求,用户自己去修改权限掩码即可

3) 粘滞位

有些场景下,需要几个用户在同一目录下协同工作,需要创建删除文件,目录就需要开放写权限,问题是,目录一旦开放了写权限,就可能会出现文件被其他用户删除的情况,但是这种场景一般不会出现在某个用户的工作目录下,因此其他用户根本进不到该工作目录

shell 运行原理 和 Linux权限_第21张图片

可以看到,在最开始的各个用户的家目录中,每个用户对于other的读写执行权限都被去掉了,正常情况下 压根进不去别人的工作目录, 因此数据共享协同工作可以发生在公共场所,也就是可以在根目录下创建目录

shell 运行原理 和 Linux权限_第22张图片

shell 运行原理 和 Linux权限_第23张图片

为了避免在协同工作的时候,其他人可以任意删除我自己文件的情况发生,linux新增了一个权限,叫做粘滞位,粘滞位只能给目录设置!!!

shell 运行原理 和 Linux权限_第24张图片

给目录设置粘滞位之后,对于该目录下的文件,只有root或者该文件的拥有者有资格删除,其他人都删除不了了~

shell 运行原理 和 Linux权限_第25张图片

你可能感兴趣的:(linux,运维,服务器)