目录
Linux下的用户
文件的权限
Linux 下的文件
修改属性
修改人
目录权限
Umask
粘滞位
Linux下的用户
Linux 下有两种用户,超级用户( root )和 普通用户。
超级用户具有 Linux 下的最高权限,一般不受权限约束,可以在 Linux 下做任何事情,不受限制。
而普通用户要受权限的约束,在 Linux 下只能做有限的事情。
root 用户只能有一个,普通用户可以有多个,所以 Linux 是一个多用户操作系统。
而当我们去互相切换 root 和 普通用户的身份的时候,实际上潜台词就是在切换我当前的权限。
超级用户的命令提示符是 "#"
普通用户的命令提示符是 "$"
超级用户和普通用户或普通用户之间切换,需要用到 su 或者 su - ,超级用户可以随意切换成任意一个普通用户且不需要密码,而普通用户切换成其他用户或者超级用户需要密码,然而,su 和 su - 之间也是有区别的。
用 su - 从普通用户切换超级用户
用 su 从普通用户切换超级用户切换
这里,我们会发现如果用 su 切换成 root 之后,他的目录还是原先的普通用户的目录,而 su - 切换成 root 之后,他的目录也变成了 root 的目录。
也就是说 su 只是切换了你的身份,而 su - 相当于让 root 重新登陆了。
如果想切回去的话就 Ctrl + D
如果是用户之间切换的话就在 su 或 su - 后面加上要切换的用户的名字。
比如:
文件的权限
Linux 下的文件
Linux 下不以文件后缀来区分文件类型,而是以 l l 显示的第一列的第一个字符,表明该文件的文件类型
d 目录 - 普通文件 p 管道文件 b 块设备 c 字符设备 l 链接文件
Linux 系统将用户身份划分成三份, 拥有者,所属组,other
拥有者:文件属于谁的
所属组:文件属于哪一个组
other:不属于上面两种的任何一个
一般情况下,一个人可以是拥有者,它也可以自成一组。
而刚刚剩下的还有九列信息,三三为一组,分别和拥有者,所属组,other 对应起来
其中,拿出一组来解释,比如说 rwx 这样一组字符它的顺序是绝对确定的,永远对应着,读,写,执行,读有就是 r ,写有就是 w ,执行有就是 w ,没有就是 - ,所以这边的 rwx 就是拥有者他对应的权限,同样对于所属组,other,也是同样的道理。
修改属性
此时,这个新创的文件拥有者是我,所属组也是我,权限是拥有者只有读写,所属组也只有读写,other 只有读。
拥有者 u 所属组 g other o
那么如果这个时候要给拥有者加上可执行权限,就得 chmod u+x myfile.txt
这时,我们就会发现,拥有者具备了执行权限
或者可以再给他去掉读和写的权限 chmod u-rw myfile.txt
也可以先给他去掉执行,再加上读写 chmod u-x,u+rw, myfile.txt
那么我们知道了,一个文件的权限它有九列,三三为一组,每一组它的相对位置是确定的,而每一个位置要么有,要么没有,那它不就是个两态的嘛,那么,比如一个权限是 rwx 就可以写成 1 1 1 代表的它三个位置所有的权限全部有效,如果它什么权限都没有,就是 0 0 0 ,所以我们表示权限时,可以用 rwx 也可以采用三个二进制数的方式,那么如果有三组的话也就有九个二进制数,而如果把每一组转化成一个八进制数(三个比特位无符号数取值范围也就是 0 0 0 到 1 1 1 ,八进制就是 0 到 7)那么三个组就用三个八进制数来表示,换言之,我如果要描述拥有者权限 rwx ,就可以直接写成 7 ,也就是 1 1 1,也就是 rwx ,这样一来,每一组,我就可以用一个八进制数来表示,那么三个组就用三个八进制数来推而广之进行权限设置。
chmod 777 myfile.txt 也就等价于 chmod u+rwx,g+rwx,o+rwx myfile.txt
chmod 764 myfile.txt
764 == 111 110 100 == rwx rw- r--
修改人
那么,想更改这个文件的拥有者,就要用到 chown ,改成 ty 的,就是 chown ty myfile.txt,但是,普通用户下不能这样改,需要提升权限 ,然后就把这个文件给到他啦。
改文件的所属组,也是一个道理,chgrp ty myfile.txt 那么,这个文件就都属于他啦
或者也可以这样 chown ty:ty myfile.txt
目录权限
现在我有个目录叫做 dir ,我现在既是文件的拥有者,也是文件的所属组,然后我把拥有者的权限全部去掉,这个时候我作为文件的拥有者,什么权限都没有,而我又是这个文件的所属组,我又什么权限都有,但 cd dir 之后发现我却进不了,就是说我如果是文件的拥有者那就只看拥有者权限,和我是否是所属组没关系,如果我是所属组不是拥有者,那就只看所属组,因为权限只会被认证一次,首先判定你是谁,如果一旦判定了你是谁,就会用这个身份去验证你的权限,哪怕你同时又是所属组也不看了。
现在有个问题,如果要进入一个目录需要什么权限呢? r ? w ? x ?
其实可以试一下
看样子不是读
也不是写
那就只能是执行了
所以,进入一个目录所需的权限就是 x
这块总结
可执行权限:如果目录没有可执行权限,则无法 cd 到目录中
可读权限:如果目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容
可写权限:如果目录没有可写权限,则无法在目录中创建删除文件或目录
Umask
为何我们创建一个目录或文件,默认权限会是这样子呢?
首先第一点,在 Linux 当中目录的起始权限是从 777 开始的,而普通文件的起始权限是从 666 开始的,可是我们发现它的最终权限并不是这个样子的 ,这就和我们要说的 umask 相关,这个 umask 就叫做权限掩码,意思就是说凡是在 umask 中出现的权限,都不应该在最终权限中出现!
这边,我们会发现 umask 打印出来的值是 0002 有四位八进制数,对我们来讲平时看权限是三位八进制,而多这一位我们可以不用管,只需要关注它的后三位 002 就可以了。
我们以目录为例,假设目录的权限的 777 而 umask 是 002 ,首先 umask 的 00 两位并不影响前面两个,所以前面两个的权限还是 77 ,这个 2 影响的就是 other ,这边 7 的二进制是 1 1 1 而 2 就是 0 1 0 所以按照刚刚的说法(凡是在 umask 中出现的权限,都不应该在最终权限中出现)这里 other 的权限应该是 1 0 1 ,对应的八进制就是 5 ,同理,文件就是 1 0 0 八进制就是 4 ,所以我们创建出来的目录的默认权限是 rwxrwxr-x 775 文件就是 rw-rw-r-- 664
最终权限 = 起始权限&(~umask)
那如果要更改 umask 就在 umask 后面带上八进制数字,比如:
粘滞位
当多个用户共享一个目录,需要在该目录下进行读写创建删除,但是自己不仅可以删除自己的,还可以删除别人的,所以就有了一种方案能够做到让多个用户共享一个目录的同时在该目录下自己的文件创建读写都没问题,还能保证不能删除别人的文件,便有了一个新的权限属性叫做粘滞位。
直接 chmod +t mytmp
此时,我们发现,加完 t 之后它的权限就变成这个样子了,这个 t 就叫做粘滞位权限
当一个目录被设置为粘滞位,那么,这个目录就只有管理员,该目录所有者,该文件所有者可以删除。