权限是linux学习的重点之一,今天小编来跟大家一起学习吧。
目录
一.概念
(一).人为操作(owner、group、other)
(二).文件本身属性
1.类型
2.读(r)
3.写(w)
4.执行(x)
(三).权限优先级
二.权限表示方法及转化
(一).表示方法
(二).数字转化
三.chmod命令
四.chown命令
(一).只改变拥有者:
(二).同时改变拥有者、所属组:
(三).只改变所属组:
五.chgrp命令
六.umask命令
七.粘滞位
首先我们要知道,权限操作分为两大部分:人为操作和文件本身属性。
这里可以分为三个部分:拥有者(owner)、所属组(group)、其他人(other)
1.拥有者owner是这个文件的主人。
2.所属组group是这个文件所在的组,这个组里的所有成员都可以共享该文件
3.其他人other既不是拥有者,也不属于文件所属组成员,是“局外人”。
当我们输入ll指令时便可以查看文件的拥有者(第三列)和所属组(第四列)。
注意:其他人并不会在文件属性中出现,因为other是一个宽泛的定义,不可能指定到具体的用户上。
文件本身具有类型、读(r)、写(w)、执行(x)的属性。
文件自身的属性在ll指令的第一个栏位。
文件类型可大致分为六种。
代表符号 | 文件类型 | 代表符号 | 文件类型 |
d | 目录文件 | b | 块设备 |
- | 普通文件 | c | 字符设备 |
p | 管道文件 | l | 连接文件 |
类型是栏位的第一个字符。
比如图中a.out就是普通文件,dir就是目录文件。
值得注意的是,linux系统区分文件类型的方式就是看代表符号,而不是看文件后缀。
文件能不能被用户读取就是文件的读属性。
文件能不能被用户修改就是文件的写属性。
文件能不能被用户操作就是文件的执行属性。
这里要注意,对于目录文件来说:
读/r | 能否查看目录列表 |
写/w | 能否修改目录内容 |
执行/x | 能否进入目录 |
onwer > group > other
假设一个文件拥有者没有写的权限,而所有组有写权限。即便拥有者在该所有组中,也没有写权限。其他同理。
在文件属性第一栏位中,首字符是文件属性,依次每三个分别是拥有者、所属组、其他人。
以目录文件为例:
其中,每一份都有读、写、执行的权限,-符号表示此类人没有该权限。
以上图为例,意思就是拥有者、所属组有全部权限,其他人没有目录的写权限。
文件的自身权限除了rwx的表示方式,也可以用数字来表示。
有权限用1表示,没有权限用0表示。那么:
rwx:111,r-x:101
之后将该二进制数转化成八进制就是最终的数字表示形式。
111->7,101->5
rwxrwxr-x:775
举例:
文本 | 二进制 | 最终数字(八进制) |
rw-rwx--x | 110 111 001 | 671 |
-w-r---wx | 010 100 011 | 243 |
r-xrwx--- | 101 111 000 | 570 |
改变文件的读写执行属性。
方式:chmod [指令1,指令2,指令3...] [目标文件]
指令:
首先写要修改的对象。
拥有者 | u | 其他人 | o |
所属组 | g | 全体 | a |
其次确定权限增加还是减少。
增加 | + |
减少 | - |
直接赋予 | = |
最后确定相应权限(r、w、x、-)。
举几个例子:
chmod u+w file.c | 赋予拥有者写权限 |
chmod u-wx,o+w file.c | 剥夺拥有者写、执行权限,赋予其他人写权限 |
chmod u=r-x,g-r,o=rwx file.c | 赋予拥有者读、执行权限,剥夺所有组读权限,赋予其他人全部权限。 |
chmod a-r,u+r file.c | 剥夺除拥有者外所有人的读权限 |
当然,我们也可以通过数字的形式直接操作权限。
举几个例子:
rwxrwxrwx -> rw---x-w- | chmod 612 file.c |
rw-rw-rw- -> r--r--r-- | chmod 444 file.c |
rwxrw-r-- -> rwxrwxr-- | chmod 774 file.c |
改变文件拥有者、所属组。
只能root执行,普通用户需要sudo许可。
方式:chown [新拥有者] [目标文件]
形式:chown newuser file.c
方式:chown [新拥有者:新所属组] [目标文件]
形式:chown newuser:newgroup file.c
方式:chown [:新所属组] [目标文件]
形式:chown :newgroup file.c
改变文件的所属组
只能root执行,普通用户需要sudo许可。
方式:chgrp [新所属组] [目标文件]
形式:chgrp newgroup file.c
查看/改变权限掩码
方式:
umask | 查看权限掩码 |
umask [新权限掩码] | 修改权限掩码 |
通过umask命令,我们可以直接改变文件的初始化权限。
首先,我们需要知道,linux为不同类型的文件赋予了不同的初始权限。也赋予了初始umask值(权限掩码值)。
而文件的 最终权限 = 初始权限 & (~ umask值)
即,初始权限和umask值取反的按位与。
假设一个文件的初始权限为777,umask值为002。
那么文件的真实权限就是 777 & (~002)= 777 & 775 = 775
具体步骤如下:
1.八进制 | 777 & (~002) |
2.转为二进制 | 111 111 111 & (~000 000 010) |
3.取反 | 111 111 111 & 111 111 101 |
4.按位与 | 111 111 101 |
5.转回八进制 | 775 |
粘滞位是用来确保用户在公共目录下,其他人不能删除自己的文件。
粘滞位只能在目录上操作。
方式:
chmod +t [目标目录] | 目录添加粘滞位 |
chmod -t [目标目录] | 目录消去粘滞位 |
因为在公共目录下,即便我们没有给other任何权限,他也可以对文件进行删除操作,这十分危险,所以,粘滞位应运而生。
当一个目录设置粘滞位后,它和它内部文件只能由root用户、目录拥有者、文件拥有者删除。
如有错误,敬请斧正