马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
排查线上问题时,"看日志 "是最先动手的一步。Linux 下能看日志 的命令很多,但日常真正高频的其实就那么几个:tail 看最新的、head 看最早的、cat 一把梭、more/less 翻页、sed 按行号或时间段切一段出来。这篇把它们的使用方式和几个实用的组合技串起来讲,顺手把 less 的常用按键也列清楚,省得每次都要去查手册。
一、tail:盯住最新的那几行
看实时日志 基本靠 tail,三个最常用的写法:
tail -n 10 test.log # 看最后 10 行
tail -n +10 test.log # 从第 10 行开始看到结尾
tail -f -n 10 test.log # 实时跟踪,新日志实时追加在后面
其中 -f 是生产排查的主力,配合 grep 过滤更省力:
tail -f -n 1000 app.log | grep 'ERROR'
这样屏幕上只留错误行,界面不会被刷屏冲垮。日志量很大、又想分页慢慢看的时候:
tail -n 4700 aa.log | more -1000
这样每屏停 1000 行,按 Ctrl+F 或空格往下翻。(注意:tail 的 -n 跟数字之间没有空格,写成 -n1000 也可以;加空格反而会当成"文件名"。)
二、head:从开头看起
head 和 tail 方向相反,看日志开头(比如程序启动时的初始化信息):
head -n 10 test.log # 前 10 行
head -n -10 test.log # 除了最后 10 行,其余全部
head 的参数基本和 tail 一一对应,-n、-c(按字节)都能用,刚接触时记住 -n 足够。
三、cat:一次性铺满屏幕
cat 是最基础的查看工具,做几件事比较顺手:
cat filename # 全文输出到屏幕
cat > filename # 从键盘读内容写进新文件(Ctrl+D 结束)
cat file1 file2 > file3 # 合并几个文件到新文件(只能建新的,不能改已有的)
cat -n file1 > file2 # 带行号拷一份
cat : > textfile2 # 清空文件(把空内容覆盖进去)
最后一条清空日志的写法在生产上挺救命:清空正在被服务写入的日志文件,服务句柄不丢,日志不中断,磁盘空间立刻释放。比 rm 掉日志文件安全得多——直接删会导致进程继续往一个"已删除"的 inode 写,空间释放不掉。
四、more 与 less:分页浏览
两者都是分页器,区别在方向:more 只能往前翻,less 能前后自由翻,而且 less 是懒加载,打开大文件不会先读完整份,几百兆的日志也能秒开。
less app.log # 看文件
ps -ef | less # 分页看进程列表
history | less # 分页看历史命令
less app.log access.log # 一次看多个文件(:n 切换)
less 的按键,记住这几个就够用了:
| 按键 | 作用 |
| 空格 / Ctrl+F | 向下翻一屏 |
| b | 向上翻一屏 |
| /字符串 | 向下搜索 |
| ?字符串 | 向上搜索 |
| n / N | 重复上一次搜索 / 反向重复 |
| = | 显示当前行行号 |
| :f | 显示文件名和当前行号 |
| v | 调出编辑器编辑当前文件 |
| h | 帮助界面 |
| q | 退出 |
另外几个参数顺手记:-N 显示每行行号、-i 搜索忽略大小写、-m 显示百分比进度、-s 把连续空行压成一行。
more 的按键要少一些:Enter 下移一行(默认 1 行)、Ctrl+F 与空格下翻一屏、Ctrl+B 回上一屏、= 输出行号、:f 输出文件名和行号、v 调 vi、q 退出。
五、sed:精准切一段出来
日志几千行只想看中间某一段,用 sed 按行号或按时间戳切片最省事:
sed -n '5,10p' filename # 只看第 5 到第 10 行
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log # 按时间段
第二种按时间范围切的做法,在排查"某几分钟接口突然报错"这种场景特别顺手——直接把那段时间整段扒下来单独看。
六、组合技:实战里怎么用
单条命令解决不了的问题,靠管道拼起来:
tail -f app.log | grep -i 'timeout' # 实时盯超时错误
less +G access.log # 直接跳到文件末尾
grep -n 'ERROR' app.log | tail -n 20 # 全文件里最后 20 条错误
awk '/2024-05-01 10:00/,/2024-05-01 10:05/' app.log # 按时间窗口裁段
补一句关于日志位置的常识:源码安装的通常落在 /usr/local/nginx/logs/、/var/log/nginx/,应用自己打的一般在 /var/log/<应用名>/ 或项目目录下的 logs/。排障时先 find /var/log -name '*.log' 定位,别一上来就 tail 错文件。
七、速查表
| 需求 | 命令 |
| 看末尾 N 行 | tail -n N file |
| 实时跟踪 | tail -f file |
| 看开头 N 行 | head -n N file |
| 清空日志不中断服务 | cat : > file |
| 分页随意翻 | less file |
| 按行号切片 | sed -n '5,10p' file |
| 按时间段切片 | sed -n '/起/,/止/p' file |
| 带行号看全文 | cat -n file / less -N file |
八、小结
日常够用的就是这套:tail 看最新、head 看最早、less 自由翻页、sed 切时间段。真正在线上出事时,先 tail -n 200 快速定位是不是有异常,再 less 进去配合 /关键字 搜索,比一页页翻效率高得多。另外提醒一句:生产环境的日志文件要配好轮转(logrotate),否则再熟练的查看命令也救不了被写满的磁盘。
qidao123.com企服评测-应用市场 编辑提示
本文整理自 Linux 日常运维中的常用命令,示例均可在 Shell 中直接执行。文中路径与日志名为示例,请替换成实际环境。更多服务器与运维实践文章可到 qidao123.com 企服评测-应用市场 阅读。
|