简介
在这个实验中,你将学习如何使用各种命令行工具来检查 Linux 系统中的文件是否可读。首先,你会使用基础的 test -r
命令以编程方式检查文件的读取权限,并了解它在条件表达式中的用法。
接下来,你将探索 ls -l
命令,通过它直观地查看文件权限,深入理解权限字符串及其含义。最后,你会深入学习 stat
命令,以获取文件的详细信息,包括其访问权限和其他元数据。通过完成这些步骤,你将掌握在 Linux 环境中判断文件可读性的实用技能。
在这个实验中,你将学习如何使用各种命令行工具来检查 Linux 系统中的文件是否可读。首先,你会使用基础的 test -r
命令以编程方式检查文件的读取权限,并了解它在条件表达式中的用法。
接下来,你将探索 ls -l
命令,通过它直观地查看文件权限,深入理解权限字符串及其含义。最后,你会深入学习 stat
命令,以获取文件的详细信息,包括其访问权限和其他元数据。通过完成这些步骤,你将掌握在 Linux 环境中判断文件可读性的实用技能。
在这一步中,你将学习如何使用带有 -r
选项的 test
命令来检查你是否拥有读取文件的权限。
test
命令是一个内置的 shell 命令,用于计算条件表达式。它常用于 shell 脚本中以进行决策。-r
选项专门用于检查文件是否存在,以及当前用户是否可以读取该文件。
让我们创建一个简单的文件来进行测试。我们将使用 echo
命令,把一些文本放入你 ~/project
目录下名为 my_file.txt
的文件中。
输入以下命令并按回车键:
echo "This is a test file." > ~/project/my_file.txt
此命令会创建文件 ~/project/my_file.txt
,并将字符串 "This is a test file." 写入其中。>
符号将 echo
命令的输出重定向到指定的文件。
现在,让我们使用 test -r
来检查你是否可以读取这个文件。如果条件为真,test
命令本身不会产生输出。我们通常会将它与 echo
等其他命令结合使用,以查看结果。
输入以下命令并按回车键:
test -r ~/project/my_file.txt && echo "File is readable."
&&
运算符表示“仅当左边的命令执行成功(返回退出状态码为零)时,才执行右边的命令”。如果 test -r ~/project/my_file.txt
为真(即文件可读),echo
命令将被执行。
你应该会看到如下输出:
File is readable.
现在,让我们尝试检查一个不存在的文件。
输入以下命令并按回车键:
test -r ~/project/non_existent_file.txt && echo "This won't be printed."
由于 ~/project/non_existent_file.txt
不存在,test -r
将返回非零退出状态码(表示失败),echo
命令将不会被执行。你应该看不到此命令的任何输出。
test
命令是 Linux 脚本编写的基础工具。理解如何使用其各种选项(如 -r
)对于编写健壮的脚本至关重要,这些脚本可以在尝试执行操作之前检查文件的权限和是否存在。
点击 继续 进入下一步。
在上一步中,你使用 test -r
检查了文件是否可读。现在,让我们使用带有 -l
选项的 ls
命令来查看文件的详细权限。
ls
命令用于列出目录内容。-l
选项提供“长列表”格式,其中包含文件类型、权限、硬链接数量、所有者、所属组、大小、修改时间和文件名等信息。
让我们查看上一步中创建的 my_file.txt
文件的权限。确保你位于 ~/project
目录中。你可以使用 pwd
命令确认当前所在目录:
pwd
你应该会看到 /home/labex/project
。
现在,输入以下命令并按回车键:
ls -l my_file.txt
你会看到类似如下的输出:
-rw-rw-r-- 1 labex labex XX Month XX XX:XX my_file.txt
让我们来分析一下输出的第一部分,它代表了文件类型和权限:
-rw-rw-r--
这十个字符的字符串包含了很多关于文件权限的信息。
第一个字符表示文件类型:
-
表示这是一个普通文件。d
表示这是一个目录。l
表示这是一个符号链接。接下来的九个字符分为三组,每组三个:
rw-
) 显示文件 所有者 的权限。rw-
) 显示文件所属 组 的权限。r--
) 显示 其他用户(其他所有人)的权限。在每组三个字符中:
r
)。如果是连字符 (-
),则表示没有读取权限。w
)。如果是连字符 (-
),则表示没有写入权限。x
)。如果是连字符 (-
),则表示没有执行权限。因此,对于权限为 -rw-rw-r--
的 my_file.txt
文件:
labex
) 有读取 (r
) 和写入 (w
) 权限,但没有执行 (-
) 权限。labex
) 有读取 (r
) 和写入 (w
) 权限,但没有执行 (-
) 权限。r
) 权限,但没有写入 (-
) 或执行 (-
) 权限。这个输出证实了所有者 (labex
) 有读取权限,这就是上一步中 test -r
命令能正常工作的原因。
理解 ls -l
的输出是在 Linux 中管理文件和目录以及控制访问权限的基础。
点击 继续 进入下一步。
在这一步中,你将使用 stat
命令来获取文件的详细信息,包括文件的访问时间、修改时间、更改时间,以及以符号和数字格式表示的权限。
虽然 ls -l
能让你大致了解文件的权限,但 stat
能更深入地查看文件的元数据。
让我们对之前在 ~/project
目录下创建的 my_file.txt
文件使用 stat
命令。
输入以下命令并按回车键:
stat ~/project/my_file.txt
你会看到类似如下的输出:
File: /home/labex/project/my_file.txt
Size: XX Blocks: X IO Block: XXXX regular file
Device: XXh/XXd Inode: XXXXXXXX Links: X
Access: (0664/-rw-rw-r--) Uid: ( XXXX/ labex) Gid: ( XXXX/ labex)
Access: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Modify: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Change: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Birth: -
让我们来看看输出中的一些关键行:
File
:文件的名称。Size
:文件的大小,以字节为单位。Access: (0664/-rw-rw-r--)
:这一行以两种格式显示了文件的权限:
0664
:这是权限的数字(八进制)表示形式。每个数字分别代表所有者、所属组和其他用户的权限。
6
:rwx
(读 = 4,写 = 2,执行 = 0)-> 4 + 2 + 0 = 66
:rwx
(读 = 4,写 = 2,执行 = 0)-> 4 + 2 + 0 = 64
:rwx
(读 = 4,写 = 0,执行 = 0)-> 4 + 0 + 0 = 40
通常用于表示八进制表示法。-rw-rw-r--
:这是权限的符号表示形式,你在使用 ls -l
时已经了解过。Uid
和 Gid
:文件所有者和所属组的用户 ID 和组 ID,以及它们的名称。Access
、Modify
、Change
:这些行显示了文件的时间戳:
Access
:文件最后一次被访问(读取)的时间。Modify
:文件内容最后一次被修改的时间。Change
:文件元数据(如权限、所有者、所属组)最后一次被更改的时间。当你需要文件属性的详细信息时,尤其是在编写脚本或排查权限问题时,stat
命令非常有用。
你现在已经学习了三种不同的方法来检查 Linux 中的文件权限和访问信息:test -r
、ls -l
和 stat
。这些都是在命令行中处理文件的重要工具。
点击 继续 完成本次实验。
在本次实验中,你学习了如何在 Linux 中使用带有 -r
选项的 test
命令来检查文件是否可读。你练习了创建文件,然后结合使用 test -r
和 &&
运算符,根据文件的可读性有条件地打印消息。你还观察到,对于不存在的文件,test -r
会返回 false,从而阻止后续命令执行。这一步展示了在 shell 脚本中以编程方式检查文件权限的基本方法。