在linux的世界中我们首先要有万物皆文件的概念,那么在系统中有那么多的文件,我们该怎么区分呢?
在linux中文件大致分为以下几类:
-:普通文件,源代码,可执行程序,库等等。
d:目录文件
c:字符设备文件,键盘,显示器
b:块设备文件
l:链接文件
p:管道文件
上面的字母是各类文件的表示他们位于这个位置:
我们可以看到在linux中文件的前面有很多属性而位于最前面的十个字符中的第一个字符则表明了它是一个什么样的文件,那么就有人会问那后面剩下的字符是什么意思呢?现在我们先来介绍一下其他的知识。
linux中一般对不同类型的文件有着不同的高亮颜色
这里可以看到有两个字符串,而且好像是我们的账户名字。是的它就是我们账户的名字,而不同的位置有着不同的意思,第一个是代表拥有者,即创造这个文件的人,第二个是所属组,这个里面可以不止一个人,他的目的是为了让多人对这个文件进行维护。而除了拥有者和所属组外,还有一种身份是other,other是除上述两种身份外的所有人的囊括,即对某个文件一个人不属于上述两种身份的情况下那他就是other。
现在我们再来看文件的前面那十个字符的后九个字符是什么意思。
他其实是代表了三个身份对于这个文件的所拥有的权限,而权限分为三种:
r:读权限
w:写权限
x:可执行的权限
我们假如修改test.c文件所属组的权限,他现在的权限是只有读和写的权限,我们让他把这两个的权限也去掉:
而修改权限需要的命令是chmod g-rw test.c
其中:u(user)代表拥有者,g(group)代表所属组,o(other)代表other。要修改权限,只需要身份加减权限言明对应文件即可。
再次赋予所属组原来的权限:chmod g+rw test.c
只有拥有者和root账户可以修改文件权限
chmod
a:全体的增加和删除权限
对某个文件目录添加或删除某个身份的权限,会使隶属于这个身份对于这个文件的修改,查看,执行权限有所改变。对于一个文件来说,写权限就是修改文件的内容,读权限就是查看文件内容,执行就是执行。
而对于一个目录来说。
写权限是对目录内的文件增加或者删除
读权限是能否查看这个目录中的内容
执行权限是能否进入这个目录
所以当一个目录other权限开放时,就算目录中的文件的other权限全部关闭,当other进入这个目录时,仍旧可以任意的添加删除文件,所以一个用户删除添加一个文件,取决于他的身份和对应身份在当前文件所属目录的权限如何。
而在多人协作在同一个目录时,则需要当前目录对特定身份的人开放全部权限,而这时候就有可能导致错误性的删除某些文件,而造成损失,所以就出现了一个新的概念叫做粘滞位。粘滞位在默认状态下对other身份的人进行限制
chmod +t 文件 (默认other,只能给目录设置,添加后只能该目录的拥有者删除文件。)
现在我们用root账户在home路径下创建一个多人协作所需要的目录group_work,并在目录里添加一个文件test,并开放other的所有权限。
这时候我们使用zsw账号就可以随意的删除这个test文件
我们再次创建文件在group_work目录中,在对这个目录增添粘滞位。
这个时候就不被允许随意的删除文件了,当设置好后只能由目录的拥有者删除文件
我们发现这九个字符他们的状态不是rwx就是‘-’(除开粘滞位外),所以他们完全可以用0和1来表示他们的状态,三三成组,而三个二进制位又可以用一个八进制位来表示。所以当我们修改权限时,可以这么来写
chmod 444 文件名 (表示这个文件要修改为的权限是100100100 r--r--r--)
chown root test.txt --- 修改拥有者,可以在前面加sudo强制给予
chgrp root test.txt --- 修改所属组,同上
chown root:root test.txt 修改拥有者和所属组
这里只需要修改两个身份就可以,因为不属于这两个身份的人一定是other
现在我们再创建一个目录和文件
linux系统新建文件默认没有执行权限,其最大权限为rw-rw-rw-(666),新建目录的最大权限为rwx-rwx-rwx(777)
当我们创建好时我们发现他的权限是这样的,与我们上述结论不符合。那为什么是这样的呢?
其实这是受系统权限掩码的影响,我们可以输入umask并回车查看当前权限掩码
权限掩码有四个数字,我们只看后三个。
而这个默认权限又会与权限掩码发生作用才会形成最终权限,他们作用的过程就是
最终权限 = 起始权限去掉权限掩码中出现的权限,所以我们才会看到常见好的目录他没有了写权限,是为了防止other随意删除目录中文件
最终权限在计算机里的操作是:
最终权限 = 起始权限 & (~ 掩码权限)