用 tail -n 20 filename 可快速查看日志末尾20行;显式写 -n 更清晰,避免与含数字的文件名歧义;还需注意权限、文件轮转、缓冲及进程实际写入路径。

直接用 tail,默认显示最后 10 行;加 -f 就能实时跟踪新追加的内容——但得注意权限、文件轮转和缓冲问题。
怎么快速看日志末尾 20 行?
用 tail -n 20 filename 最直接。如果省略 -n,tail 20 filename 也行(POSIX 兼容写法),但显式写 -n 更清晰,避免和文件名含数字时的歧义。
-
-n后面跟正数:从末尾取指定行数(如-n 5) - 跟负数:从开头跳过指定行后输出(如
-n -5等价于tail -n +$(($(wc -l ,极少用) - 跟
+N:从第 N 行开始输出到结尾(tail -n +100 filename)
实时监控日志文件新增内容,tail -f 够用吗?
够用,但有前提:目标文件不能被“替换”(比如 logrotate 用 copytruncate 或重命名后新建)。tail -f 是基于 inode 监听,一旦文件被删再重建(常见于日志轮转),它就停在原地不动了。
- 遇到轮转,改用
tail -F(大写 F):自动重打开同名文件,支持 inode 变化 - 某些系统(如老版本 busybox)不支持
-F,可退而用tail -f --retry配合--sleep-interval - 程序输出有缓冲(比如 Python 默认行缓冲关了),可能导致
-f看不到即时内容,此时需确认应用是否 flush
想同时看多个文件末尾,又不想开一堆终端?
用 tail -f file1 file2,每行开头会自动标出文件名(如 ==> file1 ),适合对比多个服务日志。
- 加
-n 0可以只监听新增,不输出历史内容:tail -n 0 -f access.log error.log - 如果某文件不存在,
tail默认报错退出;加--quiet或重定向2>/dev/null可抑制错误提示 - 终端太窄时,长行会被截断;加
-c按字节而非行处理,但通常不必要
真正麻烦的不是命令本身,而是日志被截断、权限被改、或者你盯着 -f 却忘了应用根本没往里写——先 ls -li 看 inode 是否变化,再 stat 看 mtime/ctime,最后检查进程是否真在写这个路径。










