Shell 与文本处理学习路线¶
Shell 既是命令解释器,也是把小工具组合成处理流程的语言。运维中最常见的工作不是写几百行脚本,而是把服务状态、日志和配置转换成可以判断的问题证据。
学习顺序¶
| 顺序 | 章节 | 要解决的问题 |
|---|---|---|
| 1 | Shell 基础、管道与引用 | stdin/stdout/stderr、退出码、引号和安全组合 |
| 2 | grep 与正则筛选 | 从文件和命令输出中找到需要的行 |
| 3 | sed 流编辑 | 替换、删除、选取和安全修改配置 |
| 4 | awk 字段处理 | 按列筛选、计算、分组和格式化 |
| 5 | sort 与 uniq | 排序、去重、计数和 Top N |
| 6 | 变量、环境与 export | Shell 变量怎样传给子进程,PATH 怎样生效 |
| 7 | 运维组合案例 | 日志、连接数、进程、磁盘和配置的完整分析 |
先建立三个习惯¶
- 修改文件前先把结果打印到终端,确认后再覆盖或使用
sed -i。 - 所有可能包含空格、通配符或换行的变量都写成
"$variable"。 - 复杂流水线分段验证,不要一次写完后只看最终空结果。
Linux 与 macOS 差异¶
Linux 服务器通常使用 GNU grep/sed/awk/coreutils;macOS 默认多为 BSD 实现。常见差异包括:
- GNU sed 原地修改可用
sed -i '...' file,BSD/macOS 通常需要sed -i '' '...' file。 grep -P、sort -h、sed --debug等并非所有平台都有。- 默认
awk可能不是 GNU awk,避免无意依赖 gawk 扩展。 - 脚本先确定目标平台;需要可移植时优先 POSIX 写法。
grep --version 2>/dev/null || grep -V
sed --version 2>/dev/null || sed -h
awk --version 2>/dev/null || awk -W version
sort --version 2>/dev/null || sort --help
命令帮助¶
先确认命令是外部程序、Shell builtin、alias 还是函数。线上看到陌生参数时查目标主机的 man,不要假设本机与服务器版本相同。