目录
1.文件的权限
前面已经粗略的介绍了一下文件权限的修改命令chmod,这里继续上面的介绍。这里我们把拥有者的权限修改成只有可执行,再去掉用文件看看会发生什么?
可以看见,系统拒绝了我们的访问,因为我们作为拥有者没有权限进行“r”操作,或许你会疑问为什么我们不可以以所属的身份进行访问呢?这是因为系统只能识别一次你的身份,当你的身份已经被确定为拥有者时,就无法被识别成所属组了。
<1>chown 命令
如果我们就想阅读"1.cpp"文件里面的内容,就必需以所属组或other 身份来进行访问,前面已经说过了,系统只会识别一次用户身份,所以我们必需要修改文件拥有者,这是就需要chown命令了,这个命令得有root 权限才能使用,所以普通用户在使用chown前要加上sudo(其实这个也好理解,你要给东西给别人,就必须经过别人得同意,chown 命令就相当于强制别人收下这个东西)。
需要注意的是,只用普通用户才会被权限限定,对于root 用户来说,权限的限制是不存在的(可以把root理解成封建皇朝的皇帝),所以在linux 操作系统中root账号是非常重要的,在root 用户眼里,系统没有秘密。
<2> chmod 命令另一种修改权限方式
对于一个文件中特定用户(拥有者,所属组,other)的权限就只有rwx 三种,如果没有就用 - 来表示,那我们就可以用 1 来表示有这个权限,0 表示没有这个权限。假如三个权限均有则表示为 111,我们可以把它理解成二进制的数字,转成十进制那么就是数字 7 。此时把剩下的每组的权限依次转换,并把他们拼接起来形成一串数字。
下面先举个例子,帮助理解数字的转换过程:
假设一个文件的权限是 rwxrwxr-x(如下表格)
r | w | x | r | w | x | r | - | x |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
转换成十进制(三个数字为一组),再拼接
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
0 | 0 | 7 | 0 | 0 | 7 | 0 | 0 | 5 |
拼接而成的数字就是775 这就代表上面 rwxrwxr-x 这条文件权限,如果我们要将另一个文件的权限修改跟这个文件一样的权限,我们只需要实行 chmod + 权限数字 + 文件名 即可,当然如果你觉得这不够直观,你也可以使用我在上文提到得修改方法,这两种其实并无差异。
<3>chgrp 命令
chgrp 命令,其实跟chown 命令差不多,其中的操作于chown 差不多,都要sudo 进行提权。这个命令就是修改所属组。当然,如果你想同时修改所属组与拥有者,那可以使用chown + “要修改成的拥有者” :“要修改成的所属组” + 文件名。
注意:修改所属组与拥有者的过程中就是修改other。
2.文件类型
在windows 操作系统中,我们一般以文件后缀区别文件类型,通过这些类型就可以让特定的软件进行操作。在Linux 操作系统中,我们不以文件的后缀区分文件的类型,一般文件的后缀是为了方便人们阅读,在Linux中,我们一般以文件权限的第一个字符作为文件类型。(也就是下图中红框标起来的部分)
下面介绍常见的文件类型:
<1> " - " : 表示普通文件,包含文本,源码,视频等 <2> " d ": 表示目录文件 <3> " b ": block 表示块设备文件 <4> " c ": 字符设备文件 <5> " l " : 链接文件 <6> "p" : 管道文件 <7> "s" : socket 文件
这里的dev 是设备分区(这里我的是云服务器,磁盘在该路径下,虚拟机可能不一样)
b 表示块设备文件(支持随机访问就叫块设备)。
下面依旧输入/dev 这个文件就能查看字符设备的文件类型
c 表示字符设备文件 (不支持随机访问,最典型就是键盘显示器) 链接文件在现阶段,可以理解成桌面上的快捷方式。 下面我用mkfifo 命令创建一个管道文件
如上图,my 文件就是一个管道文件,那么管道文件和我们之前介绍管道命令有什么关系呢?其实这两属于是一种兄弟关系,都可以传递信息,具体作用后面介绍。
下面就演示一下基本管道文件基本操作(echo 写入my 文件,再用cat 输出 my 里面的文件)
socket 文件暂不介绍,目前接触不到。
3.关于文件的误区和一些问题
<1>linux 系统虽然不以后缀结尾,但是Linux里面工具是会识别文件的后缀,例如在实行gcc 命令时,gcc 是会识别文件,如果随便取后缀,会造成gcc 这个命令无法识别的情况
<2>linux 系统中,如果我们要进入一个目录文件需要什么权限呢?
我们可以通过控制变量来观察
我们可以发现,只有最后去掉x 权限时,目录文件无法进入。所以我们可以得知,进入目录文件需要x 权限。这也是为什么我们在创建目录文件时,目录文件会自动在所有用户加上x 权限。
<3> 目录文件的其他权限的介绍
当我们没有目录文件的 r 权限时,我们也是无法查看目录文件的属性信息的
当我们没有w 权限时,我们是没办法在目录文件里进行创建文件、删除文件、修改文件名或文件内容的操作,注意其他属性是可以修改(原因后面文章解释)。
<4> 目录文件和普通文件被创建时的默认权限问题
我们可以发现普通文件创建时的权限默认是664,目录文件的默认权限是775。为什么他们创建出来的权限不是777 或 666 呢?其实普通文件的起始权限就是666,(这里不是777原因是一开始普通文件是不需要被执行的,里面一般都是些文本内容)目录文件的起始权限其实就是777,不过这里关系到权限掩码的问题,这里我们可以改变权限掩码来定制文件刚被创建时的文件。
把这个数值转换成二进制数字,不过要注意的是,这个数字长度跟权限数字长度要一致。权限掩码转换成二进制数字后,于转成二进制的权限数字做差,举个例子:上面的权限掩码是 0002,也就是 002, 转二进制变成 000 000 010,文件的起始权限为666,转成二进制 110 110 110,如果起始权限中出现掩码权限,就去掉改数字,并变为0,如果没有出现就保持不变。你也可以理解为 起始权限 & (~权限掩码) = 最终权限(默认)
起始权限 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
权限掩码 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
被创建后的权限 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 |
目录文件其实也是一样的操作。如果我们要改变默认权限,就只要修改权限掩码即可。
<5>文件目录里面的权限问题
假设我们作为一个普通用户去访问自己的目录(有rwx 权限)时,发现里面root 的文件权限为000,我们作为普通用户无法访问,但是我们如果实行rm 命令时,其实是可以删除的。所以我们可以得出一个结论,文件是否能被删,并不取决于文件本身,而取决于文件目录的w权限。(我们可以把用户的文件看作一个家,上面权限为000 的root 文件看作家里面的物品,虽然我们在家里面用不了这个东西,但我们可以把它扔了)
为了防止有人随便进入他人家目录建文件或删文件,Linux 中用户被创建时,其家目录的文件只有对拥有者有rwx ,其他用户的权限均为0(虽然root的权限为0 ,但root 不受权限控制)。
既然用户不能之间在彼此的家目录创建文件,那我们该如何解决日常的协作开发中多用户同时访问一个文件的问题呢? Linux在根目录下创建了一个/tmp 目录,所有用户都可以访问该目录的文件,该目录的所有权限都被放开了
我们发现,最后一个全限字母并不是 x 而是 t。这里介绍 t 存在的原因,tmp目录文件所有权限都被放开了,多个用户在该目录创建文件,为了防止个别用户乱删别人的文件,就诞生了一个 t 权限,这个 t 权限就叫粘滞位,该权限可以让用户创建的文件只有root 跟用该用户才能删除,其他人都没有权力进行删除操作。(注意该权限里面包含了x权限,不要以为没有x权限了)
以上就是所有的内容,希望对各位读者有所帮助,如果文中有不对之处,还望各位大佬指正,谢谢!!!
标签:文件,--,我们,命令,Linux,权限,root,目录 From: https://blog.csdn.net/2302_79538079/article/details/136896775