Linux 运维与安全专家 04 · 命令行基础与常用命令

第 4 章 · 命令行基础与常用命令

阶段 A预计 8–10 小时必须肌肉记忆

高手「快速用命令看清一切状态」的底层能力就是本章。不追求背全,追求高频命令 + 查命令的方法论:以后遇到没见过的命令,你会自己查、自己用。本章命令基本 Ubuntu/Rocky 通用(个别差异已标注)。

4.1Shell 是什么:你的翻译官

Shell 是「接收你输入的命令 → 翻译成系统调用 → 返回结果」的程序。默认是 Bash(Ubuntu 20.04+ 默认 dash 作为 sh,交互 Shell 是 bash;Rocky 默认 bash)。你输入的每一行,Shell 按「命令 + 选项 + 参数」解析执行。

4.2命令的骨架:命令 + 选项 + 参数

终端 · 结构示例
ls -lh /var/log
│   │   └── 参数(目标)
│   └── 选项(-l 详细, -h 人类可读)
└── 命令

4.3高频命令地图(按场景分类,先混脸熟)

场景核心命令
文件与目录ls cd pwd mkdir cp mv rm ln file stat
查看文件内容cat tac less head tail grep wc diff
搜索find locate which whereis grep -r
进程ps top htop kill pkill pgrep jobs nohup
系统状态uptime free df du uname hostnamectl dmesg lsblk
用户whoami id who w last useradd passwd sudo
网络ip ss ping curl wget dig ssh scp traceroute
压缩tar zip unzip gzip xz zstd
文本处理grep sed awk sort uniq cut tr jq(JSON)
帮助man --help apropos type help

别急着全背 —— 第 4.11 节教你怎么用的时候查;查多了自然记住高频的。

4.4管道、重定向、通配符(Shell 的灵魂)

终端 · 三大件
# 管道 | :把前一个命令的输出,作为后一个命令的输入
ps aux | grep nginx
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head

# 重定向 > >> < 2>:输出到文件 / 追加 / 从文件输入 / 错误输出
echo "hello" > /tmp/a.txt
nginx -t 2>&1               # 错误信息合并到正常输出
mail -s "备份" user < report.txt

# 通配符 * ? [ ]
ls *.log                    # 所有 .log 结尾
rm -f backup_2024??.tar      # ? 匹配单个字符
ls file[1-3].txt             # file1 file2 file3
rm 安全铁律 rm -rf 是「后悔药最贵的命令」。三条保命习惯:① 用通配符前先 ls 预览匹配结果;② 重要删除先 mv 到 /tmp 再观察;③ 系统目录(/etc /usr /var/lib)绝不手动 rm -rf。养成把 rm -rf 替换成 rm -rf -- 路径 并用绝对路径写全的习惯。

4.5文件与搜索:每日操作清单

终端 · 文件操作
ls -lah /etc/nginx        # 详细列表(-a 含隐藏文件)
cp -r /etc/nginx /root/nginx.bak   # -r 递归复制目录
mv old.conf new.conf       # 重命名/移动
ln -s /opt/app/bin/app /usr/local/bin/app   # 软链接(快捷方式)
find / -name "*.conf" -type f 2>/dev/null   # 全盘找文件
find /var/log -mtime -7    # 7 天内修改过的文件(排查痕迹常用)
locate nginx.conf          # 数据库秒查(需 updatedb 更新)
tail -f /var/log/nginx/access.log   # 实时跟踪日志(运维最常用!)

tail -f 是运维之神器:实时看日志、看服务输出、看流量。学完第 10 章你会用它查攻击。

4.6进程管理

终端 · 进程全家桶
ps aux                        # 全部进程快照(列:USER PID CPU MEM VSZ RSS TTY STAT START TIME COMMAND)
ps -ef | grep mysql           # 按名字找进程
top                           # 实时刷新;按 P 按CPU排、M 按内存排、1 看每核
pgrep -f "nginx: worker"      # 只输出 PID
kill -15 1234                 # 温柔终止(默认);kill -9 强杀(最后手段)
pkill -f mysqld               # 按名杀
sleep 3600 &                 # 后台运行
nohup ./app > app.log 2>&1 &  # 脱离终端后台运行(登出也不死)
jobs -l                       # 查看当前 Shell 后台任务
kill -9 的顺序 先 kill -15(让进程清理自己)等几秒,不行再 -9。数据库、配置类服务强杀可能损坏数据。生产环境杀进程前先确认:ps -ef | grep 名字 看清 PID 和归属。

4.7文本三剑客:grep / sed / awk(运维看家本领)

终端 · 三剑客实战
# grep:过滤行
grep "error" /var/log/syslog
grep -i "warning" app.log        # 忽略大小写
grep -E "192\.168\.1\.(10|20)" access.log   # 扩展正则
grep -rn "listen" /etc/nginx/     # 递归搜索目录

# sed:流编辑(查找替换)
sed -i 's/8080/80/g' nginx.conf   # 原地替换(-i 慎用,先备份)
sed -n '10,20p' file.txt          # 打印 10-20 行

# awk:按列处理
awk '{print $1, $9}' access.log    # 打印第 1、9 列(IP 与状态码)
awk '$9 == 404 {print $1}' access.log | sort | uniq -c
df -h | awk 'NR>1 {print $1, $5}' # 分区与使用率

现在先会用 grep,sed/awk 能看懂示例即可,第 11 章脚本实战里会大量用到。这三样是「从日志里快速提炼信息」的核心武器。

4.8vim:服务器上绕不开的编辑器

服务器没有图形界面时,改配置全靠终端编辑器。vim 学习曲线陡但必须入门(nano 是简易替代,但 vim 无处不在)。只记必会 15 个操作:

操作按键
打开文件vim /etc/nginx/nginx.conf
进入编辑模式i(光标前插入)/ a(后)/ o(新行)
返回普通模式Esc
移动h j k l(左 下 上 右); gg 文件头; G 文件尾; :N 到第 N 行
删除x 删一个字符; dd 删一行; dG 删到结尾
复制粘贴yy 复制行; p 粘贴
撤销重做u 撤销; Ctrl+r 重做
查找/关键词 回车; n 下一个; N 上一个
保存退出:wq 保存退出; :q! 不保存退出; :w 只保存
行号显示:set nu(写入 ~/.vimrc 永久生效)

练习方法:每天用 vim 改一个配置文件,一周就顺了。

4.9tmux:SSH 断开不断线(多任务神器)

SSH 一断,终端里的进程就收到挂断信号。tmux 让会话在服务器后台存活,断线重连后一切还在:

终端 · tmux 必会
tmux new -s work          # 新建会话(-s 命名)
tmux ls                   # 列出会话
tmux attach -t work       # 重连会话
# 会话内:Ctrl+b 然后按 ——
#   c 新窗口   d 脱离(detach,任务继续跑)   % 左右分屏   " 上下分屏
tmux kill-session -t work  # 关闭会话
习惯养成 以后在服务器上跑长任务(编译、备份、部署),一律 tmux new -s 任务名 后执行。这是「登出不断线」的专业做法。screen 是同类老工具,功能类似。

4.10环境变量与 PATH:命令为什么能被找到

终端 · 配置永久 PATH
echo 'export PATH=$PATH:/opt/app/bin' >> ~/.bashrc
source ~/.bashrc          # 让配置立即生效

4.11查命令方法论:以后遇到陌生命令怎么办

  1. type 命令:是内建、别名、还是外部程序?(alias 看别名)
  2. which 命令 / whereis 命令:可执行文件在哪。
  3. 命令 --help:最快看用法。
  4. man 命令:完整手册。搜索手册:man -k 关键词 或 apropos 关键词。
  5. 想要示例:tldr 命令(需安装,社区示例集合,强烈推荐)。
  6. 想知道系统里有哪些同类命令:ls /usr/bin | grep 关键词。
「不再靠问 AI」的关键 高手不是记性好,是查得快:man / tldr / --help 三件套 30 秒内解决 90% 的「这命令怎么用」。从今天起,遇到陌生命令先自己查三分钟,再决定要不要搜索。第 16 章还会教你高质量的搜索姿势(site:、manpage 官网等)。

本章自测题

  1. 解释管道 | 和重定向 > 的区别,并各写一个例子。
  2. 找出 /var/log 下 3 天内修改的所有 .log 文件。
  3. 把 access.log 中 404 请求的 IP 统计出现次数,从多到少排前 10。
  4. nohup 和 & 各解决什么问题?tmux 解决什么问题?
  5. 你解压了软件到 /opt/app,命令却找不到,怎么解决?
  6. kill -15 与 kill -9 的区别?先试哪个?
  7. vim 中:进入插入、保存退出、不保存退出、撤销、搜索,分别按什么?
参考答案
1. | 把一个命令输出给下一个命令当输入;> 把输出写到文件。例:ps aux|grep nginx;echo hi>/tmp/a。
2. find /var/log -name "*.log" -mtime -3
3. grep ' 404 ' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
4. & 放后台但 SSH 断开可能被杀;nohup 让进程忽略挂断信号;tmux 让会话整体存活,断线可重连。
5. 把 /opt/app/bin 加入 PATH(export PATH=$PATH:/opt/app/bin 写入 ~/.bashrc)。
6. -15 优雅退出,-9 强制杀。先 -15 等几秒再 -9。
7. i;:wq;:q!;u;/关键词。