文章目录
- 文件权限
- 文件类型
- 文件访问者的分类
- 文件权限的类型
- 文件访问权限的设置
- 目录的权限
文件权限
对于每个LInux文件,如果用ll指令查看的话,可以发现每个文件前面都有一串类似的字符:
这里总共有十个字符,其中第一个字符表示文件的类型,后面九个字符表示文件访问者的权限。
文件类型
LInux的文件类型分为以下几种:
- d:文件夹
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
- -:普通文件
显然我们上面那个文件就是一个文件夹。
此外,在众多文件类型中,最常见的是文件夹类型和普通文件类型。
文件访问者的分类
在Linux操作系统中,我们通常将访问者分为三类;
- 文件的所有者:u---User
- 文件所在的组:g---Group
- 其他用户:o---Others
值得注意的是root用户凌驾于所有访问者之上。root不受权限的约束。
文件权限的类型
一个文件的权限共有三个:
- r---读权限
- w---写权限
- x---执行权限
前面提到的十个字符,第一个表示的是文件的类型。剩下的九个字符中,前三个是u的权限,中间三个是g的权限,后面三个是o的权限。
- 也就是说,三个字符代表了访问者的三个权限。三个权限的顺序为rwx。如果没有这个权限即为-。
- 例如:r--为只读权限;rw-为读写权限;---为无权限。
- 关于执行权限需要特别说明一下:文件被执行需要满足的条件,访问者具有执行权限,文件是可执行文件。
文件访问权限的设置
chmod [参数] 权限 文件名
常用选项:
- R->递归修改目录文件的权限。
- 注意:只有文件拥有者和root才能修改文件的权限。
我们可以通过u/g/o/a(所有人) +-= rwx来修改权限。
# chmod u+x test.c
# chmod u=rw test.c
此外,如果将有权限看成1,无权限看成0.则rwx对应了111这样一个三位的二进制数。我们可以通过输入对应的十进制数来设置访问权限。
# chmod 000 test.c
# chmod 664 test.c
其中,6对应的二进制是110,对应的权限为rw-;4对应的二进制为100,对应的权限为r--。
chown [参数] 用户名 文件名
能够改变文件的拥有者。
chgrp [参数] 用户组名 文件名
能够修改文件的所属组。
umask 权限值
- 单独使用umask时,能够查看文件掩码。
- 加上权限值时,能够设置文件掩码
我们新建的文件默认权限为0666,目录的权限为0777.
但细心的读者可以发现,我们平时新建的普通文件权限明明就是-rw-rw-r--,新建文件夹的权限是drwxrwxr-x。
这似乎和我们的默认权限不太吻合啊!
实际上新建文件时设置的权限,会消掉umask(文件掩码)对应的权限。
普通用户umask的默认值为0002,root用户umask的默认值为0022.
这就是为什么当我们用普通用户创建一个普通文件时,权限为-rw-rw-r--,因为others的权限中的w被掩码给过滤掉了。
file [选项] 文件
能够辨识文件类型。
常用选项:
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z 尝试去解读压缩文件的内容。
# file test.c
# file -c test.c
此外,我们还可以使用sudo来分配权限。
目录的权限
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
换言之,我们只需要拥有文件夹的w权限就能随意删除文件夹里面的文件,即使这些文件的所有者不是我们。这显然对所有者来说时不公平的。
为了解决这个问题。
Linux引入了粘滞位的概念。
chmod +t 目录名
经过上面的指令操作,就可以将目录加上粘滞位。
那么一个目录被设置了粘滞位,那么这个目录下的文件只能由
- root
- 目录user
- 文件user
删除。