可执行文件
首先要明白,Linux 中的“运行”一个文件,本质上是告诉操作系统加载该文件的内容,并将其作为程序来执行,一个文件能否直接运行,取决于它是否被标记为“可执行”。

我们可以使用 ls -l 命令来查看文件的属性,其中有一个标志位表示文件是否可执行:
$ ls -l my_script.sh # 输出类似:-rw-r--r-- 1 user user 123 Oct 26 10:30 my_script.sh # 这里的 'r' 是读,'w' 是写,但没有 'x' (执行) $ ls -l my_program # 输出类似:-rwxr-xr-x 1 user user 87654 Oct 26 10:31 my_program # 这里的 'x' 表示该文件是可执行的
运行 Shell 脚本 (.sh 文件)
Shell 脚本是一系列命令的集合,通常由 Bash、Zsh 等解释器来执行。
方法 1:直接使用解释器 (推荐新手)
这是最清晰、最不容易出错的方法,你明确地告诉系统使用哪个程序来执行这个文件。
# 使用 Bash 解释器运行 bash my_script.sh # 使用 Zsh 解释器运行 (如果你的系统是 Zsh) zsh my_script.sh
优点:

- 不需要修改文件权限。
- 即使文件没有执行权限也能运行。
- 可以指定使用不同的解释器版本(
bash my_script.shvssh my_script.sh)。
方法 2:赋予执行权限后直接运行
这是最常见、最“地道”的 Linux 方法。
步骤 1:赋予执行权限
使用 chmod (change mode) 命令给文件加上 +x (add execute) 标志。
chmod +x my_script.sh
执行后,再用 ls -l 查看,你就会看到文件权限里多了一个 x:
$ ls -l my_script.sh # 输出类似:-rwxr--r-- 1 user user 123 Oct 26 10:30 my_script.sh
步骤 2:运行文件 你可以通过以下两种方式运行:

-
使用相对路径或绝对路径:
# 相对路径 ./my_script.sh # ./ 表示当前目录 # 绝对路径 /home/user/my_script.sh
-
如果文件在系统的
PATH环境变量中: 你可以直接输入文件名,但通常你自己的脚本目录不在PATH中,所以第一种方式更常用。
为什么需要 ? 为了安全,Linux 默认不会在当前目录()中查找可执行文件,你需要明确告诉系统“就在这里找”,所以加上 是一个好习惯。
运行编译后的二进制程序 (如 C/C++, Go, Rust 等编译)
这些是由源代码通过编译器(如 gcc, g++)编译成的机器码文件。
步骤 1:编译源代码
假设你有一个 hello.c 文件。
# 使用 gcc 编译,生成一个名为 a.out 的默认可执行文件 gcc hello.c # 或者指定输出文件名,推荐这种方式 gcc hello.c -o hello
步骤 2:运行编译后的文件
编译成功后,你会得到一个可执行文件(如 a.out 或 hello),运行方法与场景一中的方法 2 完全相同。
# 先赋予执行权限 (如果文件没有 x 权限) chmod +x hello # 然后运行 ./hello
输出:
Hello, World!
运行 Python 脚本 (.py 文件)
Python 脚本需要 Python 解释器来运行。
方法 1:直接使用解释器 (推荐)
# 使用 python3 解释器 (强烈推荐使用 python3,而不是 python,因为很多系统 python 指向的是 Python 2) python3 my_python_script.py
方法 2:在脚本头部指定解释器并赋予执行权限
步骤 1:修改脚本文件
在 .py 文件的第一行(Shebang 行),指定解释器的路径。
#!/usr/bin/env python3
print("Hello from Python!")
#!/usr/bin/env python3 是一种更灵活的方式,它会自动在系统的 PATH 中寻找 python3 解释器,比直接写 #!/usr/bin/python3 更通用。
步骤 2:赋予执行权限
chmod +x my_python_script.py
步骤 3:运行
./my_python_script.py
运行 Java 程序 (.class 或 .jar 文件)
Java 程序运行在 Java 虚拟机上。
运行 .class 文件
假设你有一个 HelloWorld.class 文件。
# java 命令后面跟的是类名,不是文件名 java HelloWorld
运行 .jar 文件 (Java Archive)
.jar 文件是打包好的 Java 应用程序。
# -jar 参数告诉 java 命令从一个 .jar 文件运行 java -jar my_application.jar
运行其他解释型语言的脚本
这个模式是通用的:
- 使用解释器命令 + 文件名:
解释器 文件名 - 在文件头部添加 Shebang + 赋予执行权限 +
./文件名
对于 Node.js 脚本 (.js):
# 方法 1 node my_app.js # 方法 2 # 在 my_app.js 第一行添加: #!/usr/bin/env node chmod +x my_app.js ./my_app.js
常见问题与技巧
问题 1:bash: ./my_script.sh: Permission denied
原因: 文件没有执行权限。
解决: 使用 chmod +x my_script.sh 赋予权限。
问题 2:bash: ./my_script.sh: bad interpreter: No such file or directory
原因: 文件顶部的 Shebang 行指定的解释器路径不正确,例如写成了 #!/bin/bash,但你的系统 Bash 实际在 /usr/bin/bash。
解决: 检查 Shebang 行的路径是否正确,或者使用更通用的 #!/usr/bin/env bash。
问题 3:command not found: ./my_script.sh
原因: 你可能没有输入 ,或者当前目录不在 PATH 中,Linux 不会默认在当前目录查找命令。
解决: 使用 ./my_script.sh 来运行。
如何查看一个文件到底是什么类型?
使用 file 命令,它可以智能地识别文件类型。
$ file my_script.sh my_script.sh: Bourne-Again shell script, ASCII text executable $ file hello hello: ELF 64-bit LSB executable, x86-64, ... $ file my_python_script.py my_python_script.py: Python script, ASCII text executable $ file my_application.jar my_application.jar: Java archive data (JAR)
总结表格
| 文件类型 | 推荐运行方法 | 示例 |
|---|---|---|
Shell 脚本 (.sh) |
bash script.sh 2. chmod +x script.sh + ./script.sh |
bash deploy.sh |
| 二进制程序 (无扩展名) | chmod +x program + ./program |
./nginx |
Python 脚本 (.py) |
python3 script.py 2. chmod +x script.py + ./script.py |
python3 manage.py runserver |
Java 程序 (.class) |
java ClassName |
java Main |
Java 程序 (.jar) |
java -jar app.jar |
java -j my_app.jar |
Node.js 脚本 (.js) |
node script.js 2. chmod +x script.js + ./script.js |
npm start (通常内部调用 node) |
希望这份详细的指南能帮助你顺利地在 Linux 命令行中运行各种文件!
