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