如何在 Linux 中检查文件是否具有特定权限

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 Linux 中检查文件权限。理解文件权限是管理文件访问和安全的基础。你将探索不同的权限检查方法,首先是使用基本的 ls -l 命令来查看文件所有者、所属组和其他用户的标准读、写和执行权限。

在掌握基础知识的基础上,你将深入学习使用 stat --format 命令,以更详细、可定制的方式查看文件信息,包括各种格式的权限信息。最后,你将学习如何使用 getfacl 命令验证访问控制列表 (ACL),该命令提供了一种比标准的所有者、所属组和其他用户权限更精细的文件权限管理方式。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/pwd("Directory Displaying") subgraph Lab Skills linux/ls -.-> lab-558710{{"如何在 Linux 中检查文件是否具有特定权限"}} linux/touch -.-> lab-558710{{"如何在 Linux 中检查文件是否具有特定权限"}} linux/chmod -.-> lab-558710{{"如何在 Linux 中检查文件是否具有特定权限"}} linux/pwd -.-> lab-558710{{"如何在 Linux 中检查文件是否具有特定权限"}} end

使用 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) 代表所有者的权限。二进制中,6110。这对应于读取 (1)、写入 (1) 和执行 (0)。所以是读取和写入权限。
  • 第三个数字 (6) 代表所属组的权限。同样,二进制中是 110,意味着读取和写入权限。
  • 第四个数字 (4) 代表其他用户的权限。二进制中,4100。这对应于读取 (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:permissionsgroup: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),这些列表提供了超越标准的所有者、所属组和其他用户的更精细的权限控制。