2023年12月5日发(作者:)

Linux文件权限与归属,命令详解

写在开头:本人还是在校生,第一次发,算是笔记整理+个人理解(使用有道云笔记),如内容有不对之处欢迎指出,请轻喷,求大佬放过

(大佬应该也不会来看 [dog] )

部分内容图片来自网络

Linux文件详解

目录

(英文全拼:list files): 列出目录及文件名

格式:ls 路径

路径下的目录及文件名

1.

-a 全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)

2.

-l 长数据串列出,包含文件的属性与权限等等数据;(常用)

1.

简写:ll(常用)

3.

-d 仅列出目录本身,而不是列出目录内的文件数据(可在前也可以在结尾)

用于设置文件的一般权限及特殊权限,英文全称为:“change mode”

语法格式为:“chmod [参数] 文件名”

参数

1.

-c : 若该文件权限确实已经更改,才显示其更改动作

2.

-f : 若该文件权限无法被更改也不要显示错误讯息

3.

-v : 显示权限变更的详细资料

4.

-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

后面文件权限和属性会详细讲

权限范围的表示法如下:

r 读取权限,数字代号为“4”;

w 写入权限,数字代号为“2”;

x 执行或切换权限,数字代号为“1”;

- 不具任何权限,数字代号为“0”;

s 特殊功能说明:变更文件或目录的权限。

例子:

使用数字设置文件权限

使用字母设置文件权限 ugo = rwx(还可以使用 +- 来设置权限)

使用字母对各个字段进行单独设置权限

文件所属者和所属组追加写,其它撤销写权限

用于设置文件的所有者和所有组,英文全称为:“change own”

语法格式为:

chown 所有者:所有组 文件名

chown 所有者 文件名

chown :所有组 文件名

参数

1.

-c : 显示更改的部分的信息

2.

-f : 忽略错误信息

3.

-h :修复符号链接

4.

-v : 显示详细的处理信息

5.

-R : 处理指定目录以及其子目录下的所有文件(常用)

例子

修改文件所属者和所属组为tom

单修改所属者为linuxtest2用户

单修改所有组为linuxtest2

显示修改动作 / 递归修改所有的文件及子目录所属者和所属组

也可以使用UID 和 GID(是必须存在的)

此当前目录下所有文件占用磁盘空间的大小

表示该文件的类型:

1.

“-” 表示普通文件

2.

“d” 表示目录

3.

“l” 表示链接文件

4.

“p” 表示管理文件

5.

“b” 表示块设备文件

6.

“c” 表示字符设备文件7.

“s” 表示套接字文件

文件属性/权限涉及内容较多,最后讲

注意:

1.

相对于目录,目录文件会有.目录和..目录所以即便图中test2没有子目录,目录数量却有2,由此可见,要准确得出目录下的子目录数

1.

(在linux下,.目录表示当前目录,..目录表示上一级目录)

2.

相对于普通文件,则指向它的连接文件的个数

判断顺序优先级:所有者>所属组成员>其他用户

注意:

1.

第一个表示创建者或所有者

2.

第二个表示其所在的组

注意:

1.

相对于文件:文件的大小,单位为字节

2.

相对于目录:目录符所占用的大小,并不是该目录下的所有文件大小的总和

注意:该文件或目录的最后一次修改时间

注意:可以自行自定义

1.

灰白色表示普通文件

2.

亮绿色表示可执行文件

3.

亮红色表示压缩文件

4.

灰蓝色表示目录

5.

亮蓝色表示链接文件

6.

亮黄色表示设备文件

另外

如图文件后面还带了一个星号(*),这也是linux系统下用于标记可执行文件的另外一种方式。

也就是说,凡是文件名后面带了一个星号(*)的,都是在说明这是一个可执行文件。

在Linux系统中,每个文件都有归属的所有者和所有组,并且规定了文件的所有者、所有组以及其他人对文件所拥有的读(r)、写(w)、

执行(x)等权限。

权限对于文件类型:

(1)对于一般文件来说,权限比较容易理解:

1.

“可读”表示能够读取文件的实际内容;

2.

“可写”表示能够编辑、新增、修改、删除文件的实际内容;

3.

“可执行”则表示能够运行一个程序。

(2)对目录文件来说,

1.

“可读”表示能够读取目录内的文件列表;

2.

“可写”表示能够在目录内新增、删除、重命名文件;

3.

“可执行”则表示能够进入该目录。

例子如图

文件的读、写、执行权限英文全称分别是read、write、execute,

可以简写为r、w、x,亦可分别用数字4、2、1来表示,

文件所有者,所属组及其他用户权限之间无关联,如表5-6所示。

例子:

1.

若某个文件的权限为7则代表可读、可写、可执行(4+2+1);若权限为6则代表可读、可写(4+2)

2.

假如:其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;而且其他人只有可读的权限

1.

这个文件的权限就是rwxrw-r--,数字法表示即为764

三者之间没有互通关系

减号是占位符,代表这里没有权限,数字法用0表示

SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效,

列如执行命令的配置文件)

注:这只是一种有条件,临时的特殊权限授权方式

例子

1.

查看passwd命令属性时发现所有者的权限由rwx变成了rws,其中x改变成s就意味着该文件被赋予了SUID权限。

注意:如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。

1.

执行者临时获取到文件所有组的权限(对拥有执行权限的二进制程序进行设置)

1.

第一种功能是参考SUID而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的

权限

2.

而对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称

注意:如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。

例子

(1)第一个功能

除了root管理员或属于system组成员外,所有用户都没有读取该文件的权限。由于在平时我们需要查看系统的进程状态,为了能够获取到

进程的状态信息,可在用于查看系统进程状态的ps命令文件上增加SGID特殊权限位。查看ps命令文件的属性信息:

-r-xr-sr-x 1 bin system 59346 Feb 11 2017 ps

这样一来,由于ps命令被增加了SGID特殊权限位,所以当用户执行该命令时,也就临时获取到了system用户组的权限,从而顺利地读取到

了设备文件

(2)第二个功能

即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)

现在需要在一个部门内设置共享目录,让部门内的所有人员都能够读取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置

SGID特殊权限位。这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组

SBIT(Sticky Bit)特殊权限位了(也可以称之为特殊权限位之粘滞位)

SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位权限后,那么

该目录中的文件就只能被其所有者执行删除操作了。

注意:

RHEL 8系统中的/tmp作为一个共享文件的目录,默认已经设置了SBIT特殊权限位,因此除非是该目录的所有者,否则无法删除这里面的

文件。即便tmp目录下的我文件权限为777,由于SBIT特殊权限位的缘故,依然无法删除该文件

文件的其他人权限部分的x执行权限就会被替换成 t 或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T

使用chmod命令进行操作(上文有)

特殊权限用数字的表示方法

SUID = 4SGID = 2

SBIT = 1

特殊权限用字母的表示方法

Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉

既然叫隐藏权限了,那肯定不能用常规的ls命令就让我们看到它的真面目,专用的设置命令是chattr,专用的查看命令是lsattr。

用于查看文件的隐藏权限,英文全称为:“list attributes”

语法格式为:“lsattr [参数] 文件名称”

用于设置文件的隐藏权限,英文全称为:“change attributes”

语法格式为:“chattr [参数] 文件名称”。

如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。

例子

对test1文件设置不允许删除与覆盖(+a参数)权限

文件访问控制列表(ACL)

ACL主要是对用户/用户组进行单独文件权限设置

前文讲解的一般权限、特殊权限、隐藏权限其实有一个共性——权限是针对某一类用户设置的,能够对很多人同时生效,对某个指定的用户

进行单独的权限控制,就需要用到文件的访问控制列表(FACL,File Access Control Lists)

如果针对某个目录设置了ACL,则目录中的文件会继承其权限;若针对文件设置了ACL,则文件不再继承其所在目录的权限

想要设置ACL,用的是setfacl命令;要想查看ACL,则用的是getfacl命令

setfacl

用于管理文件的ACL权限规则,英文全称为:“set files ACL”

语法格式为:“ setfacl [参数] [u/g:用户:权限] 目录/文件名称”。

u/g = user / group

针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数

选项-m和-x后边跟以acl规则。多条acl规则以逗号(,)隔开。选项-M和-X用来从文件或标准输入读取acl规则

修改后的目录通过 ll 命令 查看

常用的ls命令是看不到ACL表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),这就意味着该文件已经设置了ACL了

getfacl

用于查看文件的ACL权限规则,英文全称为:“get files ACL”

语法格式为:“ getfacl [参数] 文件名称”

权限掩码

简介

umask

查看和设置权限掩码

格式:umask 权限(可选)

注意:是对用户之后创建的文件默认权限进行设置

查看当前用户的权限掩码

说明:该命令的设置,是一种临时设置,重启系统后,便会失效。系统启动时,系统会读取 etc/profile,etc/bashrc中关于权限掩码的设置。因

此,若要设置系统默认使用的权限掩码,需要修改上述文件(两个文件适用情境有所不同,这里不进行讲解)。隐藏文件

文件名字:一般以为.开头,如.

可以使用mv命令改名,将其变为隐藏文件

文件状态

用stat命令查看

在Linux系统中文件包含三种时间状态,分别是

Access Time(最后一次内容被访问的时间,简称Atime)

Modify Time(最后一次内容被修改的时间,简称Mtime)

Change Time(文件属性最后一次被修改的时间,简称Ctime)。