介绍
在这个实验中,你将学习如何在 Linux 中检查文件权限。理解文件权限是管理文件访问和安全的基础。你将探索不同的权限检查方法,首先是使用基本的 ls -l 命令来查看文件所有者、所属组和其他用户的标准读、写和执行权限。
在掌握基础知识的基础上,你将深入学习使用 stat --format 命令,以更详细、可定制的方式查看文件信息,包括各种格式的权限信息。最后,你将学习如何使用 getfacl 命令验证访问控制列表 (ACL),该命令提供了一种比标准的所有者、所属组和其他用户权限更精细的文件权限管理方式。
使用 ls -l 检查文件权限
在这一步中,你将学习如何使用 ls -l 命令在 Linux 中检查文件权限。理解文件权限对于安全地管理文件和目录至关重要。
文件权限决定了谁可以读取、写入或执行文件或目录。在 Linux 中,权限被分配给三个类别:
- 所有者:拥有该文件或目录的用户。
- 所属组:具有特定权限的一组用户。
- 其他用户:系统上的所有其他用户。
让我们创建一个简单的文件来检查其权限。确保你位于 ~/project 目录中。你可以使用 pwd 命令确认当前目录:
pwd
你应该会看到如下输出:
/home/labex/project
现在,使用 touch 命令创建一个名为 my_file.txt 的文件:
touch my_file.txt
touch 命令会在文件不存在时创建一个空文件。
接下来,使用 ls -l 命令查看文件的详细信息,包括其权限:
ls -l my_file.txt
你会看到类似如下的输出:
-rw-rw-r-- 1 labex labex 0 Feb 13 10:00 my_file.txt
让我们来分析输出的第一部分:-rw-rw-r--。这个字符串表示文件类型和权限。
- 第一个字符 (
-) 表示文件类型。-表示这是一个普通文件。其他常见类型包括d表示目录,l表示符号链接。 - 接下来的九个字符分为三组,每组三个:
- 第一组 (
rw-) 显示 所有者 的权限。 - 第二组 (
rw-) 显示 所属组 的权限。 - 第三组 (
r--) 显示 其他用户 的权限。
- 第一组 (
在每组三个字符中:
r表示读取权限。w表示写入权限。x表示执行权限。-表示未授予该权限。
在示例输出 -rw-rw-r-- 中:
- 所有者 (
labex) 具有读取 (r) 和写入 (w) 权限,但没有执行 (-) 权限。 - 所属组 (
labex) 具有读取 (r) 和写入 (w) 权限,但没有执行 (-) 权限。 - 其他用户只有读取 (
r) 权限,没有写入 (-) 或执行 (-) 权限。
权限后面的数字和名称 (1 labex labex 0 Feb 13 10:00) 表示:
1:文件的硬链接数量。labex:文件的所有者。labex:文件所属的组。0:文件的大小(以字节为单位)。Feb 13 10:00:文件的最后修改日期和时间。my_file.txt:文件名。
理解 ls -l 的输出是在 Linux 中处理文件和目录的基础。
点击 继续 进入下一步。
使用 stat --format 检查权限
在上一步中,你使用 ls -l 查看了文件权限。另一个用于获取文件和文件系统详细信息的强大命令是 stat。在这一步中,你将使用带有 --format 选项的 stat 命令,以更结构化的方式专门检查文件权限。
stat 命令可以显示文件的各种信息,例如大小、块数、访问时间、修改时间和权限。--format 选项允许你使用格式序列精确指定你想要查看的信息。
让我们使用 stat 来查看你在上一步中创建的 my_file.txt 文件的权限。确保你仍然位于 ~/project 目录中。
输入以下命令并按回车键:
stat --format=%A my_file.txt
你应该会看到类似如下的输出:
-rw-rw-r--
这个输出与你使用 ls -l 看到的权限字符串相同。%A 格式序列告诉 stat 以人类可读的格式显示文件的权限,就像 ls -l 一样。
让我们尝试另一个格式序列。%a 序列以八进制表示法显示权限。八进制表示法是权限的一种数字表示方式,其中每个数字分别代表所有者、所属组和其他用户的权限。
输入以下命令并按回车键:
stat --format=%a my_file.txt
你应该会看到类似如下的输出:
0664
让我们来分析八进制权限 0664:
- 第一个数字 (
0) 在基本权限中通常被忽略。 - 第二个数字 (
6) 代表所有者的权限。二进制中,6是110。这对应于读取 (1)、写入 (1) 和执行 (0)。所以是读取和写入权限。 - 第三个数字 (
6) 代表所属组的权限。同样,二进制中是110,意味着读取和写入权限。 - 第四个数字 (
4) 代表其他用户的权限。二进制中,4是100。这对应于读取 (1)、写入 (0) 和执行 (0)。所以只有读取权限。
这与 ls -l 的 -rw-rw-r-- 输出相匹配。八进制表示法在使用 chmod 命令更改权限时经常被使用,你可能会在未来的实验中学习到相关内容。
使用 stat --format 可以让你提取文件的特定信息,这在脚本编写或详细分析中非常有用。
点击 继续 进入下一步。
使用 getfacl 验证访问控制列表
除了标准的 Linux 权限(所有者、所属组、其他用户)之外,一些文件系统还支持访问控制列表(Access Control Lists,ACLs)。ACLs 提供了一种更精细的方式,用于为特定用户或组定义权限,超越了基本的三个类别。
getfacl 命令用于显示文件和目录的 ACLs。在这一步中,你将使用 getfacl 检查 my_file.txt 文件是否设置了任何 ACLs。
首先,确保你位于 ~/project 目录中:
pwd
你应该会看到 /home/labex/project。
现在,对 my_file.txt 运行 getfacl 命令:
getfacl my_file.txt
你应该会看到类似如下的输出:
## file: my_file.txt
## owner: labex
## group: labex
user::rw-
group::rw-
other::r--
让我们来分析一下输出:
## file: my_file.txt:表示正在检查的文件。## owner: labex:显示文件的所有者。## group: labex:显示文件的主要所属组。user::rw-:这一行显示文件所有者的权限。user::指的是文件所有者用户,rw-表示读取和写入权限。这与使用ls -l看到的所有者权限相对应。group::rw-:这一行显示所属组的权限。group::指的是所属组,rw-表示读取和写入权限。这与使用ls -l看到的所属组权限相对应。other::r--:这一行显示其他用户的权限。other::指的是所有其他用户,r--表示读取权限。这与使用ls -l看到的其他用户权限相对应。
在这种情况下,getfacl 的输出仅仅反映了标准的 Linux 权限。如果为其他用户或组设置了特定的 ACLs,它们将作为额外的行出现在输出中,例如 user:username:permissions 或 group:groupname:permissions。
例如,如果设置了一个 ACL 来给予一个名为 testuser 的用户只读访问权限,输出可能会包含类似 user:testuser:r-- 的一行。
由于 my_file.txt 上没有设置特定的 ACLs,getfacl 显示的是从标准权限位派生的默认权限。
当你需要了解应用于文件或目录的完整权限集时,尤其是在使用 ACLs 的环境中,使用 getfacl 至关重要。
点击 继续 完成本次实验。
总结
在本次实验中,你学习了如何使用 ls -l 命令在 Linux 中检查文件权限。你创建了一个示例文件,并解读了 ls -l 的输出,了解了文件类型以及所有者、所属组和其他用户的读取、写入和执行权限。
你还探索了检查文件权限的其他方法。你使用 stat --format 命令以更结构化的格式获取特定的权限详细信息,以及使用 getfacl 命令检查访问控制列表(Access Control Lists,ACLs),这些列表提供了超越标准的所有者、所属组和其他用户的更精细的权限控制。



