命令就是程序
约 877 字大约 3 分钟
2026-09-30
在 Shell 中输入的多数命令,实际上是在运行一个程序。例如,输入 ls 时,Shell 通常会运行 /usr/bin/ls 这个可执行文件。
which ls常见输出为:
/usr/bin/ls这与在图形界面中双击一个应用程序没有本质区别。命令行只是用程序名、选项和参数,更精确地描述要运行什么以及如何运行。
Shell 如何理解一条命令?
以 ls -l /home 为例:
ls -l /home
程序名 选项 参数| 部分 | 作用 |
|---|---|
| 程序名 | 指定要运行什么,例如 ls |
| 选项 | 改变程序的行为,例如 -l 表示使用详细格式 |
| 参数 | 指定程序处理什么,例如 /home 是要查看的目录 |
短选项通常以一个短横线开头,例如 -a;长选项通常以两个短横线开头,例如 --help。具体支持哪些选项,由每个程序自己决定。
注
并非所有命令都是单独的程序。cd 必须改变 Shell 自身的当前目录,因此它通常是 Shell 的内置命令。使用 type 命令名 可以查看一个名称是程序、内置命令还是别名。
Shell 怎样找到程序?
输入完整路径 /usr/bin/ls 时,Shell 已经知道程序在哪里。只输入 ls 时,Shell 会到 PATH 环境变量列出的目录中依次查找。
echo $PATH输出通常由多个目录组成,它们之间使用冒号 : 分隔:
/usr/local/bin:/usr/bin:/binShell 会先判断这个名称是不是内置命令或别名。如果不是,就按照 PATH 中目录出现的顺序查找同名的可执行文件。找到后运行程序;全部查找完仍未找到时,才会显示 command not found。
当前目录 . 通常不在 PATH 中。因此,运行当前目录中的 hello 文件时,一般需要明确写出路径:
./hello这是一项安全设计:Shell 不会因为当前目录中碰巧存在一个与系统命令同名的文件,就自动运行它。
可执行权限
文件存在,并不代表它可以作为程序直接运行。Linux 使用权限控制谁可以读取、修改和执行一个文件。
ls -l 会显示权限。例如:
-rwxr-xr-x 1 student student 123 Sep 30 10:00 hello权限中的 x 表示可以执行。为文件增加可执行权限,可以使用:
chmod +x hello脚本还需要说明由什么程序解释。下面第一行称为 Shebang,它表示使用 Python 3 运行此文件:
#!/usr/bin/env python3
print("Hello, Linux!")拥有可执行权限后,这个脚本可以通过 ./hello 运行。系统程序与自己编写的程序遵循的是同一套规则。
查询命令
不需要记住每个程序的所有选项。下面这些工具专门用于查询:
| 写法 | 用途 |
|---|---|
type cd | 判断一个名称是程序、Shell 内置命令还是别名 |
which python3 | 查看 Shell 会从哪个路径运行程序 |
file /usr/bin/ls | 判断一个文件的类型 |
命令名 --help | 查看程序提供的简要帮助 |
man 命令名 | 打开该命令的完整手册 |
man 手册中,方向键用于滚动,按 / 可以搜索,按 q 退出。
以后看到陌生命令时,可以先将它拆成“程序名、选项、参数”,再通过 --help 或 man 查询具体含义。
贡献者
更新日志
65efd-docs(linux): add introductory Linux guide于
