首页/系统/Linux 运维命令速查/tail 查看文件末尾与实时跟随
文本处理77 条

tail 查看文件末尾与实时跟随

看最新日志的基本工具:-n 数字行、-f 实时跟随、-F 跟踪轮转后的新文件,运维出场率最高的命令之一。

Linux 运维命令速查系统更新于 2026-10-13

tail 是什么

tail 输出文件末尾若干行,默认 10 行,与 head 互为对偶。它有两种典型用法:静态取样(-n 指定行数、-c 指定字节数)与动态跟随(-f 跟随文件描述符、-F 跟随文件名并在轮转或短暂消失后重新打开)。其中 -n +N 是从第 N 行开始输出到文件末尾,与 -n N 的含义差别很大,写脚本时容易混淆,需要特别留意。

基本信息

适用平台Linux、macOS、BSD(GNU coreutils / BSD tail)
命令语法tail [选项] [文件...]
常用选项-n N 末尾 N 行、-n +N 从第 N 行到末尾、-c N 末尾 N 字节、-f 跟随描述符、-F 跟随文件名并重试、-q 多文件不显示文件名头、-v 强制显示文件名头、--pid 指定进程退出后结束
实现特点tail 从文件末尾向前定位,不读取全文,所以查看几十 GB 日志的最后几行同样很快
权限要求需要文件的读权限;系统日志通常只对 root 与特定组合开放

典型使用场景

  • 查看最新记录:取最后几十行确认最近一次操作的结果
  • 定位报错:从大日志尾部往前找最近的异常堆栈
  • 实时观察:写日志的同时用 -f 或 -F 跟随输出,验证改动是否生效
  • 按行号截取:用 -n +N 跳过开头大量内容,只看某一行之后的部分
  • 多文件汇总:同时列出多个日志的尾部,快速比较不同组件的最新状态
  • 脚本取数:取末尾固定行数交给后续处理,例如解析最近一条统计记录

常用示例

常用示例
tail -n 50 app.log
tail -f app.log               # 实时跟随(Ctrl+C 退出)
tail -F app.log               # 跟随轮转:文件被切走后自动追新文件
tail -n +100 app.log          # 从第 100 行开始到结尾
tail -c 200 app.log           # 取末尾 200 字节
tail -q app.log error.log     # 多文件但不打印文件名分隔头
tail -F --pid=1234 app.log    # 目标进程退出后自动停止
less +F app.log               # 既能跟随又能翻页(Ctrl+C 暂停跟随)

选项对照

选项作用注意
-n N输出末尾 N 行N 前加 + 时含义变为「从第 N 行开始」
-n +N从第 N 行输出到文件末尾常用于跳过头部说明后再处理
-f跟随文件描述符日志轮转后会停留在旧文件
-F跟随文件名并在失败后重试线上看日志的标准选择
-q / -v是否输出文件名分隔头多文件跟随时用来区分来源
--pid指定进程退出后结束跟随配合服务启动观察很实用
要在文件头尾之间来回查看,用 less 更顺手:less 打开后按 G 跳到末尾、按 g 回到开头,用 +F 参数启动可以直接进入跟随模式,按 Ctrl+C 暂停跟随即可向上翻页。单纯只想取末尾几行时 tail 仍是开销最小的选择。用 -c 按字节截取时注意多字节字符可能被切断,处理中文日志建议改用行模式 -n。
跟随的目标由谁写决定了工具选择:应用自己写文件用 tail -F,应用把日志交给 systemd 则用 journalctl -f -u 单元名,后者还能按时间窗与优先级过滤。方向选错会以为日志没有输出。另外 tail 可以一次跟随多个文件,输出里会用 ==> 文件名 <== 标明来源,方便同时观察应用日志与网关日志。
在 NFS 等网络文件系统上,跟随的实时性受客户端属性缓存影响,远端写入不一定立刻可见;跨主机看日志应直接连到源主机执行,而不是挂在共享目录上 tail -F。

常见组合

组合用途注意
tail -F 日志 | grep --line-buffered 关键词只看关心的行不加缓冲参数会看起来卡住
tail -n 200 日志 | less先取样再分页翻静态快照,不跟随
journalctl -f -u 单元名服务日志跟随应用把日志交给 systemd 时首选
tail -F 日志 >> 归档文件边看边留档注意磁盘占用
在不能使用内核事件通知的环境里,跟随模式会按固定间隔(默认约 1 秒)轮询重试打开文件,所以文件刚被轮转时可能有极短断点。对完全不能断档的高频日志,应优先用 journal 或让应用直接输出到已重定向的管道。

易错点

  • 把 -n +N 当成「取 N 行」:它表示从第 N 行输出到文件末尾,与 -n N 的结果完全不同
  • tail -f 只盯 inode,日志被 rotate 后跟的是旧句柄,应改用 -F
  • 管道进 grep 等程序不带 --line-buffered 时输出被缓冲,看起来像卡住,需要逐行触发就加该参数
  • 多文件跟随时日志行交错,需要用 -v 强制标注文件名或分开窗口观察
  • 受限环境读系统日志会因权限被拒,误以为是文件为空;应加 sudo 或把用户加入相应日志组
  • 跟随输出直接重定向到文件却不做轮转,长时间运行会把磁盘写满;给采集脚本加上大小与保留份数限制

数据来源与参考

  • man 1 tail(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌