在Linux操作系统中,可执行指的是某个文件具备被系统直接调用并运行的属性,这种属性由两部分共同决定,一是文件的权限设置,二是文件本身的格式是否符合系统可执行文件的要求。
Linux可执行的两种核心判定条件
1. 权限层面的可执行属性
Linux的文件权限分为读、写、执行三种,对应字母r、w、x。只有当文件的所有者、所属组或者其他用户对应的权限位中包含执行权限x时,该用户才具备运行这个文件的权限基础。
可以通过ls -l命令查看文件的权限信息,比如执行以下命令查看当前目录下的文件:
ls -l # 输出示例: # -rwxr-xr-x 1 user user 12345 test.sh # -rw-r--r-- 1 user user 67890 data.txt
上述输出中,test.sh的权限位第一个-表示普通文件,后续rwxr-xr-x分别对应所有者、所属组、其他用户的权限,其中所有者有x执行权限,所属组和其他用户也有x权限,说明这个文件在权限层面具备可执行属性。而data.txt的权限位没有x,权限层面不可执行。
2. 文件格式层面的可执行要求
仅有执行权限还不够,文件本身的内容格式必须能被Linux系统识别为可运行的程序。常见的可执行文件格式包括:
- ELF格式:Linux下最常见的二进制可执行文件格式,比如系统自带的
/bin/ls、/bin/bash都属于这类。 - 脚本文件:以
#!/path/to/interpreter开头的文本文件,比如Shell脚本、Python脚本等,系统会调用对应的解释器来运行脚本内容。
可以使用file命令判断文件的格式类型,示例如下:
file /bin/ls # 输出:/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped file test.sh # 输出:test.sh: Bourne-Again shell script, ASCII text executable
如何修改文件的可执行权限
如果文件格式符合要求,但权限层面没有执行权限,可以通过chmod命令添加执行权限。
常用chmod修改方式
给文件所有者添加执行权限:
chmod u+x test.sh
给所有用户添加执行权限:
chmod a+x test.sh # 等价于 chmod +x test.sh
也可以用数字权限表示法,执行权限对应数字4,写权限对应2,读权限对应1,比如755权限表示所有者有读写执行权限,所属组和其他用户有读执行权限:
chmod 755 test.sh
运行可执行文件的注意事项
当文件同时满足权限和格式要求后,运行时有两种方式:
- 如果文件在当前目录,需要加
./前缀,比如运行当前目录的test.sh:./test.sh - 如果文件在系统的
PATH环境变量包含的目录中,可以直接输入文件名运行,比如ls命令可以直接运行,因为它在/bin目录,属于PATH路径。
如果运行的时候提示权限不够,说明当前用户没有该文件的执行权限;如果提示无法执行二进制文件,说明文件格式不符合当前系统的要求,比如x86架构的程序放到ARM架构的设备上运行就会出现这类问题。
常见疑问解答
目录的可执行权限是什么意思
目录的执行权限和文件不同,它表示用户是否可以进入该目录,以及是否可以访问目录下的文件元数据。如果没有目录的执行权限,即使知道目录下有文件,也无法查看、运行目录里的文件。
所有文本文件都可以加可执行权限吗
可以加权限,但如果没有正确的解释器声明(比如Shell脚本没有#!/bin/bash开头),系统无法识别如何运行这个文件,执行的时候会报错。