Linux系列笔记----------理解文件权限
Posted 嵌入式历练者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系列笔记----------理解文件权限相关的知识,希望对你有一定的参考价值。
目录
1.1使用文件权限符【!】解读ls -l命令所输出的谜一般的文件权限
前言:
记下相关笔记,记录我的学习生活!
该文章为原创,转载请注明出处和作者:https://blog.csdn.net/Eterlove/article/details/120611962
1.理解文件权限
1.1使用文件权限符
【!】解读ls -l命令所输出的谜一般的文件权限
输出的第一个字段是用来说明文件和目录权限的编码
第一个字符代表对象类型:
- 代表文件
d代表目录
l 代表链接
c 代表字符型设备
b 代表快设备
n 代表网络设备
之后三组三字符的编码,每一组都定义了三种访问权限:
r (read)代表对象是可读的
w (write) 代表对象是可写的
x 代表对象是可执行
若没有某种权限,则用单破折线替代(如rw-说明该对象没有可执行权限)
[shichenghong@localhost 桌面]$ cd /home
[shichenghong@localhost home]$ ls -l
总用量 8
-rw-r--r--. 1 root root 0 9月 29 17:46 aaa.txt
drwxr-xr-x. 2 root root 4096 9月 29 17:47 bbb
-rw-r--r--. 1 root root 0 9月 28 18:00 hello
这里有三组权限分别对应对象的三个安全级别:
(按从左到右顺序) 第一组:对象的属主
第二组:对象的属组
第三组:系统其他用户
用上面找个简单例子说明:
-rw-r--r--. 1 root root 0 9月 29 17:46 aaa.txt
文件aaa.txt(第一个字符-代表对象是文件)有三组权限:
rw-: 文件的属主(是登录名root)
r--: 文件的属组(是组名root)
r--: 系统上其他用户
详解:这些权限说明登录名为root的用户可以读取,写入这个文件,但不可以执行这个文件,类似的,root组的成员可以读取,但不可以写入这个文件及执行这个文件,而不属于root组的其他用户也只能读取文件,而不能写入和执行文件。(wx被单破折线-所替代)
2.默认文件权限
接下来我们讨论下文件从何而来,你可能曾经接触过-----umask
2.1umask命令用来设置所创建文件和目录的默认权限
[root@localhost home]# umask
0022
[root@localhost home]# pwd
/home
[root@localhost home]# touch zzz.txt
[root@localhost home]# ls -l zzz.txt
-rw-r--r--. 1 root root 0 10月 5 21:14 zzz.txt
- 遗憾的是umask有一点复杂!以上为例,0022第一位表示一项特别的安全特性,叫做粘着位(先了解后面讲述,这次不是重点)
- 后面的3位表示文件或目录对应的umask八进制值,八进制模式的安全性设置先获取这3个rwx权限的值,然后将其转化成3位二进制值,用一个八进制值来表示。
- 以rw-为例,权限值就是rw- ,转化成二进制值为110,代表的八进制值为6
-
-rw-r--r--. 1 root root 0 10月 5 21:14 zzz.txt
- 理解八进制模式后就更加让我疑惑了,我的Linux系统上默认的八进制值为0022,为什么我所创建的文件八进制权限为644?
- 原来umask值只是个掩码,它会屏蔽掉不想授予该安全级别的权限
- 要把umask值从对象的全权限值中减掉,对文件而言,全权限的值为666(所有用户都有读写的权限),而对于目录来说,则是777(所有用户都有读写,执行权限)
- 在上例中,文件剩下的权限644=666-022
值得注意的是,在大多数Linux发行版中,umask中设置在/etc/profile启动文件中,也有一些是设置在/etc/login.defs文件中(如Ubuntu),可以用umask命令设置指定一个新值。
[root@localhost home]# umask 026
3.改变权限
你已经创建了一个目录和文件,如何更改文件和目录的已有权限?
- chmod命令用来改变文件和目录的安全性设置
- 格式:chmod mode newfile
- mode参数可以使用八进制模式和符号模式设置权限
3.1.八进制模式改变权限
- 以上面zzz.txt文件为例
[root@localhost home]# ls -l zzz.txt
-rw-r--r--. 1 root root 0 10月 5 21:14 zzz.txt
[root@localhost home]# chmod 760 zzz.txt
[root@localhost home]# ls -lF zzz.txt
-rwxrw----. 1 root root 0 10月 5 21:14 zzz.txt*
- chmod 760 zzz.txt,八进制直观,直接把期望的权限值以八进制权限值赋予文件即可
- 注意ls命令的-F选项,它能让在具有执行权限的文件名后面加一个*星号,以便于区分出是一个可执行文件。(选项-l和-F可以合在一起使用,两者作用相加)若不清楚相关指令,可看我博客Linux系列笔记(二)https://blog.csdn.net/Eterlove/article/details/120573700https://blog.csdn.net/Eterlove/article/details/120573700
3.2.符号模式改变权限
- 下面是符号模式的格式:[ugoa...] [+ - =] [rwxXstugo.diyi]
- 第一组字符定义了权限作用的对象:
u表示用户
g表示组
o表示其他
a代表上述全部
- 接下来,后面的符号表示在现有权限基础上增加权限(+),或者在现有权限基础上减去权限(-),或是将权限设置成后面的值(=)
- 第三个符号代表作用到设置上的权限,除了常见的rwx权限,其他的有:
X:如果对象是目录或者它已有执行权限,赋予执行权限
s:运行时重新设置UID(用户ID)或GID(组ID)
t:保留文件和目录
u:将权限设置为跟属主一样
g:将权限设置为跟属组一样
o:将权限设置为跟其他用户一样
还是以上述zzz.txt为例:
[root@localhost home]# ls -lF zzz.txt
-rwxrw----. 1 root root 0 10月 5 21:14 zzz.txt*
[root@localhost home]# chmod u-x zzz.txt
[root@localhost home]# ls -lF zzz.txt
-rw-rw----. 1 root root 0 10月 5 21:14 zzz.txt
[root@localhost home]#
- 由ls -lF可知用户具有可执行权限,现在我想减去这个权限。
- chmod u-x zzz.txt
- u-x移除了属主已有的执行权限,现在zzz.txt文件后面已经没有了*星号,即没有了执行权限
动手才能收获。最后感谢大家阅读!
以上是关于Linux系列笔记----------理解文件权限的主要内容,如果未能解决你的问题,请参考以下文章