目录
前言
本节讨论的内容大都将依照本图展开😋
文件类型和访问权限(事物属性)
补充知识
权限 = 用户的角色(具体的人) + 文件权限属性
当我们使用ll指令查看文件或目录的详细属性时,我们发现每一行的开头都会有这样的十个字符,首字符自成一组,剩余字符三三为一组,每组对应三种角色(“拥有者”,“所属组”,“Other”)对该文件/目录的属性的操作权限。其中,首字符表示文件的类型,组中的字符表示对应角色对该文件的使用权限,组中第一个字符“r”表示读操作权限,第二个字符“w”表示写操作权限,第三个字符“x”表示执行操作权限,如果角色未拥有该文件的某项操作权限则用"-"代替该字符(r或w或x)
文件类型
概念:windows会根据文件的后缀名区分文件类型,但Liunx不会根据文件后缀名区分文件类型
当我们利用mv指令重命名文件时,以.txt为后缀的文件、以.c为后缀的文件、以.exe为后缀的文件都是可执行文件:
linux通过ls -l指令查看到的文件的第一个属性列来确定文件的类型,该列的参数有以下几种:
- d:目录文件(mkdir创建的文件)
- -:普通文件(文本文件、可执行程序、库等都是普通文件)
- l:链接文件(类似Windows的快捷方式,更细致的可以说是软链接文件)
- b:块设备文件(主要代表是磁盘)
- p:管道文件
- c:字符设备文件(显示器就是字符设备文件)
1、以b开头的磁盘文件(虚拟机中的位置不一定是vda,可能是sda等,但一定在dev目录下):
2、以c开头的字符设备文件:
关于字符设备文件的具体内容,请查看:中Linux的基本指令(三)的补充知识
3、以p开头的管道文件(mkfifo指令创建管道文件):
4、以l开头的链接文件(了解即可):
以windows为例,当我们点击桌面上的qq文件时,其实我们打开的只是QQ的快捷方式:在Windows操作系统中,桌面上的快捷方式实际上是一个特殊类型的文件,它包含了目标程序(如
.exe
文件)所在位置以及其他相关属性。当你双击或单击该快捷方式时,操作系统会读取其中指定的链接信息,并自动打开对应路径下的可执行文件:
学习Linux的基本阶段我们常见的是d和-两种文件类型
注意事项:Liunx系统不会根据文件后缀名区分文件类型,但是Liunx系统上的工具gcc会区分文件类型(Linux系统 != gcc):
结论:为了方便理解和记忆文件的含义,依然推荐在Liunx中使用像windows中依据文件后缀区分文件类型的方式来创建和识别文件
文件操作权限
- r:对文件来说,具有读取该文件内容的权限;对目录来说,具有浏览该目录信息的权限
- w:对文件来说,具有修改该文件内容的权限;对目录来说,具有删除和移动目录内文件的权限
- x:对文件来说,具有执行该文件的权限;对目录来说,具有进入目录的权限
- -:表示不具有该项权限
注意事项: 文件可执行 = 是可执行文件 + 拥有可执行文件的权限
1、是可执行文件但是没有可执行权限:
2、不是可执行文件但是有可执行权限:
3、既是可执行文件又有可执行权限:
修改文件权限
权限 = 用户的角色(具体的人) + 文件权限属性
文件权限也是文件的一种属性
只有文件的拥有者和超级账户root有权限修改文件的权限
chmod指令
语法:chmod [选项] [对文件权限的操作] 文件名
功能: 设置文件的访问权限
对文件权限的操作的格式:用户表示符 “+ 或 - 或 =” 权限字符(可以是多个)
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
用户表示符:
- u:拥有者(user)
- g:拥有者的同组成员(group)
- o:其它用户(other)
- a:所有用户(all)
常用选项:
- -R:递归修改文件或目录的权限
常见使用方式:
1、chmod o-r test1.txt,取消other对test1.txt文件的读权限:
2、chmod u+x test1.txt,增加user对test1.txt文件的可执行权限:
3、chmod o+rwx test1.txt,增加other对test1.txt文件的读、写、可执行权限:
4、chmod u-r,o-r test1.txt,同时取消user和other对test1.txt文件的读权限:
5、chmod a-rwx test1.txt,同时取消所有角色的读、写、执行权限:
文件权限值的表示方法
字符表示方法
8进制数值表示方法
我们可以用二进制1表示某文件的拥有者和所属组能正常使用该文件的某项权限,用二进制0表示不能正常使用该文件的某项权限,由于角色对文件的操作权限三三为一组,所以某角色对文件的所有操作权限可以用八进制来表示:
1、chmod 777 test.txt,将test.txt文件的三个角色对应的文件操作权限全部更改为rwx:
2、chmod 731 test.txt,将test.txt文件拥有者的操作权限改为rwx,所属组的操作权限改为wx,其他人的操作权限改为x:
权限有无带来的影响
1、当我们在普通用户的test01目录下创建test.txt后,将该文件的读、写、执行权限全部变为”-“,然后进行cat读文件,echo写文件(由于.txt不是可执行文件所以root和普通用户都报错),可以发现的是,即使是普通用户自己创建出来的文件,当没有对该文件地读写权限时也仍然报错,而超级用户还是那么的无敌,即使作为other没有读、写权限也可以正常使用:
结论:普通用户自身也受到权限的约束,即便文件是自己创建的,root用户不受权限约束
2、我们尝试用作为other的张三对test.txt文件进行读、写、执行操作,发现也会失败:
此外,当我们赋予文件的拥有者和所属组读和写的权限后,拥有着和所属组可以正常使用了,但是作为other的张三依然不能使用:
结论:文件权限存在的意义是为了保证普通用户的文件的安全性
3、当文件的拥有者和所属组均为普通用户,且都拥有对文件的读写权限时,当我们取消了拥有者的读写权限,保留了所属组的读写权限时,虽然普通用户作为拥有者没了对文件的读写权限,但是作为所属组仍然拥有对文件的读写权限,但仍然无法正常使用:
但是,当我们将文件的拥有者改为root,将文件的所属组仍保留为普通用户,此时再次用普通用户读、写文件,可以发现成功读写文件了:
结论:Linux对用户身份识别时,只识别一次,识别成功则不再识别,识别失败则继续识别直到识别成功(用户在访问文件时,系统会判定用户对于该文件是拥有者、所属组、Other,然后再去三三为一组的权限列表里进行权限识别,然后确定该用户是否有对该文件的某项权限,这里普通用户对该文件是所属组,不是拥有者所以第一次匹配身份识别失败,第二次身份识别成功,然后该文件的所属组拥有对该文件的读写权限,所以此时普通用户就可以正常的读写文件了)
修改文件角色
在上面我们提到了,权限 = 用户的角色(具体的人) + 文件属性,我们通过chmod实现了对文件属性权限的修改,现在我们要学习对用户的角色进行修改:
chown与chgrp指令
语法:chown/chgrp [选项] 用户名 文件名 或 chown 用户名1:用户名2 文件名
功能:修改文件或目录的拥有者和所属组 或同时修改文件或目录的拥有者和所属组
注意事项:对普通用户而言,将自己文件给予他人的操作强制的,需要sudo指令提权
常见选项:
-
-R: 递归修改文件或目录的角色
常见使用方式:(作者当前环境sudo执行失败,后续会放图)
1、chown zhangsan test.txt,将test.txt文件的拥有者换为zhangsan:
2、chgrp zhangsan test.txt,将test.txt文件的所属组换为zhangsan:
3、chown yyf:root test.txt,将test.txt文件的拥有者和所属组分别改为yyf和root:
当一个文件的拥有者和所属组改变后,other的身份自然就会发生改变所以不需要修改other
目录的rwx权限
目录也是一个文件,所以目录也必然满足文件 = 内容 + 属性,对于目录而言,目录的内容就是目录中文件的详细信息,目录的属性就是我们ll指令查看目录显示的内容,目录没有读取内容信息的r权限在进入目录后自然就看不了目录中文件的详细信息,目录没有执行的x权限自然就进入不了目录,目录没有写内容的w权限在进入目录后自然在就无法对文件进行操作:
1、进入目录需要x权限:
2、查看目录内的文件信息需要r权限:
3、对目录内文件的新建、修改、删除文件需要w权限:
补充知识
创建普通文件的默认起始权限为0666,即-rw-rw-rw-;创建目录文件的默认起始权限为0777,即drwxrwxrwx,可实际上的结果却是0664的-rw-rw-r--和0775的drwxrwxr-x,这是因为Linux会在创建文件时从默认权限中过滤掉出现在umask中的权限:
umask指令
语法:umask 权限值
功能:查看或修改文件掩码
注意事项:
1、直接使用umask可以查看当前系统下的文件掩码,不同环境下文件掩码的值不同:
2、(博主的)超级用户和普通用户的默认文件掩码值分别为:0022和0002:
3、最终权限 = 起始权限 & (~umask):
~over~