目录
一、shell运行原理
二、权限
1、对人操作
2、对角色和文件操作
修改权限(改属性):
①ugo+-
②二进制数的表示
修改权限(改人):
三、权限的相关问题
1、目录的权限
2、umask
3、粘滞位
一、shell运行原理
shell的运行原理是外壳程序!
首先要清楚,我们人并不是直接访问操作系统的,原因如下:
1、人是不善于直接使用操作系统的
2、如果让人直接访问操作系统会有两个问题:
①操作成本很高
②人也会犯一些错误,从而带来不安全的因素
所以我们日常使用的图形化界面(Windows)或是指令操作(Linux)都是操作系统所提供的外壳程序
那么外壳程序也有它存在的意义:
1、外壳程序是用户和操作系统交互的中间软件层
2、可以在一定程度上起到保护操作系统的作用
所以人是和shell外壳程序打交道,然后外壳程序再与操作系统打交道;处理结束后,操作系统将结果反映给外壳程序,外壳程序再将结果传递给人
总结一下就是外壳程序将使用者的命令翻译给操作系统处理,同时再将操作系统的处理结果翻译给使用者
二、权限
1、对人操作
Linux下有两种用户,root和普通用户
root:只有一个,具有Linux下最高权限(一般不受权限约束)
普通用户:可以有多个,要受权限的约束
所以Linux下是可以存在多个用户的,Linux是一个对用户的操作系统
所以在Linux中切换root和普通用户,也就是在切换当前的权限
切换的命令:su [用户名]
从root用户切换到普通用户user,要使用su user
从普通用户切换到root用户,要使用su root,root可以省略,也可以su -
关于输入密码的问题,root用户切换普通用户不需要密码
普通用户切换到root用户需要root密码
普通用户1切换到普通用户2需要用户2的密码
普通用户切换到root用户后,如果想退回到刚刚的普通用户,可以Ctrl+d也可以输入命令logout
2、对角色和文件操作
权限是针对人的,事物的基本属性决定权限相关的概念
文件权限也就是一件事情是否允许被你做
因此权限的核心就是人+事物属性(r/w/x->读/写/执行)
下面看Linux中的文件的详细信息
部分含义已经备注在图上了,今天主要学习最前面的这10个字母或字符
这10个字符可以分成两部分理解,第一个和后九个
ls -l后显示的第一列的第一个字符,表明该文件的文件类型(Linux中不以文件后缀来区分文件类型,但是不代表不可以使用,虽然在系统层面没有意义,但是可以给自己看),具体文件类型如下:
d:目录
-:普通文件
p:管道文件
b:块设备(磁盘设备)
c:字符设备(键盘或显示器)
l:链接文件 ......
其中前两个是最常用的
Linux将用户身份划分为三类:拥有者,所属组,other(这三个可以理解为一种身份)
拥有者:文件属于谁
所属组:文件属于哪个组
other:不属于上面两种任何一个,就是other
红框表示的就是拥有者,蓝框表示的就是所属组,至于other即不是这两个的都是other
第一列的十个字符的后九个,三三为一组,分别是拥有者,所属组,other
这三个位置,分别是r/w/x(读/写/执行),位置是固定的,有rwx权限就显示rwx,没有的话就显示-
比如我们的Pro这个目录的权限就可以表示为:
拥有者具有读、写和执行权限;所属组具有读和执行权限,没有写权限;other具有读和执行权限,没有写权限
修改权限(改属性):
①ugo+-
现在有一个普通文件,拥有者权限是rw-,所属组权限是r--,other权限是r--
这时我想修改权限,语法是:chmod [u/g/o/a] [+/-] [r/w/x] [文件名] (其中u/g/o/a分别表示user拥有者/group所属组/other/all所有身份)
将拥有者权限改为rwx,所属组改为rwx,other改为r-x,即:
将拥有者权限改为rw-,所属组权限改为rw,other改为r,即:
将所有身份都加上x权限,即:
当普通用户缺失某些权限时,对应的功能就不能正常进行了,例如:普通用户没有r权限,那么就不能正常使用cat test.c这种命令了,没有w权限,就不能进行echo "hello" > test.c这种命令,等等
如果输入不符合权限的指令,就会出现这样的提示:
但是root用户不受权限的约束,即使root是other,也可以有rwx权限
②二进制数的表示
因为拥有者、所属组和other的rwx权限位置是固定的,所以只会有两种情况,要么有,要么没有,这时有可以表示为1,没有可以表示为0
当rwx都有时,表示成二进制数就是111,这时111表示的十进制数是7
如果只有rw,表示成二进制就是110,这时110表示的十进制数是6
所以我们也可以使用这种二进制数的方式来改变权限,即:
全部都有rwx属性
拥有者有rwx权限,二进制是111,对应的十进制为7;所属组和other都只有rw权限,二进制是110,对应的十进制是6,即:
修改权限(改人):
chown/chgrp,更改拥有者或所属组需要提升权限
比如说我目前是普通用户,有一个普通文件test.c,test.c目前的拥有者和所属组都是zhangsan,我想改变拥有者/所属组为lisi
语法是:sudo [chown/chgrp] lisi test.c
如果想一次性将拥有者和所属组都改为lisi,输入sudo chown lisi:lisi tejike即可
加上sudo后,表示执行后续的命令,要以root的权限级别来执行,这时输入的密码就是lisi的密码
当然了,如果用户想执行sudo,提升权限,需要该用户在信任列表里面,才能够执行sudo,而添加用户到信任列表里是需要root身份的,所以不会出现普通用户随随便便就可以修改拥有者所属组的行为
而如果我是root用户,则直接[chown/chgrp] lisi test.c 就可以
三、权限的相关问题
1、目录的权限
首先,一个普通文件的拥有者和所属组如果是同一个人,那么我将拥有者的权限全部去掉,虽然所属组也是这个人,并且所属组的权限都有,但是这个人实际上是没有任何权限的,因为权限只被认证一次,被认证为拥有者就不管是不是所属组了
注意:
进入一个目录需要x权限,如:cd ...
查看目录下面的文件列表需要r权限,如:ls -al
要在目录下创建文件或目录需要w权限,如:touch test.c
2、umask
umask叫做权限掩码,凡在umask中出现的权限,都不应该在最终权限中出现
我们目前只研究umask的后三位,即0 2 2
并且目录的起始权限是7 7 7开始的,普通文件的起始权限是6 6 6开始的
目录的起始权限7 7 7说明拥有者、所属组、other的rwx权限都有,即对应位置为1,所以二进制1 1 1转换为十进制就是7
umask为0 2 2,而0 2 2的第一个数是0,由于凡在umask中出现的权限,都不应该在最终权限中出现,而第一个数为0,说明umask不会影响拥有者的rwx权限,所以拥有者的最终权限仍然是rwx
而后面的两位都是2,而2变为二进制是0 1 0,所属组和other所对应的7,变为二进制是1 1 1,由于凡在umask中出现的权限,都不应该在最终权限中出现,所以umask中1所在的位置,也就是w的权限,在umask中出现了,所以所属组和other的最终权限都不应该有,所以所属组和other的最终权限都变为了r-x
所以最终目录test的权限显示为rwxr-xr-x
其实也就是 最终权限=起始权限&(~umask)
即0 2 2变为二进制是0 0 0 0 1 0 0 1 0,而7 7 7变为二进制是 1 1 1 1 1 1 1 1 1
先取反~umask,变为1 1 1 1 0 1 1 0 1,再与1 1 1 1 1 1 1 1 1按位与
变为了1 1 1 1 0 1 1 0 1,也就是rwxr-xr-x
所以有了这个计算方法,我们如果想设置权限,也可改变umask值,例如umask变为0777,设置完后,拥有者所属组other都没有权限了
3、粘滞位
有一种情况是:大家所有用户都在一个共同的目录下,对该目录都有读写执行的权限,同时需要满足两个要求:
①、当多个用户共享一个目录时,需要在该目录下,进行读写,创建、删除文件
②、同时要保证自己只能删除自己的,而不能删除别人的(因为原本other权限是有w的,但是这可以互删,不满足要求)
在同一个目录下,大家各自有各自的文件,如果想保证自己能创建自己的文件或删除自己的文件,那么必须要保证该目录other要有w权限,但是这种情况又会导致互相看不见对方的文件,但是却可以互相删除对方的文件,要解决这个问题,就需要用到粘滞位
粘滞位语法就是 chmod +t test
这时候可以发现,原本other的x权限变为了t,这个t权限可以理解为x的特殊情况
这时就满足了上面的两个条件
注意:粘滞位只能给目录设置,一般是谁设置谁取消(root)