tail 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
tail——文件与目录命令族(见文件与目录命令族)/ 文本处理(见文本处理命令族)共有。它最出名的本事是-f实时跟日志。
tail 输出文件末尾若干行(默认 10 行)。它和 head 相对,但比 head 多一个杀手锏:-f 持续监听文件、新内容一写入就显示——这是运维看实时日志的标配动作。
一、基本用法
tail file # 后 10 行
tail -n 20 file # 后 20 行
tail -n +5 file # 从第 5 行到末尾(跳过前 4 行)
tail -c 200 file # 末尾 200 字节
-n N取末尾 N 行;-n +N(正数)是"从第 N 行起到末尾",和 head 的负数语义不同,注意区分。管道里... | tail截尾部结果。
二、实时跟踪:-f 与 -F
tail -f app.log # 实时跟随,新行追加即显示(Ctrl-C 退出)
tail -F app.log # 同 -f,但文件被轮转(改名/重建)也能继续跟
tail -n 100 -f app.log # 先看末尾 100 行再跟随
-f(follow)是看实时日志的灵魂:服务在跑、你想看它此刻输出的错误信息,tail -f一直刷。-F比-f更稳——日志常按时间/大小轮转(app.log变成app.log.1,新建空app.log),-f会停在旧文件(已不写),-F能探测到文件变化继续跟新文件。生产看日志一律用-F。
三、管道里截尾部
ps aux | tail -5 # 进程列表末 5 行
cat access.log | tail -20 # 日志末 20 行
sort file | uniq -c | sort -rn | tail -10 # 频率榜单末 10(见 [sort/uniq](/linux/cmd/sort.md))和 head 对称,
... | tail取尾部。注意 Top N 榜单用 head(取最大的在前面),tail取尾部适合"看最近 N 条""看末尾汇总"。
四、和 head 配合看中段
# 看第 11~30 行
tail -n +11 file | head -n 20
# 或 sed -n '11,30p'(见 [sed](/linux/cmd/sed.md))大文件看中间段,
tail -n +N | head组合或 sed 都行。比 cat 全打印高效得多。
五、实战:实时排查线上错误
# 实时跟日志,只看 error 行(配合 grep,见 [grep](/linux/cmd/grep.md))
tail -F app.log | grep --line-buffered error
# 同时跟多个文件(tail 自动标注来源)
tail -F /var/log/nginx/*.log
# 看最近 100 行并持续跟随
tail -n 100 -F app.log第一条是实战高频:
tail -F实时跟、grep 过滤只看 error,边操作边看报错。--line-buffered让 grep 实时输出不缓冲。多文件用通配,tail 会给每行标来源文件。这些组合是线上排障的肌肉记忆。
六、tail vs head
| 命令 | 强项 |
|---|---|
tail | 看最新内容、-f/-F 实时跟日志 |
| head | 看开头、表头、格式预览(见 head) |
监控日志用 tail,预览结构用 head。一个看"正在发生什么",一个看"长什么样"。
一句话总结
tail = 看末尾 + 实时跟:默认后 10 行、-n N 取末 N、-n +N 从第 N 行起;-f 实时跟日志、-F 还能跟轮转后的新文件(生产用 -F);tail -F | grep error 是线上排障标配。与 head 互补:tail 看最新/实时,head 看开头/格式。