菜鸟科技网

Linux命令行如何运行文件?

可执行文件

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

Linux命令行如何运行文件?-图1
(图片来源网络,侵删)

我们可以使用 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

优点:

Linux命令行如何运行文件?-图2
(图片来源网络,侵删)
  • 不需要修改文件权限。
  • 即使文件没有执行权限也能运行。
  • 可以指定使用不同的解释器版本(bash my_script.sh vs sh 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:运行文件 你可以通过以下两种方式运行:

Linux命令行如何运行文件?-图3
(图片来源网络,侵删)
  • 使用相对路径或绝对路径:

    # 相对路径
    ./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.outhello),运行方法与场景一中的方法 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

运行其他解释型语言的脚本

这个模式是通用的:

  1. 使用解释器命令 + 文件名解释器 文件名
  2. 在文件头部添加 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 命令行中运行各种文件!

分享:
扫描分享到社交APP
上一篇
下一篇