介绍
在这个实验中,你将学习如何使用多种方法来判断 Linux 系统中的文件是否可执行。首先,你会使用带有 CODE0 选项的 CODE1 命令来检查文件的可执行权限,并了解如何解读其退出状态。
接下来,你将探索如何使用 CODE0 命令查看文件的详细权限信息,并识别可执行标志。最后,你将学习如何使用 CODE1 命令检查文件的访问信息,这为确认文件是否可执行提供了另一种方法。
使用 test -x 测试可执行性
在这一步中,你将学习如何使用带有 CODE0 选项的 CODE1 命令来检查文件是否可执行。CODE2 命令是一个 shell 内置命令,用于计算条件表达式。CODE3 选项专门用于检查文件的可执行权限。
首先,让我们在你的 CODE0 目录下创建一个简单的文本文件。我们将使用 CODE1 命令把一些文本写入一个名为 CODE_2 的文件中。
echo "echo 'Hello from the script!'" > ~/project/my_script.sh
现在,让我们检查这个文件是否可执行。默认情况下,当你以这种方式创建一个新文件时,它不会有执行权限。
使用 CODE_0 命令,后面跟上文件的路径:
test -x ~/project/my_script.sh
运行此命令后,如果测试成功(即文件不可执行),你将看不到任何输出。如果文件是可执行的,CODE_0 会返回状态码 0,在 shell 脚本中,这通常被解释为“真”或“成功”,但默认情况下它不会在终端上打印任何内容。
为了查看 CODE0 命令的结果,我们可以使用 CODE1 来检查上一个命令的退出状态。退出状态为 CODE2 表示测试为真(文件可执行),非零状态(通常为 CODE3)表示测试为假(文件不可执行)。
echo $?
你应该会看到输出为 CODE0,这表明 CODE1 当前不可执行。
现在,让我们使用 CODE0 命令使文件可执行。CODE1 用于更改文件和目录的权限。我们将使用 CODE_2 为文件的所有者添加执行权限。
chmod +x ~/project/my_script.sh
现在,让我们再次测试文件的可执行性:
test -x ~/project/my_script.sh
然后检查退出状态:
echo $?
这次,输出应该是 CODE_0,这证实了文件现在是可执行的。
最后,让我们尝试运行这个脚本以查看输出:
~/project/my_script.sh
你应该会看到:
Hello from the script!
这证实了你已成功使文件可执行并运行了它。
使用 ls -l 检查权限
在这一步中,你将学习如何使用 CODE_0 命令查看文件的详细权限。该命令提供长列表格式,显示文件和目录的各种属性,包括权限、所有者、大小和修改时间。
如果你还不在 CODE0 目录,请导航到该目录。你可以使用 CODE1 命令:
cd ~/project
现在,使用 CODE_0 命令列出该目录中的文件:
ls -l
你应该会看到类似以下的输出(日期和时间等具体细节会有所不同):
-rwxr-xr-x 1 labex labex 30
让我们来分析输出的第一部分,它代表文件的权限:CODE_0。这十个字符的字符串能让你了解谁对该文件有哪些操作权限。
第一个字符表示文件类型:
- CODE0:普通文件(如我们的 CODE1)
- CODE_0:目录
- CODE_0:符号链接
接下来的九个字符分为三组,每组三个,分别代表以下对象的权限:
- 所有者:拥有该文件的用户(在本例中为 CODE_0)。
- 所属组:拥有该文件的组(同样是 CODE_0)。
- 其他用户:系统中的其他所有人。
在每组三个字符中,权限表示如下:
- CODE_0:读取权限(允许查看文件内容)
- CODE_0:写入权限(允许修改或删除文件)
- CODE_0:执行权限(允许将文件作为程序运行)
- CODE_0:表示未授予该权限
因此,对于 CODE_0:
- 所有者(CODE0)拥有 CODE1 权限:读取、写入和执行。
- 所属组(CODE0)拥有 CODE1 权限:读取和执行,但没有写入权限。
- 其他用户拥有 CODE_0 权限:读取和执行,但没有写入权限。
此输出证实了在上一步使用 CODE0 后,所有者(CODE1)现在对 CODE2 拥有执行权限(CODE3)。
你还可以使用 CODE0 检查目录的权限。例如,让我们查看 CODE1 目录本身的权限:
ls -ld ~/project
CODE0 选项告诉 CODE1 列出目录本身,而不是其内容。输出可能如下所示:
drwxr-xr-x 2 labex labex 4096
这里,第一个字符 CODE0 表示这是一个目录。权限 CODE1 意味着:
- 所有者(CODE_0)对该目录拥有读取、写入和执行权限。对于目录,“执行”权限允许你进入该目录并访问其内容。
- 所属组(CODE_0)和其他用户对该目录拥有读取和执行权限,但没有写入权限。
理解 CODE_0 的输出是在 Linux 中处理文件和权限的基础。
使用 stat 检查文件访问权限
在这一步中,你将使用 CODE0 命令来获取文件的详细信息,包括文件的访问时间、修改时间、更改时间,以及以比 CODE1 更结构化的格式显示的文件权限。
CODE_0 命令用于显示文件状态。当你进行脚本编写或需要精确的时间戳时,这个命令特别有用。
让我们对前几步中创建的 CODE0 文件使用 CODE1 命令。确保你位于 CODE_2 目录中,或者提供文件的完整路径。
stat ~/project/my_script.sh
你会看到类似以下的输出:
File: /home/labex/project/my_script.sh
Size: 30 Blocks: 8 IO Block: 4096 regular file
Device: Inode: Links: 1
Access: (/-rwxr-xr-x) Uid: ( 5000/ labex) Gid: ( 5000/ labex)
Access:
让我们来看看输出中的一些关键行:
- CODE_0:文件的名称和路径。
- CODE_0:文件的大小(以字节为单位)。
- CODE0:这一行同时以八进制格式(例如,CODE1 对应于 CODE2)和你在 CODE3 中看到的符号格式显示文件权限。它还显示了文件所有者和所属组的用户 ID(Uid)和组 ID(Gid)。
- CODE_0:文件最后一次被访问(读取)的时间。
- CODE_0:文件内容最后一次被修改的时间。
- CODE_0:文件元数据(如权限、所有者等)最后一次被更改的时间。
- CODE_0:文件的创建时间(并非所有文件系统都支持显示此信息)。
与 CODE0 相比,CODE1 命令能提供更详细的文件信息。当你需要查看时间戳或权限的数字表示时,它特别有用。
你也可以对目录使用 CODE_0 命令:
stat ~/project
输出会类似,但 CODE_0 类型会表明这是一个目录。
在你的 CODE0 目录中,对不同的文件和目录使用 CODE1 命令进行试验,观察输出的差异。
总结
在这次实验过程中,你学会了怎样运用CODE0命令来检测Linux系统里的文件是否具备可执行性。你构建了一个简易的脚本文件,利用CODE1命令并检查其退出状态(CODE2),从而确认该文件起初处于不可执行的状态(退出状态为1)。随后,你通过CODE3命令增添了执行权限,并且再次运用CODE4和CODE5来验证这一更改,此时的退出状态变为了0。
你还探索了检查文件权限的其他方法。通过使用 CODE0 命令,你学会了解读权限字符串,特别是 'x' 字符,以此来识别可执行文件。最后,你使用 CODE1 命令查看文件的详细信息,包括访问权限,这为确认文件的可执行性提供了另一种方式。