写在开头:本人还是在校生,第一次发,算是笔记整理+个人理解(使用有道云笔记),如内容有不对之处欢迎指出,请轻喷,求大佬放过(大佬应该也不会来看 [dog] )
部分内容图片来自网络
Linux文件详解
目录
命令详解
ls
-a 全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-l 长数据串列出,包含文件的属性与权限等等数据;(常用)
-d 仅列出目录本身,而不是列出目录内的文件数据(可在前也可以在结尾)
chmod
用于设置文件的一般权限及特殊权限,英文全称为:“change mode”
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
后面文件权限和属性会详细讲
使用字母设置文件权限 ugo = rwx(还可以使用 +- 来设置权限)
chown
用于设置文件的所有者和所有组,英文全称为:“change own”
文件目录详解
(1)文件类型
(2)目录/连接的个数
(3)所有者 / 所属组
判断顺序优先级:所有者>所属组成员>其他用户
注意:
(4)文件大小 / 修改日期
(5)文件名称 / 字体颜色
如图文件后面还带了一个星号(*),这也是linux系统下用于标记可执行文件的另外一种方式。
也就是说,凡是文件名后面带了一个星号(*)的,都是在说明这是一个可执行文件。
(6)文件属性/权限
在Linux系统中,每个文件都有归属的所有者和所有组,并且规定了文件的所有者、所有组以及其他人对文件所拥有的读(r)、写(w)、执行(x)等权限。
“可读”表示能够读取文件的实际内容;
“可写”表示能够编辑、新增、修改、删除文件的实际内容;
“可执行”则表示能够运行一个脚本程序。
文件的读、写、执行权限英文全称分别是read、write、execute,
文件所有者,所属组及其他用户权限之间无关联,如表5-6所示。
若某个文件的权限为7则代表可读、可写、可执行(4+2+1);若权限为6则代表可读、可写(4+2)
假如:其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;而且其他人只有可读的权限
文件特殊权限
(1)SUID(所有者)
SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效,列如执行命令的配置文件)
注意:如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。
(2)SGID(所有组)
注意:如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。
除了root管理员或属于system组成员外,所有用户都没有读取该文件的权限。由于在平时我们需要查看系统的进程状态,为了能够获取到进程的状态信息,可在用于查看系统进程状态的ps命令文件上增加SGID特殊权限位。查看ps命令文件的属性信息:
-r-xr-sr-x 1 bin system 59346 Feb 11 2017 ps
这样一来,由于ps命令被增加了SGID特殊权限位,所以当用户执行该命令时,也就临时获取到了system用户组的权限,从而顺利地读取到了设备文件
即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
现在需要在一个部门内设置共享目录,让部门内的所有人员都能够读取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置SGID特殊权限位。这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组
(3)SBIT(其他人)
SBIT(Sticky Bit)特殊权限位了(也可以称之为特殊权限位之粘滞位)
SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
RHEL 8系统中的/tmp作为一个共享文件的目录,默认已经设置了SBIT特殊权限位,因此除非是该目录的所有者,否则无法删除这里面的文件。即便tmp目录下的我文件权限为777,由于SBIT特殊权限位的缘故,依然无法删除该文件
文件的其他人权限部分的x执行权限就会被替换成 t 或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T
特殊权限操作和表示
文件的隐藏属性
Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉
既然叫隐藏权限了,那肯定不能用常规的ls命令就让我们看到它的真面目,专用的设置命令是chattr,专用的查看命令是lsattr。
lsattr
用于查看文件的隐藏权限,英文全称为:“list attributes”
chattr
用于设置文件的隐藏权限,英文全称为:“change attributes”
如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。
文件访问控制列表(ACL)
前文讲解的一般权限、特殊权限、隐藏权限其实有一个共性——权限是针对某一类用户设置的,能够对很多人同时生效,对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(FACL,File Access Control Lists)
如果针对某个目录设置了ACL,则目录中的文件会继承其权限;若针对文件设置了ACL,则文件不再继承其所在目录的权限
想要设置ACL,用的是setfacl命令;要想查看ACL,则用的是getfacl命令
setfacl
用于管理文件的ACL权限规则,英文全称为:“set files ACL”
语法格式为:“ setfacl [参数] [u/g:用户:权限] 目录/文件名称”。
针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数
选项-m和-x后边跟以acl规则。多条acl规则以逗号(,)隔开。选项-M和-X用来从文件或标准输入读取acl规则
常用的ls命令是看不到ACL表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),这就意味着该文件已经设置了ACL了
getfacl
用于查看文件的ACL权限规则,英文全称为:“get files ACL”
权限掩码
简介
umask
说明:该命令的设置,是一种临时设置,重启系统后,便会失效。系统启动时,系统会读取 etc/profile,etc/bashrc中关于权限掩码的设置。因此,若要设置系统默认使用的权限掩码,需要修改上述文件(两个文件适用情境有所不同,这里不进行讲解)。
隐藏文件
文件名字:一般以为.开头,如.test.txt
可以使用mv命令改名,将其变为隐藏文件
文件状态
用stat命令查看
在Linux系统中文件包含三种时间状态,分别是
Access Time(最后一次内容被访问的时间,简称Atime)
Modify Time(最后一次内容被修改的时间,简称Mtime)
Change Time(文件属性最后一次被修改的时间,简称Ctime)。