Linux 日志入门:五个命令读懂服务器的"心声"
服务器不会说话,但它把发生过的每一件事都记进了日志。服务起不来、接口突然变慢、磁盘半夜被占满——与其对着黑屏发呆,不如学会读日志。今天分享五个最实用的日志命令,零基础也能上手。
一、tail -f:实时盯住日志“直播”
tail 用来查看文件末尾,-f 参数让它像直播一样持续跟随新增内容。
# 看最后 50 行
tail -n 50 /var/log/nginx/error.log
# 实时跟随,服务一报错立刻看到
tail -f /var/log/nginx/error.log
排查线上问题时,我习惯开一个终端专门跑 tail -f,复现问题的同时观察日志输出,效率翻倍。
二、grep:从海量日志里捞出关键行
日志动辄几十万行,靠眼睛翻不现实。grep 按关键字过滤,是日志排查的“筛子”:
# 忽略大小写找 error
grep -i "error" app.log
# 显示匹配行的前后 3 行,还原现场
grep -C 3 "Exception" app.log
# 反向过滤,把烦人的 DEBUG 噪音去掉
grep -v "DEBUG" app.log
组合技:tail -f app.log | grep --line-buffered "ERROR",实时只看报错行。
三、less:翻看大文件的正确姿势
cat 直接甩出几万行会把终端卡死,less 支持分页和搜索:
less app.log
进入后:/ 输入关键字搜索,n 跳下一个,N 跳上一个,G 直达末尾,q 退出。分析历史日志时,less + / 是我的标配。
四、journalctl:systemd 时代的统一日志
现在多数发行版用 systemd 管理服务,日志统一进了 journal。journalctl 不用记日志路径:
# 看某个服务的日志
journalctl -u nginx.service
# 实时跟随 + 只看今天 + 只看报错级别
journalctl -u myapp -f --since today -p err
注意 journal 默认存在内存里,重启会丢。想持久化可以在 /etc/systemd/journald.conf 里把 Storage 设为 persistent。
五、dmesg:倾听内核的“心声”
应用日志查不出问题时,往往是内核层面出了事:硬件故障、驱动异常、内存被 OOM Killer 干掉……dmesg 看的就是内核环形缓冲区:
# 人性化时间显示,看最后 30 行
dmesg -T | tail -30
# 找 OOM 杀进程的记录
dmesg -T | grep -i "out of memory"
有一次服务莫名重启,应用日志干干净净,最后在 dmesg 里看到内存耗尽、进程被内核杀掉——真相大白。
实战串联:一次 502 排查
上周遇到 Nginx 报 502,排查路径是这样的:
tail -f /var/log/nginx/error.log看到上游连接超时;journalctl -u backend -f发现后端服务一直在重启;grep -A 10 "Traceback" backend.log抓到启动时的异常堆栈;dmesg -T | tail确认不是 OOM,纯粹是配置写错了端口。
五个命令接力,十分钟定位。
速查表
| 命令 | 场景 | 常用参数 |
|---|---|---|
| tail -f | 实时跟踪日志 | -n 行数,-f 跟随 |
| grep | 关键字过滤 | -i 忽略大小写,-C 上下文,-v 反选 |
| less | 翻看/搜索大文件 | / 搜索,n/N 跳转,q 退出 |
| journalctl | systemd 服务日志 | -u 服务名,-f 跟随,–since 时间 |
| dmesg | 内核日志 | -T 可读时间,配合 grep |
结语
日志是服务器留给我们的“黑匣子”。与其出问题靠重启碰运气,不如把这五个命令练熟:tail -f 看直播,grep 做筛选,less 翻历史,journalctl 管服务,dmesg 听内核。多读日志,少走弯路。
- 点赞
- 收藏
- 关注作者
评论(0)