接上一篇文章Linux shell编程(四): Linux 用户和组管理
2.4.3 Linux文件权限
使用 ls
命令可以查看文件、目录和设备的权限(第一组),如下:
共有10位,除第1位,后9位每3位为一组,其中各部分含义如下:
- 文件类型
- - 代表文件
- d 代表目录
- l 代表链接
- c 代表字符型设备
- b 代表块设备
- n 代表网络设备
- 属主权限(user)
- 属组权限(group)
- 其他用户权限(other)
其中,每组3位依次为读权限/写权限/执行权限,
- r 代表可读
- w 代表可写
- x 代表可执行
- - 代表当前位没有权限
有时也看到使用数字表示这几位权限,其实这些数字是八进制数,它与字母表示的方法是通过二进制转换过来的,对应关系如下:
权限 | 二进制值 | 八进制值 | 描述 |
---|---|---|---|
— | 000 | 0 | 没有任何权限 |
–x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 有写入和执行权限 |
r– | 100 | 4 | 只有读取权限 |
r-x | 101 | 5 | 有读取和执行权限 |
rw- | 110 | 6 | 有读取和写入权限 |
rwx | 111 | 7 | 有全部权限 |
依照此规律,上面例子中的 Videos 目录的权限用数字可以表示成 755。
修改权限
使用 chmod
命令可以修改文件和目录的权限,如下:
chmod options mode file
其中,options 是参数选项,mode 是权限,file 是要修改权限的文件或目录。
对于参数选项,有一个很有用的参数 -R
,可以让权限的改变递归地作用到文件和子目录。
对于mode权限,可以使用八进制模式或符号模式进行设置。
八进制模式: chmod 760 testfile
符号模式较八进制模式有些复杂,它的格式如下:
[ugoa][+-=][rwxXstugo]
其中第一组各字符含义如下:
- u:用户(user)
- g:用户组(group)
- o:其他(other)
- a:上述所有(all)
第二组各字符含义如下:
- +:在现有权限基础上增加权限
- -:在现有权限基础上移除权限
- =:将权限设置成后面的值
第三组除rwx外,其余各字符含义如下:
- X:如果对象是目录或者它已有执行权限,赋予执行权限。
- s:运行时重新设置UID或GID。
- t:保留文件或目录。
- u:将权限设置为跟属主一样。
- g:将权限设置为跟属组一样。
- o:将权限设置为跟其他用户一样。
使用示例:
修改所属关系
chown
命令用来改变文件的属主,也可以同时修改属组,chgrp
命令用来改变文件的默认属组。
chown
修改属主
chown testuser testfile
chown
修改属组
chown .testgroup testfile
chown 同时修改属主和属组
chown testuser.testgroup testfile
如果属组是通过匹配属主创建的(此时属组和属主同名),同时修改属主和属组可以简写为:
chown testuser. testfile
同样,chown
也有参数选项,-R
选项配合通配符可以递归地改变子目录和文件的所属关系。 -h
选项可以改变该文件的所有符号链接文件的所属关系。
注意,只有root用户能够改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。