2.1 第一次和 Shell 对话
前置知识:第1章(计算机到底是什么)
预计时间:5 分钟
练习环境:本章命令以 GNU/Linux 上的 Bash 5 为准;macOS 和 PowerShell 的差异会单独说明
完成标志:能区分终端、Shell、内建命令和外部程序
第 1 章的系统探查结束后,现在把注意力放到终端。屏幕末尾闪着一个 $:这里不需要先写完整程序,只要把一行文字交给 Shell,它就会查找命令、组织参数并启动程序。
先认清四个角色
- 终端负责输入和显示。
- Shell 读取命令并处理参数。Bash、Zsh 和 PowerShell 都是 Shell,但语法不完全相同。
- 内建命令由 Shell 自己执行,例如 Bash/Zsh 中的
cd。 - 外部命令是磁盘上的程序,例如常见系统里的
/usr/bin/whoami。
提示符常以 $ 结尾。下面代码块里的命令不包含提示符,直接复制命令文字即可。
bash
whoami
hostname
date
pwd输出取决于你的账户、机器、时区和当前目录,不需要和书里的某个用户名一致。
当前运行的是哪个 Shell
bash
printf 'login shell: %s\n' "$SHELL"
printf 'current process: '
ps -p $$ -o comm=$SHELL 通常来自账户配置,表示登录 Shell;它不保证等于当前进程。你可能从 Bash 启动 Zsh,也可能在终端里进入容器。
再看命令来自哪里:
bash
type -a cd
type -a printf
type -a whoami
command -v whoamitype -a 能显示别名、函数、内建命令和外部命令,排查时通常比 which 完整。
命令、选项和参数
bash
printf '%s\n' 'hello terminal'这里 printf 是命令,'%s\n' 和 'hello terminal' 是两个参数。Shell 先按引用和展开规则构造参数,再执行命令。单引号保护其中的空格,因此整句话仍是一个参数。
需要帮助时:
bash
help cd # Bash 内建命令
man whoami # Linux/macOS 常见
whoami --help # GNU/Linux 常见;并非所有平台都支持这些命令都执行完后,再看看 pwd 的输出。下一页用它回答一个实际问题:命令里的相对路径从哪里开始找?