服务器日志成千上万行,想找一条错误信息像大海捞针?别急着翻界面工具,打开终端,几条bash命令就能帮你精准定位目标内容。
grep:最趁手的文本搜查员
日常排查网络请求异常,比如想看看有没有频繁访问某个接口的记录,直接用grep过滤就行。假设你的日志文件叫access.log,想找出所有包含/api/login的请求:
grep "/api/login" access.log
如果想忽略大小写,比如有些请求写成/Login或/Api/Login,加个-i参数更省心:
grep -i "/api/login" access.log
配合管道,缩小搜索范围
有时候日志太多,直接搜结果还是太多。比如你怀疑问题出在凌晨2点左右,可以先按时间筛选,再交给grep处理。假设每行日志开头都有时间戳:
cat access.log | grep "02:00" | grep "500"
这条命令的意思是:先读取日志,找出所有发生在02:00左右的记录,再从中筛选出返回500错误的行。两步过滤,直击要害。
递归搜索多个文件?find + grep 联手搞定
项目日志分散在多个子目录里,一个个文件打开不现实。这时候用find找文件,再把结果传给grep:
find /var/log/myapp -name "*.log" -exec grep -l "timeout" {} \;
这条命令会遍历/var/log/myapp下所有以.log结尾的文件,查找包含"timeout"的文件,并只输出文件名。加上-l参数是为了避免刷屏,先知道哪个文件有问题再说。
反向筛选,排除干扰信息
有时候你想看“除了正常心跳之外的其他请求”,可以用-v参数反向匹配:
grep -v "GET /health" access.log
这样就把所有健康检查的请求过滤掉,剩下的就是真实业务调用,更容易发现异常行为。
这些命令不光能用在服务器,本地开发时查看程序输出、分析爬虫抓取结果也一样好使。与其等UI工具加载半天,不如敲几行命令,秒出结果。