背景
在终端执行命令时,如何理解这件事?并且如何理解附加的一些参数?
回答
路径的概念
绝对路径与相对路径
-
绝对路径(Absolute Path):以根目录
/
开始,完整地描述了从根目录到目标文件或目录的层次关系。例如:/home/user/project/file.txt
-
相对路径(Relative Path):相对于当前工作目录(
pwd
命令可查看)所写的路径。例如:./file.txt
(表示当前目录下的 file.txt)../file.txt
(表示当前目录的上级目录下的 file.txt)
PATH
环境变量
在 Linux 中,当你在终端直接输入命令(如 ls
、grep
等)时,系统会根据环境变量PATH
中列出的目录顺序去寻找对应的可执行文件。
-
例如,
PATH
中可能包含如下几个目录:./my_program 或 /home/user/my_program
参数的理解
当你执行一个命令时,除了命令本身,还可以后跟一些参数(也常被称为“选项”“标志”或“附加参数”)来改变或指定命令的行为。这些参数在命令行解析时通常分两类:
-
选项(Options 或 Flags):一般以
-
或--
开头,用于开启/关闭特定功能或指定某些模式。例如:
ls -l # 使用 -l (long) 模式输出 rm -rf # -r 表示递归删除,-f 表示强制删除 grep --color=auto
-
位置参数(Positional Arguments):往往不是以
-
开头,它们表示命令要处理的目标对象、文件路径或其他值。例如:
cp source_file target_file grep "pattern" filename
命令行解析流程大致是:
-
Shell(例如 bash、zsh 等)会先对输入的文本进行分词(区分空格、引用、转义等)。
-
找到第一个令牌(token)时,作为可执行命令的名称,然后在
PATH
或当前目录(若指定./
)下查找对应的可执行文件。 -
其余令牌被视为对该命令的参数,并按照顺序传递给命令的主程序。
在终端执行命令的流程概述
-
Shell 接收输入:你在终端键入命令并敲击回车,Shell 读取到这一行文本。
-
Shell 解析命令:通过空格、引号、转义符等规则进行分词,将第一个分词视为“命令名称”,后面的分词视为“参数”。
-
查找可执行文件:Shell 会根据当前配置的
PATH
环境变量去查找是否有与“命令名称”匹配的可执行文件。
-
如果找到了可执行文件,Shell 会加载并运行它,传入已解析的参数列表。
-
如果没找到,则会报错
command not found
。
-
命令内部解析参数:不同命令有各自的参数处理逻辑,会根据你传入的选项或位置参数来执行相应的操作。
-
输出结果:命令完成后,如果有输出则返回到终端;如果发生错误则返回错误信息。
附加参数的作用
-
短选项(-)与长选项(--):多数 Linux 命令都同时支持短选项和长选项。短选项通常是单个字母(例如
-l
、-h
),长选项是可读性更好的文本(例如--help
、--version
)。 -
参数组合:有些命令可以将短选项组合在一起使用,例如
ls -la
相当于ls -l -a
。但长选项必须分开写。 -
参数值:长选项也可能需要附加值,比如
--color=auto
、--output=FILE
。