Linux head、tail 命令详解——查看文件首尾内容+实时监控日志(工作必备)
前言
在Linux日常操作和工作中,我们很少需要查看文件的全部内容,更多时候是关注文件的开头(如配置文件的头部注释、数据文件的列名)、结尾(如日志文件的最新记录),或是实时监控日志的新增内容(如排查服务故障、跟踪程序运行状态)。head、tail命令就是为此而生,二者用法简洁、功能精准,其中tail -f更是运维、开发人员排查问题的“神器”。本文全程实操,讲透两个命令的核心用法、高频参数、工作场景和避坑技巧,新手看完就能直接用于日常操作和工作。
一、head 命令:查看文件头部内容(快速预览开头)
1. 命令作用
head 命令的核心功能是查看文件的头部内容,默认显示文件的前10行,也可手动指定显示的行数。它的优势的是无需加载整个文件,处理大文件时效率极高,适合快速预览配置文件的头部说明、日志文件的启动信息,或是CSV文件的列名等场景,避免因打开大文件占用过多系统资源。
2. 基本语法
格式:head [选项] 文件名/文件路径
核心选项:-n行数(指定显示的头部行数,是日常最常用的选项),此外还有-c字节数(按字节显示头部内容)、-q(多文件查看时不显示文件名)等,新手重点掌握-n即可。
3. 高频用法与参数(新手必记,直接复制可用)
① 无参数:默认显示文件前10行(最基础用法)
【示例】查看当前目录下日志文件log.txt的前10行内容,快速了解日志启动信息:
head log.txt
【效果】终端会直接输出log.txt文件的前10行,无需加载整个文件,操作简洁高效,适合快速预览。
② 参数 -n 行数:指定显示的头部行数(日常最常用)
当默认的10行不符合需求时,用-n参数指定具体行数,可简写为“-行数”(省略n),更便捷。
【示例1】查看log.txt文件的前5行,精准预览关键开头内容:
head -n 5 log.txt或head -5 log.txt(简写形式,推荐)
【示例2】查看系统配置文件/etc/passwd的前3行(用户信息头部),快速确认文件格式:
head -n 3 /etc/passwd
③ 补充用法:显示除了最后N行以外的所有内容(新手了解,工作偶用)
在-n后面加上负数,代表“排除文件最后N行,显示剩余所有内容”,适合需要查看文件大部分内容、仅排除尾部无关内容的场景。
【示例】查看log.txt文件,显示除了最后100行以外的所有内容:
head -n -100 log.txt
④ 拓展用法:按字节显示头部内容(-c参数)
除了按行数显示,head还支持按字节显示头部内容,适合查看二进制文件或特定字节长度的内容。
【示例】查看test.bin文件的前1024个字节内容:
head -c 1024 test.bin
4. 新手避坑点
1. 若指定的行数大于文件的总行数,head不会报错,会直接显示文件的全部内容;
2. 查看二进制文件(如图片、可执行文件)时,会显示乱码,不要用head查看,避免影响判断;
3. 多文件查看时,默认会显示每个文件的文件名,若不想显示,可加上-q参数(如head -q file1 file2)。
二、tail 命令:查看文件尾部内容+实时监控日志(工作核心)
1. 命令作用
tail 命令与head对应,核心功能有两个:① 查看文件的尾部内容(默认显示最后10行);② 实时监控文件的新增内容(tail -f,工作必备)。它同样无需加载整个文件,处理大文件效率极高,尤其适合查看日志文件的最新记录、实时追踪服务运行状态,是运维、开发人员排查故障的核心工具之一。
2. 基本语法
格式:tail [选项] 文件名/文件路径b
核心选项(新手必记):
--n 行数:指定显示尾部的行数,可简写为“-行数”;
--f:实时监控文件新增内容(工作最常用,重点掌握);
--F:增强版实时监控,文件被删除、重命名后,重新创建同名文件仍能继续监控(应对日志轮转场景);
--c 字节数:按字节显示尾部内容。
3. 高频用法与参数(新手必记,工作直接用)
① 无参数:默认显示文件最后10行(最基础用法)
【示例】查看log.txt文件的最后10行,快速了解日志最新记录:
tail log.txt
【场景】日常排查问题时,先查看日志最新10行,快速定位是否有错误信息。
② 参数 -n 行数:指定显示尾部的行数(常用)
与head的-n用法一致,可简写为“-行数”,适合精准查看尾部特定行数的内容。
【示例1】查看log.txt文件的最后5行,聚焦最新的日志记录:
tail -n 5 log.txt或tail -5 log.txt(简写,推荐)
【示例2】查看系统日志/var/log/syslog的最后20行,了解系统最新运行状态:
tail -n 20 /var/log/syslog
③ 参数 -f:实时监控文件新增内容(工作必备,重中之重)
当服务运行时,日志文件会不断新增内容,tail -f会持续追踪文件末尾,只要有新内容写入,就会实时显示在终端上,排查服务故障、跟踪程序运行状态时必不可少。其工作原理是基于文件描述符持续读取文件末尾,一旦文件大小增加,就会显示新增部分。
【示例】实时监控系统日志/var/log/syslog的新增内容,跟踪系统运行状态:
tail -f /var/log/syslog
【效果】终端会一直处于监控状态,不会自动退出,只要日志有新增内容,就会实时刷新显示。
【退出监控】按Ctrl + C键,即可退出实时监控(必记,否则终端会一直占用)。
【工作场景】部署服务后,实时监控日志,查看服务是否启动成功;服务报错时,实时跟踪错误信息,快速定位问题原因。
④ 参数 -F:增强版实时监控(应对日志轮转,工作推荐)
日常工作中,日志文件会因大小限制被系统轮转(如log.txt重命名为log.txt.1,再创建新的log.txt),此时tail -f会因追踪的是旧文件描述符而失效,无法监控新日志。而tail -F会周期性尝试重新打开同名文件,即使文件被删除、重命名后重新创建,也能继续监控,生产环境中强烈推荐使用。
【示例】增强版实时监控Nginx访问日志,应对日志轮转:
tail -F /var/log/nginx/access.log
⑤ 补充用法:按字节显示尾部内容(-c参数)
【示例】查看test.txt文件的最后100个字节内容:
tail -c 100 test.txt
⑥ 进阶用法:结合grep过滤关键信息(工作高频组合)
实时监控日志时,若日志内容过多,可结合grep命令过滤特定关键词(如错误、警告),减少信息噪音,快速定位关键内容。
【示例】实时监控log.txt,只显示包含“ERROR”的新增日志(忽略大小写用grep -i):
tail -f log.txt | grep "ERROR"
4. 新手避坑点(工作重点注意)
1. 实时监控(tail -f/tail -F)时,必须按Ctrl + C退出,不要强行关闭终端,否则可能导致终端异常;
2. 监控系统日志、服务日志时,普通用户可能因权限不足无法查看,需用sudo获取管理员权限(如sudo tail -f /var/log/auth.log);
3. 若指定的行数大于文件总行数,tail会显示文件全部内容,不会报错;
4. 日志轮转时,优先使用tail -F而非tail -f,避免监控中断;
5. 多文件监控时,默认会显示每个文件的文件名,若不想显示,可加上-q参数。
三、head、tail 命令对比(快速选择,避免用错)
命令 | 核心功能 | 默认行为 | 高频场景 | 核心参数 |
|---|---|---|---|---|
head | 查看文件头部内容 | 显示前10行 | 预览配置文件头部、数据文件列名 | -n(指定行数)、-c(指定字节数) |
tail | 查看尾部内容、实时监控日志 | 显示最后10行 | 查看日志最新记录、排查服务故障 | -n(指定行数)、-f(实时监控)、-F(增强监控) |
四、工作实操练习(新手必做,快速上手)
跟着以下步骤练习,5分钟掌握两个命令的核心用法,直接对接工作场景:
1. 先创建一个测试文件(模拟日志文件):touch test.log && for i in {1..20}; do echo "log line $i" >> test.log; done(创建20行内容的测试日志);
2. 用head查看头部内容:head test.log(默认前10行)、head -n 3 test.log(前3行);
3. 用tail查看尾部内容:tail test.log(默认后10行)、tail -5 test.log(后5行);
4. 实时监控测试日志:打开一个新终端,输入tail -f test.log;
5. 模拟日志新增:回到第一个终端,输入echo "new log line" >> test.log,观察第二个终端,会实时显示新增内容;
6. 退出实时监控:按Ctrl + C,尝试用tail -F test.log再次监控,模拟日志轮转(删除test.log,重新创建并写入内容),观察监控是否继续生效;
7. 进阶练习:tail -f test.log | grep "new",实时过滤包含“new”的日志。
五、工作必备技巧总结(30秒记住,直接用)
1. 看开头:用head,head -n 行数 文件名,简写head -行数 文件名;
2. 看结尾:用tail,tail -n 行数 文件名,简写tail -行数 文件名;
3. 实时监控日志(工作核心):用tail -f 日志路径,退出按Ctrl + C;
4. 应对日志轮转:用tail -F 日志路径,避免监控中断;
5. 过滤关键日志:用tail -f 日志路径 | grep "关键词",高效排查问题;
6. 核心原则:两个命令都无需加载整个文件,处理大文件高效,避免占用过多系统资源。
掌握这两个命令,就能轻松应对Linux文件首尾查看、日志实时监控的所有场景,尤其是tail -f和tail -F,是工作中不可或缺的“神器”,练熟后能大幅提升工作效率。
