对于初接触Linux的朋友来说,会有各种不习惯和各种昏头,文件的权限就很让人不知所措。
ls命令以及字段含义
比如我们列出当前目录文件:
我们来看下上述大致含义:
- 第1行显示的信息: 总用量(total) - 这个数值是该目录下所有文件及目录列表第5个字段的和(以k为单位),也就是该目录的大小。
- 第1字段:文件属性字段,文件属性字段总共有10个字母组成
- 第2字段:文件硬链接数或目录子目录数
- 第3字段:文件拥有者
- 第4字段:文件拥有者所在的组
- 第5字段:文件文件大小(以字节为单位)
- 第6字段:文件创建月份
- 第7字段:文件创建日期
- 第8字段:文件创建时间
- 第9字段:文件名 (如果是一个符号链接,那么会有一个 "->" 箭头符号,后面根一个它指向的文件)
文件属性含义
我们来看看红色标注的文件属性字段“drwxr-xr-x”的含义:
- 第一位档案类型:“-”表示普通文件;“d”表示目录;"l"表示符号链接,“c”表示字符设备,“b”表示块设备,"c"和"b"两者对应的是外部I/O设备,比如键盘、硬盘,块设备是指一次可以读取某一位置的一块数据设备如硬盘,而字符设备只能一个个以确定的顺序读写内容如串口、键盘;“f”表示FIFO即命名管道;“s”表示socket;
- 后面的九位分别表示拥有者(user)、群组(group)和其他人(other)三者对应的权限:r(read)可读、w(write)可写和x(excute)可执行;
所以我们不难理解“drwxr-xr-x”的含义了:是目录类型,拥有者具有读写执行权限,所属于群组具有读执行权限,其他人具有读执行权限。
使用chmod命令改变文件权限
chmod的用法如下:
chmod [OPTION]... MODE[,MODE]... FILE...
OPTION选项有:
- -c : 若该档案权限确实已经更改,才显示其更改动作
- -f : 若该档案权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
- --help : 显示辅助说明
- --version : 显示版本
MODE的格式:
[ugoa]*([-+=]([rwxXst]*|[ugo]))+
可以归纳为
[who][opcode][permission]
- who:u表示该档案的拥有者,g表示与该档案的拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这三者皆是;
- opcode:+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限;
- permission:r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行;
例如我们给拥有者取消写的权限命令
chmod u-w test/
而r、w和x也可以分别用数字4、2、1来表示,所以下面的两个命令是等效的:
chmod u=rwx,g=rwx,o=rx test
chmod 775 test
分别用三个八进制来表示ugo,r(4)+w(2)+x(1)=7。