Linux 6种查看日志方法

[复制链接]
发表于 2026-10-6 09:50:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

排查线上问题时,"看日志日志"是最先动手的一步。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 企服评测-应用市场 阅读。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表