grep — 文本搜索
grep "error" app.log # 搜索包含 error 的行
grep -i "error" app.log # 忽略大小写
grep -v "debug" app.log # 排除匹配行
grep -r "TODO" src/ # 递归搜索目录
grep -n "error" app.log # 显示行号
grep -c "error" app.log # 计数
grep -A 3 "error" app.log # 匹配行 + 后 3 行
grep -B 2 "error" app.log # 匹配行 + 前 2 行
grep -E "error|fail" app.log # 正则(扩展)
# 实用组合
grep -rn "FIXME" --include="*.cpp" . # 只搜 .cpp 文件的 FIXME
ps aux | grep nginx | grep -v grep # 查进程排除 grep 自身
history | grep "docker" # 搜索历史命令
find — 文件查找
find . -name "*.cpp" # 按名称
find . -name "*.cpp" -o -name "*.h" # 或逻辑
find . -type f -mtime -7 # 最近 7 天修改的文件
find . -type f -size +10M # 大于 10MB 的文件
find . -name "*.o" -delete # 查找并删除
find . -name "*.log" -exec rm {} \; # 对每个结果执行命令
find . -name "*.cpp" | xargs wc -l # 管道传递给 wc
# 排除目录
find . -name "*.cpp" -not -path "./build/*"
sed — 流编辑器
# 替换(最常用)
sed 's/old/new/' file # 每行替换第一个
sed 's/old/new/g' file # 全局替换
sed -i 's/old/new/g' file # 原地修改(-i)
# 按行操作
sed -n '10,20p' file # 打印第 10-20 行
sed '5d' file # 删除第 5 行
sed '/pattern/d' file # 删除匹配行
# 实用场景
sed -i 's/\r$//' file # 去除 Windows 换行符
sed -i 's/^#//' config.ini # 取消注释
sed -n 's/.*PORT=\([0-9]*\).*/\1/p' # 提取 PORT 值
awk — 文本分析
# 按列处理
awk '{print $1, $3}' file # 打印第 1、3 列
awk -F: '{print $1}' /etc/passwd # 指定分隔符 :
awk -F',' '{print $NF}' file # $NF = 最后一列
# 条件过滤
awk '$3 > 100' data.txt # 第 3 列 > 100 的行
awk '/error/ {print $0}' app.log # 含 error 的行
awk 'NR>=10 && NR<=20' file # 第 10-20 行
# 统计
awk '{sum += $1} END {print sum}' # 第 1 列求和
awk '{cnt[$2]++} END {for(k in cnt) print k, cnt[k]}' # 分组统计
进程管理
ps aux | grep myapp # 查看进程
top -p $(pgrep myapp) # 只看指定进程
htop # 更友好的 top
kill -9 <PID> # 强杀进程
killall myapp # 杀所有同名进程
pkill -f "python server.py" # 按命令行匹配杀
# 后台运行
nohup ./myapp > output.log 2>&1 & # 忽略挂断信号
screen -S myapp # 创建会话
screen -r myapp # 恢复会话
tmux new -s myapp # tmux 版
磁盘与文件
df -h # 磁盘使用
du -sh * | sort -h # 当前目录各文件/夹大小排序
ncdu # 交互式磁盘分析(需安装)
ls -lhS # 按文件大小列出
lsof -p <PID> # 进程打开的文件
lsof -i :8080 # 哪个进程在占用 8080 端口
网络
# 端口/连接
ss -tlnp # 监听中的 TCP 端口
ss -tlnp | grep 8080 # 查 8080 端口
netstat -tlnp # 同上(旧工具)
# 连通性
ping -c 4 google.com # 4 次 ping
curl -I https://example.com # 只看 HTTP 头
curl -X POST -d '{"key":"val"}' url # POST JSON
wget -c https://example.com/file.zip # 断点续传
# DNS
nslookup example.com # 查 DNS
dig example.com +short # 简洁输出
systemd 服务管理
# 服务状态
systemctl status nginx
systemctl start/stop/restart nginx
systemctl enable nginx # 开机自启
systemctl disable nginx
# 查看日志
journalctl -u nginx -f # 跟随日志
journalctl -u nginx --since "1h ago" # 最近 1 小时
journalctl -u nginx -n 50 # 最后 50 行
# 查看启动时间
systemd-analyze # 总启动时间
systemd-analyze blame # 各服务耗时排序
组合技
# 统计代码行数(排除空行和注释)
find src -name "*.cpp" | xargs cat | grep -v '^\s*$' | grep -v '^\s*//' | wc -l
# 查找最大的 10 个文件
find . -type f -exec du -h {} + | sort -rh | head -10
# 实时监控日志中的错误
tail -f app.log | grep --color "ERROR\|FATAL"
# 批量重命名
for f in *.txt; do mv "$f" "${f%.txt}.md"; done
# 杀掉占用某端口的进程
kill $(lsof -t -i:8080)