Linux 【07-tail命令超详细教程】

Linux tail 命令超详细保姆级教程

一、命令基础作用

tail 用于查看文件末尾内容 ,最常用场景:实时监控日志(系统日志、应用日志、Nginx/Java日志)。

默认输出文件最后 10 行

基础语法

bash 复制代码
tail [参数] 文件名

二、默认用法(无参数)

直接读取文件最后10行

bash 复制代码
tail app.log

三、核心常用参数大全

1. -n:指定显示末尾多少行

格式:-n 数字,简写 -数字

bash 复制代码
# 查看最后20行
tail -n 20 app.log
# 简写写法(最常用)
tail -20 app.log

# 特殊:+数字,从第N行开始输出到文件结尾
# 从第50行开始打印全部内容
tail -n +50 app.log

2. -f:实时跟踪文件新增内容(日志监控核心)

文件新增一行,终端立刻刷新输出,不会退出,适合看实时日志。

bash 复制代码
tail -f app.log

退出监控快捷键:Ctrl + C

补充:-F-f 更强大

-f 缺陷:日志文件被日志切割(logrotate 重命名/新建)后,会停止跟踪;

-F 会持续监听文件名,文件重建/切割后自动切换新文件。

线上监控日志必用 -F

bash 复制代码
tail -F app.log

3. -c:按字节显示末尾内容

bash 复制代码
# 输出文件最后500个字节
tail -c 500 app.log
# +500:从第500字节输出到结尾
tail -c +500 app.log

4. -q:静默模式,多文件时不打印文件名

同时查看多个文件时,默认会输出 ==> 文件名 <== 分隔,-q 取消头部文件名:

bash 复制代码
# 同时看两个日志,不显示文件名
tail -q -f app.log nginx.log

5. -v:强制打印文件名(多文件场景)

bash 复制代码
tail -v -10 app.log nginx.log

6. -s:设置 -f 刷新间隔(单位秒)

默认0.1秒刷新一次,可自定义延迟,减少CPU占用:

bash 复制代码
# 每2秒刷新一次日志
tail -s 2 -F app.log

7. -pid:配合 -f,进程结束自动退出tail

监控程序日志,程序进程挂了,tail自动停止,不用手动Ctrl+C

bash 复制代码
# 12345为目标进程PID
tail -F --pid=1234 app.log

四、高频组合实战命令(工作最常用)

1. 实时监控日志,只看最后100行

bash 复制代码
tail -n 100 -F app.log
# 简写
tail -100F app.log

2. 实时日志 + grep 过滤关键词(排查报错)

只打印包含 error 的实时日志

bash 复制代码
tail -F app.log | grep -i error
# -i 忽略大小写 Error/ERROR 都匹配
# -A5 匹配行后多打印5行日志
tail -F app.log | grep -i -A5 error
# -B5 匹配行前5行
tail -F app.log | grep -i -B5 error
# -C5 前后各5行
tail -F app.log | grep -i -C5 error

3. 同时监控多个日志文件

bash 复制代码
tail -F app.log nginx.log mysql.log

4. 从文件第1000行查看全部内容(跳过前面垃圾日志)

bash 复制代码
tail -n +1000 app.log

5. 只看日志末尾1000字节

bash 复制代码
tail -c 1000 app.log

五、高级进阶用法

1. 管道结合其他命令

实时日志分页查看(配合less)
bash 复制代码
tail -F app.log | less
# less内快捷键:Shift+F 持续跟踪日志
统计实时报错行数
bash 复制代码
tail -F app.log | grep error | wc -l

2. 输出到新文件保存实时日志

bash 复制代码
tail -F app.log > new_log.txt

3. 后台静默监控(不占用终端)

bash 复制代码
nohup tail -F app.log > monitor.log 2>&1 &
# 关闭终端依然持续收集日志
# 查看后台任务:jobs
# 关闭任务:kill %1

六、-f 和 -F 核心区别(重点避坑)

参数 行为 适用场景
-f 跟踪文件句柄,文件改名/切割后失效 临时测试、不会切割的小文件
-F 按文件名持续寻找文件,切割自动重连 线上生产日志(logrotate自动切割)

线上服务器一律使用 -F,否则日志分割后看不到新日志。

七、常见问题与排错

  1. tail -f 看不到新日志
    • 原因1:日志被logrotate切割,改用 tail -F
    • 原因2:程序缓冲区未刷新,部分程序需要手动flush日志
  2. tail 读取超大文件卡顿
    优先用 -n 限制行数,不要直接读取全量;或使用 less
  3. 监控大量日志CPU过高
    使用 -s 1 延长刷新间隔,降低轮询频率

八、配套对比:head / cat / less

  • tail:看尾部、实时监控日志
  • head:查看文件头部(默认前10行)
  • cat:一次性输出整个文件,大文件慎用
  • less:分页浏览,支持上下翻页

head+tail组合:查看中间指定区间行

示例:查看文件100~120行

bash 复制代码
head -n 120 app.log | tail -n 20