Shell 与 Bash
终端、管道、重定向、环境变量。
Shell 与 Bash
这一课你将能做到
- 拆解「命令 = 程序 + 选项 + 参数」的结构,并用 Tab 补全、Ctrl+R 历史搜索把常用命令敲得飞快
- 熟练使用管道与重定向:把 Spring Boot 日志中的 ERROR 行过滤出来、统计条数、另存为文件
- 理解 PATH 与环境变量:会用
export、which、alias,知道为什么关掉窗口后变量会丢、如何让它永久生效
为什么要学
上一课你说清了「Linux 是底座」,但底座只能通过命令行操作——而命令行的「翻译官」就是 Shell。你在终端里敲的每一个字符,都是 Shell 先解析、再交给系统执行。
部署 Java 服务时你会反复遇到这类「天书」:
nohup java -jar backend.jar > backend.log 2>&1 &
看不懂 2>&1、&、nohup 的人只能复制粘贴祈祷;看懂的人知道它把日志去了哪、错误去了哪、进程放到了后台。本课之后,这条命令的每个字符你都能说清。后面所有课(vim 改配置、systemd 看日志、grep 排错)全部以本课的语法为基础。
先建立图像
Shell 是包裹在内核外面的「壳」:你说话(敲命令),它翻译成系统调用,内核去驱动硬件,再把结果翻译回来。
┌─────────────┐ 你敲: ls -l /var/log
│ 终端窗口 │ (只是个显示/输入的窗口,如 Windows Terminal、iTerm)
└──────┬──────┘
▼
┌─────────────┐ ① 解析:程序=ls,选项=-l,参数=/var/log
│ bash │ ② 找程序:按 PATH 里的目录逐个找 ls
│ (Shell) │ ③ 执行:fork 出子进程运行它
└──────┬──────┘
▼
┌─────────────┐ 系统调用(open/read/write…)
│ 内核 │
└──────┬──────┘
▼
硬件(磁盘上真的有 /var/log)
命令的解剖结构:
$ grep -c --color "ERROR" backend.log
│ │ │ │ │ └─ 参数:操作对象
│ │ │ └─ 长选项(--开头,完整单词)
│ │ └─ 短选项(-开头,单字母;-c 表示 count)
│ └─ 程序名(PATH 中查找)
└─ 提示符(不是命令的一部分!root 用户是 #)
跟着做
以下命令在 Ubuntu/WSL2 直接可跑。跟着敲一遍,比看十遍有效。
步骤 1:认识提示符与三个基本信息命令
whoami # 我是谁(root 或 ubuntu)
hostname # 机器名
echo $HOME # 我的家目录(/root 或 /home/ubuntu)
pwd # 当前在哪个目录(print working directory)
提示符读法:root@iZbp1xxx:~# = 用户@主机名:当前目录(~ 代表家目录),# 表示 root,$ 表示普通用户。看到 # 要格外小心:root 干坏事的成本为零。
步骤 2:命令结构的动手验证
ls # 无选项无参数:列出当前目录
ls -l # 一个短选项:长格式
ls -l -h # 两个短选项:-h 人类可读大小
ls -lh /var/log # 合并短选项 + 参数
ls --all # 长选项:等价于 ls -a
规律:选项改变「怎么做」,参数决定「对谁做」。绝大多数命令支持 --help 查看用法:
ls --help | head -20 # help 输出太长?接个 head 只看前 20 行——这就是管道