如何在 Linux 中检查文件是否可写

LinuxLinuxBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用多种方法检查 Linux 系统中文件是否可写。首先,我们将使用 test -w 命令快速判断文件的可写性,并了解它在 shell 脚本中的用法。

接下来,你将使用 ls -l 命令详细验证文件权限,通过解读输出内容来了解文件的所有者、所属组和其他权限。最后,你将使用 stat 命令更全面地检查文件的访问信息。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") subgraph Lab Skills linux/echo -.-> lab-558714{{"如何在 Linux 中检查文件是否可写"}} linux/test -.-> lab-558714{{"如何在 Linux 中检查文件是否可写"}} linux/ls -.-> lab-558714{{"如何在 Linux 中检查文件是否可写"}} linux/touch -.-> lab-558714{{"如何在 Linux 中检查文件是否可写"}} linux/cd -.-> lab-558714{{"如何在 Linux 中检查文件是否可写"}} end

使用 test -w 测试可写性

在这一步中,你将学习如何使用带有 -w 选项的 test 命令来检查你是否有权限写入文件或目录。了解文件权限在 Linux 中至关重要,因为它决定了谁可以读取、写入和执行文件。

test 命令是一个内置的 shell 命令,用于检查条件并返回退出状态码 0(真)或 1(假)。-w 选项专门用于检查当前用户是否可以写入文件或目录。

让我们在你的 ~/project 目录中创建一个简单的文件。我们将使用 touch 命令,如果文件不存在,该命令会创建一个空文件。

如果你还没有在项目目录中,请导航到该目录:

cd ~/project

现在,创建一个名为 my_test_file.txt 的文件:

touch my_test_file.txt

你可以使用 ls 命令验证文件是否已创建:

ls

你应该会在输出中看到 my_test_file.txt

现在,让我们使用 test -w 命令来检查你是否可以写入这个文件。我们将它与 echo 命令结合使用以查看结果。

test -w my_test_file.txt && echo "Writable" || echo "Not writable"

让我们来分解这个命令:

  • test -w my_test_file.txt:这会检查 my_test_file.txt 是否可写。
  • && echo "Writable":如果 test 命令返回真(退出状态码为 0),&& 运算符会执行下一个命令,即打印 "Writable"。
  • || echo "Not writable":如果 test 命令返回假(退出状态码为 1),|| 运算符会执行下一个命令,即打印 "Not writable"。

由于你是以 labex 用户的身份在你的主目录中创建的文件,你应该具有写入权限,输出应该是:

Writable

test -w 命令通常用于 shell 脚本中,在尝试写入文件之前检查权限,以防止潜在的错误。

点击 继续 进入下一步。

使用 ls -l 验证权限

在这一步中,你将使用 ls -l 命令查看文件和目录的详细信息,包括它们的权限。这个命令对于了解在 Linux 系统中谁可以访问哪些资源至关重要。

ls 命令用于列出文件和目录。-l 选项提供“长列表”格式,其中包括权限、所有者、大小和修改时间。

确保你位于 ~/project 目录中:

cd ~/project

现在,运行 ls -l 命令以查看该目录中文件的详细信息。你应该能看到在上一步中创建的 my_test_file.txt 文件。

ls -l

输出结果大致如下:

-rw-rw-r-- 1 labex labex    0 Month Day HH:MM my_test_file.txt

让我们来分解输出的第一部分,它代表了文件的权限:

-rw-rw-r--

这一串十个字符的字符串告诉你文件的类型以及不同用户对该文件的权限。

  1. 第一个字符(在本例中为 -)表示文件类型。
    • -:普通文件
    • d:目录
    • l:符号链接
    • 以及其他类型...
  2. 接下来的九个字符分为三组,每组三个:
    • 第一组 (rw-):文件 所有者 的权限。
    • 第二组 (rw-):文件所属 的权限。
    • 第三组 (r--):其他用户(系统中的其他所有人)的权限。

在每组三个字符中:

  • r:读取权限(允许查看文件内容或列出目录内容)。
  • w:写入权限(允许修改文件或在目录中创建/删除文件)。
  • x:执行权限(允许将文件作为程序运行或进入目录)。
  • -:表示未授予该权限。

因此,对于权限为 -rw-rw-r--my_test_file.txt 文件:

  • 所有者 (labex) 具有读取 (r) 和写入 (w) 权限。
  • 所属组 (labex) 具有读取 (r) 和写入 (w) 权限。
  • 其他用户只有读取 (r) 权限。

这个输出解释了为什么上一步中的 test -w 命令对于 labex 用户返回“Writable” —— 因为所有者 (labex) 具有写入权限 (w)。

理解 ls -l 命令的输出是在 Linux 中管理文件和权限的基础。

点击 继续 进入下一步。

使用 stat 检查文件访问信息

在这一步中,你将使用 stat 命令来获取关于文件或文件系统的详细信息。虽然 ls -l 能让你快速了解文件概况,但 stat 能提供更全面的文件元数据信息,包括访问时间、修改时间和更改时间。

确保你位于 ~/project 目录中:

cd ~/project

现在,让我们对之前创建的 my_test_file.txt 文件使用 stat 命令:

stat my_test_file.txt

输出会非常详细,可能如下所示:

  File: my_test_file.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: ---h/---d       Inode: ---         Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Modify: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Change: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
 Birth: -

让我们来看看 stat 提供的一些关键信息:

  • File:文件的名称。
  • Size:文件的大小(以字节为单位)。
  • Access: (0664/-rw-rw-r--):这一行同时以八进制(0664)和符号(-rw-rw-r--)格式显示了文件的权限,这与我们使用 ls -l 看到的权限一致。
  • Uid: ( 5000/ labex):文件所有者的用户 ID(UID)和用户名。
  • Gid: ( 5000/ labex):文件所属组的组 ID(GID)和组名。
  • Access:文件最后一次被访问(读取)的时间。
  • Modify:文件内容最后一次被修改的时间。
  • Change:文件元数据(如权限、所有者等)最后一次被更改的时间。
  • Birth:文件的创建时间(并非所有文件系统都支持显示该信息)。

ls -l 相比,stat 命令能更深入地了解文件的属性。当你需要精确的时间戳或不同格式的文件所有者和权限详细信息时,它特别有用。

你还可以使用带选项的 stat 命令来获取特定信息。例如,要仅查看八进制格式的访问权限:

stat -c "%a" my_test_file.txt

这个命令使用 -c 选项来指定自定义格式。"%a" 是八进制访问权限的格式说明符。输出应该是:

664

这与完整 stat 输出中显示的八进制权限 0664 相匹配(前导零通常会省略)。

点击 继续 完成本次实验。

总结

在本次实验中,你学习了如何使用 test -w 命令来检查 Linux 系统中的文件是否可写。这个命令是判断文件写入权限的简单有效方法,常用于 shell 脚本中以避免错误。你练习了创建文件,然后结合使用 test -w 命令与 &&|| 运算符来显示文件是否可写。

你还探索了如何使用 ls -l 命令验证文件权限,该命令以人类可读的格式提供有关文件所有者、所属组和权限的详细信息。最后,你学习了如何使用 stat 命令检查文件访问详情,该命令能提供更全面的文件状态信息,包括访问时间、修改时间和更改时间戳。