Linux Shell 常用命令使用心得
最近在整理一些日常用得最多的命令行片段,记录下来方便以后查阅。这些都是工作中真实遇到过的场景,不是教程式的罗列。
用 grep 在大量日志里定位问题
检查最近一周日志里的报错,按时间戳排序:
grep -i "error" /var/log/app/*.log | sort -k1,2
如果只想看错误所在文件的上下文几行:
grep -B 2 -A 5 "fatal" /var/log/app/2026-04-*.log
-B 是 before,-A 是 after,组合起来比单独看一行有用得多。
find 配合 -exec 做批量处理
清理 30 天前的临时文件,用 size 过滤掉小文件避免误删:
find /tmp -type f -mtime +30 -size +1M -exec rm -v {} \;
注意末尾的 \; 不能写成 +,区别在于前者每个文件单独 fork 一次 rm,后者批量传参。批量删除大量文件用 + 性能更好。
awk 做简单统计
从访问日志里统计每个 IP 的访问次数,排序后取前 10:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
这个组合用了几年,至今还是排查异常流量最快的方式。
sed 替换的几个坑
批量替换文件内容时,-i 参数在 macOS 和 Linux 行为不一样。Linux 直接 sed -i 's/old/new/g' file,macOS 必须 sed -i '' 's/old/new/g' file,否则报错。跨平台脚本里我一般用:
sed -i.bak 's/old/new/g' file
这样两边都生效,副作用是会留个 .bak 备份。可以配合 find -delete 批量清理。
小结
这些命令零碎学了好多年,最大的体会是不要试图记忆完整的语法手册,把常用组合写成函数放进 ~/.bashrc,比反复查 man 页效率高很多。