Linux查看文件内容的命令教程
本文整理了Linux系统中从基础到进阶的文件内容查看方法,覆盖文本、日志、二进制、压缩文件等全场景,所有命令均可直接复制使用,适合开发、运维人员日常参考。
一、基础查看命令
适合小到中等规模文件的快速浏览,是日常使用频率最高的工具。
1. cat:全量输出文件内容
适合行数较少(通常100行以内)的配置文件、脚本文件,支持多文件合并、显示行号、标记特殊字符。
# 基础查看
cat /etc/hosts
# 显示所有行行号(包含空行)
cat -n /etc/nginx/nginx.conf
# 仅对非空行编号,压缩连续空行为单行
cat -bs /etc/profile
# 显示所有不可见字符(排查隐藏格式问题)
cat -A config.sh
# 合并多个文件输出
cat file1.txt file2.txt > merged.txt
注意:绝对不要用cat打开GB级大文件,会导致终端卡顿甚至IO飙升。
2. tac:逆序输出文件内容
cat的反向操作,从最后一行倒序输出,适合需要倒推日志时间线的场景。
tac app.log
3. more:简易分页查看
早期的分页工具,仅支持向下翻页,功能已被less完全替代,仅作为备用。
more large.log
快捷键:空格翻一页、回车翻一行、q退出。
4. less:大文件分页首选
按需加载文件内容,内存占用极低,支持上下翻页、双向搜索、跳转定位,是查看大文件的核心工具。
less /var/log/syslog
核心快捷键:
↑/↓:单行滚动PageUp/PageDown或b/空格:整页翻页/关键词:向下搜索,n跳下一个匹配、N跳上一个?关键词:向上搜索g:跳到文件开头,G:跳到文件末尾:行号:跳转到指定行F:进入实时追踪模式(类似tail -f),Ctrl+C暂停q:退出
二、部分内容截取
适合只需要查看文件头部、尾部内容的场景。
1. head:查看文件开头内容
默认输出前10行,支持按行数、字节数截取。
# 查看前20行
head -n 20 access.log
# 查看前100字节内容
head -c 100 binary_file
2. tail:查看文件末尾内容
默认输出最后10行,核心功能是实时监控日志更新。
# 查看最后50行
tail -n 50 app.log
# 实时监控文件新增内容(日志排查必备)
tail -f /var/log/app.log
# 增强版实时监控,支持日志轮转(logrotate)后自动跟踪新文件
tail -F /var/log/app.log
# 先读取最后100行,再持续监控更新
tail -n 100 -f app.log
# 指定刷新间隔为5秒
tail -f -s 5 app.log
退出实时监控按Ctrl+C。
三、内容搜索与过滤
日志排查、内容检索的核心工具,支持正则匹配、上下文查看、批量搜索。
1. grep:关键词匹配搜索
# 基础搜索,区分大小写
grep "ERROR" app.log
# 忽略大小写搜索
grep -i "error" app.log
# 显示匹配行的行号
grep -n "timeout" app.log
# 反向匹配,输出不包含关键词的行
grep -v "healthcheck" access.log
# 递归搜索目录下所有文件
grep -r "database_url" /etc/
# 支持扩展正则,匹配多个关键词
grep -E "ERROR|Exception|timeout" app.log
# 显示匹配行前后各5行上下文
grep -C 5 "Exception" app.log
# 仅显示匹配行前/后N行
grep -B 10 "Exception" app.log # 前10行
grep -A 10 "Exception" app.log # 后10行
# 统计匹配行数
grep -c "ERROR" app.log
# 仅输出包含匹配内容的文件名
grep -rl "ERROR" /data/logs/
2. awk:按列处理文本
适合结构化日志(如Nginx访问日志、CSV文件)的列提取、条件过滤。
# 提取第一列(如访问日志的IP地址)
awk '{print $1}' access.log
# 提取第1列和第7列(IP和请求URL)
awk '{print $1, $7}' access.log
# 以冒号为分隔符提取第一列(如提取/etc/passwd的用户名)
awk -F: '{print $1}' /etc/passwd
# 筛选第9列(HTTP状态码)大于等于500的行
awk '$9 >= 500 {print}' access.log
# 筛选最后一列(请求耗时)大于3秒的行
awk '$NF > 3 {print}' access.log
3. sed:流式文本编辑
适合按行范围提取、内容替换、格式处理。
# 仅输出第100到120行内容
sed -n '100,120p' app.log
# 全局替换文本(仅输出,不修改原文件)
sed 's/old_text/new_text/g' file.txt
# 直接修改原文件,并生成备份
sed -i.bak 's/port=8080/port=9090/g' config.ini
# 删除所有空行
sed '/^$/d' file.txt
# 删除所有注释行(以#开头)
sed '/^#/d' config.conf
四、文件元数据与类型识别
查看文件类型、大小、权限、修改时间等属性信息。
# 识别文件类型(基于内容判断,不依赖扩展名)
file app.bin
# 查看文件详细属性(权限、所有者、大小、修改时间等)
stat /etc/passwd
# 以人类可读格式显示文件大小、权限
ls -lh app.log
# 统计文件行数、单词数、字节数
wc app.log
# 仅统计行数
wc -l app.log
五、特殊文件查看
1. 二进制文件查看
# 以十六进制+ASCII格式查看二进制文件
hexdump -C binary_file
# 以八进制格式查看文件内容
od -x binary_file
# 提取二进制文件中的可读字符串(分析可执行文件常用)
strings /usr/bin/ls
2. 压缩文件直接查看
无需解压即可查看.gz格式的压缩日志。
# 查看压缩文件全部内容
zcat access.log.gz
# 分页查看压缩文件
zless access.log.gz
# 搜索压缩文件中的关键词
zgrep "ERROR" access.log.gz
3. 只读查看文件
基于vim的只读模式,避免误修改核心配置文件。
view /etc/nginx/nginx.conf
操作方式和vim一致,/搜索、q退出,无法保存修改。
六、高级组合技巧
管道组合可以覆盖90%以上的复杂文件分析场景。
# 实时追踪日志并过滤错误关键词(避免管道延迟)
tail -f app.log | grep --line-buffered "ERROR"
# 查看文件第180到200行内容
head -n 200 app.log | tail -n 20
# 统计访问日志中Top10的访问IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
# 统计访问日志中各HTTP状态码的数量
awk '{print $9}' access.log | sort | uniq -c | sort -nr
# 批量查找目录下所有日志中包含Exception的文件
find /data/logs -name "*.log" | xargs grep "Exception"
# 统计当前目录下所有日志的ERROR总数
grep -c "ERROR" *.log | awk -F: '{sum+=$2} END {print sum}'
# 打开大文件直接搜索关键词
less +/ERROR app.log
七、大文件处理避坑指南
- GB级以上文件:禁止使用
cat、vim直接打开,优先用less分页查看,或tail/head截取部分内容。 - 日志轮转场景:使用
tail -F而不是-f,避免日志文件被切割后跟踪中断。 - grep搜索大文件:可以先用
tail截取最近的内容再搜索,减少扫描范围。 - 二进制文件乱码:先使用
file命令判断类型,再用hexdump、strings等专用工具查看。
八、常用场景速查表
| 场景 | 推荐命令 |
|---|---|
| 查看小配置文件 | cat -n file.conf |
| 分页查看GB级日志 | less app.log |
| 实时监控应用日志 | tail -F app.log |
| 搜索日志中的错误 | grep -C 5 "ERROR" app.log |
| 提取访问日志IP | awk '{print $1}' access.log |
| 查看压缩日志 | zless access.log.gz |
| 查看二进制文件 | hexdump -C binary_file |
| 提取文件指定行范围 | sed -n '100,200p' app.log |

浙公网安备 33010602011771号