Linux下的文件权限管理
目录
Linux的用户分类
文件类型和权限
文件类型
文件权限
基础权限
权限归属
权限更改
粘滞位
小结
前言
Linux操作系统下皆文件,这句话在我们学习Linux的时候会贯彻到底。同时,也从侧面说明了Linux的权限管理实际上就是文件的权限的管理。
Linux的用户分类
Linux的用户分为两种,一种是超级用户(root用户),一种是普通用户。提及用户的区别的原因在于超级用户对普通用户拥有着绝对的控制权。等会儿我们在下文谈及的普通用户的各种文件权限对于超级用户来说根本没用,超级用户不受限制。这也是超级用户的特殊性,因此下文再涉及到权限的讲解时,我们不考虑超级用户这一特殊情况。
文件类型和权限
上面的文件属性最基础的涉及到文件的类型。在Linux操作系统下创建文件是会自动根据文件的类型给予相应的属性权限符号。种类如下:
文件类型
d:文件夹(目录)
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
文件权限
对于文件的具体权限,我们可以理解为我们拥有文件然后用文件去干什么。就比如,我们想要往一个文件里写入一些字符或其他东西,就需要我们有写入权限;我们想要知道一个文件里有什么东西,就需要我们有读取权限;当我们的文件里是一段可以运行的代码时,我们想要运行这个代码,我们就需要这个文件的执行权限。
基础权限
r:读权限
w:写权限
x:执行权限
-:无权限
这里知道了具体字符对应的权限含义了,那么上面图片中的一长串的字符是几个意思?按理讲一个rwx就够使了啊。这里我们就要引入权限的归属问题了。
权限归属
除了开头的文件类型,文件后面的九个权限分为三组,每组三个权限,分别属于user、group、others。
user:简单来讲就是指我们创建文件时的用户,就叫user用户。
group:这个可以理解为我们和一些其他的用户为一个小组,组内的其他成员就称为本用户(user)的group成员。
others:除了user和group成员,其他的就都是others用户了。
那么如果我们做了权限之外的操作,操作系统就会给我们报相应的警告:
我们对test.c进行运行操作,而user的权限从图中可知是读写,因此报:权限不够
接下来我们对其进行处理,先用vim编译器进行编辑,接着生成a.out可执行文件(观察到user的权限为读写执行),然后就拥有执行的权限了。
权限更改
这里有人就会疑问了:我们要的是test.c能够有执行的权限,不是形成a.out可执行文件!
这里如果想要更改test.c的权限,就用到了权限更改指令:chmod
如:
现在的test.c就在相应位置增加了执行权限。
再来看另一种写法 :
直接以三个数字来改变文件的权限。
事实上,"666"是八进制的三个数字,转换成二进制为110 110 110 其中1为真,0为假。例如110表示rw-,1和0与其对应位置的权限保持一致。
因此,更改权限的写法分为两种:
1.chmod (u/g/o) (+/-/=) (权限) 文件名
2.chmod xxx 文件名(xxx为三个八进制数字)
这里的三个八进制数就涉及到了掩码(umask)的概念。我们在创建各种文件时,他都会自动生成关于文件的一些权限,这里有规定:新建文件夹默认权限=0666,新建目录默认权限=0777。
但是据观察实际上生成的文件权限比不符合默认权限,原因在于我们每个用户都还存在一个umask对默认权限进行修改,umask用户可以自己设置,超级用户默认掩码值为0022,普通用
户默认为0002。修改的格式:umask xxx(xxx为修改后的掩码),查看格式:umask。
掩码的作用:
实际权限 = 默认权限 & (~umask)
粘滞位
上面我们了解到超级用户的特殊性,文件的权限规则只在普通用户里是适用的,但可能有一些特殊情况:用户小李没有用户小王文件的各种权限,用户小李就直接把小王的文件删除了。这样权限的设置就成了笑话,为了防止这样的事件发生,可以给多个用户所在的目录加粘滞位,这样就可以防止误删或故意删除的情况出现。
格式:chomd +t 文件名
加完粘滞位的目录对与超级用户仍是无用,有以下规则:
加完粘滞位的目录下的文件只能由超级用户删除,目录所有者删除,文件所有者删除。
小结
还是那句话Linux的权限管理实际上就是文件管理,掌握好文件权限的意义和用法是关键。
今天的分享就到这里,下期见!
一个小脑袋: 不错啊,我会继续支持你的
2301_79259049: 分析得很好,恍然大悟,谢谢
jjswater: 学到了
Sudo_Wang: 佬啊,写的真的好
贾智昂: 听了之后腰不酸了腿不疼了,心也不跳了