news 2026/9/3 5:31:40

Linux大文件查看:less与more命令的区别与高效用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux大文件查看:less与more命令的区别与高效用法

在 Linux 服务器上排查日志、分析数据集、查看配置文件时,一个最常见的尴尬场景是:文件太大,用cat直接输出会把终端刷爆,屏幕哗啦啦滚动几万行,最后手忙脚乱按Ctrl+C,回头想找刚才那几行报错,早就不知道被冲到哪里去了。

很多人知道要用lessmore,但这两兄弟到底有什么区别?什么时候用哪个?为什么面试官总喜欢问lessmore的差异?真正生产环境排查问题的时候,有哪些不为人知的效率技巧?

这篇文章不打算只罗列参数表,而是从实际运维和开发场景出发,把lessmore这两个命令彻底讲透。读完你不仅能用它们查看大文件,还能学会搜索、定位、过滤、实时跟踪日志,在几百 MB 甚至几个 GB 的文件里快速找到自己需要的内容。这几乎是每一个 Linux 使用者都会遇到的刚需技能,也是面试题里高频出现的考点。

1. 为什么大文件查看不能用 cat,而要用 less 或 more

先看一个问题:为什么不能直接用cat查看大文件?

cat的设计目标是把文件内容全部输出到标准输出。文件小的时候没问题,但文件一大,问题就来了:

  • 内存和终端压力大cat会尽量把内容塞给终端,大量文本瞬间刷屏,终端模拟器渲染压力极大,远程连接时还会占用大量带宽。
  • 无法回溯查看:虽然可以靠滚动条往回翻,但如果你是通过 SSH 连接服务器,终端缓冲区有限,早期内容会被直接冲掉。
  • 无法按需加载cat是一次性输出,哪怕你只想看文件中间的一小段,它也把整个文件从头读到尾。
  • Ctrl+C 不可控:如果文件是持续写入的日志,cat会一直输出到中断,而中断时机不好控制,容易误伤正在写入的进程。

moreless的核心设计思想是:分页查看,按需加载。它们不会一次性把整个文件塞进终端,而是先显示一屏内容,等用户按键后才继续向下翻。这在面对大文件时能极大降低系统开销和人为误操作的风险。

不过,more是早期方案,功能比较简单,只能单向翻页;lessmore的增强替代品,支持上下翻、搜索、跳转、标记,甚至可以直接跟踪日志文件的变化。可以用一句话概括:more 是入门级查看工具,less 是大文件查看的瑞士军刀

2. more 命令:基础分页查看的入门工具

more命令的定位是“分页显示文件内容”。它允许用户一屏一屏地查看文件,但操作方向有限,主要只能向后翻。

2.1 more 的基本用法

more /var/log/syslog

执行后,终端会显示文件的第一屏内容,底部出现提示:

--More--(35%)

这表示当前已经显示了文件的 35%,按空格键可以继续查看下一屏,按b键可以回退一屏,按q键退出。

2.2 more 的常用交互按键

按键功能
空格键向下翻一屏
Enter向下翻一行
b向后(上)回退一屏
=显示当前行号
h显示帮助信息
q退出 more
/pattern向下搜索指定模式,按 n 继续搜索下一个
.重复上次执行的命令

2.3 more 的命令行选项

more -num /var/log/syslog # 指定每屏显示的行数 more +100 /var/log/syslog # 从第 100 行开始显示 more +/ERROR /var/log/syslog # 从第一个匹配 ERROR 的行开始显示 more -c /var/log/syslog # 先清屏再显示内容,避免滚动混淆 more -s /var/log/syslog # 将连续多个空行压缩为一行

其中-num在实际项目中比较实用。比如屏幕分辨率较高时,默认 24 行一屏会浪费空间,可以设置为more -50,让每屏显示 50 行。

2.4 more 的局限性

more最大的问题是不支持向上翻页。虽然b可以回退一屏,但粒度太粗,无法逐行向上浏览。更麻烦的是,more在管道场景下能力有限,很多高级操作做不了。因此在现代 Linux 运维中,more正逐渐被less取代。

不过,more也并没有完全退出历史舞台。有些最小化安装的 Linux 环境或者嵌入式 Linux 环境(比如 BusyBox)中,可能只有more而没有less。在资源受限的设备上,more占用内存更小,仍然有它的用武之地。

3. less 命令:大文件查看的核心工具

less是一个向上兼容more的分页工具,名字的由来也很有意思——它不是 “less is more” 的意思,而是 “more 的反义词”,暗示它是more的替代品,功能上比more更强大。

less的设计目标非常明确:让用户在查看大文件时有完全的控制权。它支持前后翻阅、定位、搜索、标记、环境变量定制、甚至是直接读取压缩文件。

3.1 less 的基本用法

less /var/log/syslog

进入less后,界面内容和more类似,但底部不会出现进度条,而是显示文件路径和当前行信息。less的交互更加灵活,光标键、PageUp、PageDown 都可以直接使用。

3.2 less 的核心交互按键

按键功能
空格键 / PageDown向下翻一屏
b / PageUp向上翻一屏
Enter / 向下方向键向下移动一行
y / 向上方向键向上移动一行
g跳到文件第一行
G跳到文件最后一行
N跳到第 N 行,比如 100G 就是第 100 行
/pattern向下搜索 pattern
?pattern向上搜索 pattern
n继续搜索下一个匹配项
N继续搜索上一个匹配项
q退出 less
v用当前内容启动默认编辑器(如 vi)
=显示文件信息(行数、字节数、位置)
F跟踪文件末尾,类似 tail -f

3.3 less 的命令行选项

less -N /var/log/syslog # 显示行号 less -S /var/log/syslog # 关闭自动换行,超长行横向滚动 less -i /var/log/syslog # 搜索时忽略大小写 less -m /var/log/syslog # 显示百分比进度 less -X /var/log/syslog # 退出时不清屏,保留显示内容 less +F /var/log/app.log # 进入后立即跟踪文件尾部 less +100 /var/log/syslog # 从第 100 行开始查看 less +/ERROR /var/log/syslog # 从第一个 ERROR 开始查看 less -o /tmp/output.txt file.log # 将输入内容保存到文件

这些选项中,日常使用频率最高的是-N-S。查看配置文件时,less -N可以直接看到行号,方便定位问题;查看含有超长行的日志时,less -S能避免自动换行导致的内容错乱。

3.4 less 的三种常用场景示例

场景一:查看系统日志并搜索关键字
less -N /var/log/syslog

进入后输入/ERROR搜索第一个 ERROR,按n继续搜索下一个,按N回到上一个。这个操作在排障时非常高效,不需要像grep那样先把结果输出到文件再查看。

场景二:实时跟踪日志文件
less +F /var/log/nginx/access.log

进入后less会像tail -f一样持续读取文件新增内容。按Ctrl+C可以暂停跟踪回到普通浏览模式,再按F恢复跟踪。

场景三:跳过文件头部,从指定匹配行开始
less +/java.lang.OutOfMemoryError /opt/app/logs/error.log

这个命令会直接跳转到第一个包含OutOfMemoryError的位置,对于分析 Java 应用堆栈日志非常方便。

4. less 和 more 的关键对比与选型建议

作为一个 Linux 使用者,理解了 less 和 more 的基本操作后,最关心的就是:实际项目中到底应该用哪个?

下面用一个表格直观对比两者的差异:

对比维度moreless
向上翻页支持b回退一屏,但不能逐行向上完全支持,方向键、PageUp 均可
搜索功能支持向后搜索支持向前和向后搜索,且支持正则
跳转定位只能从文件开头或指定匹配行进入可任意跳转行号、百分比、文件头部或尾部
实时跟踪不支持支持F跟踪文件追加内容,类似 tail -f
文件信息查看简略丰富,可显示字节数、行数、百分比
资源占用相对较小相对稍高,但可通过 -X 等优化
管道配合能力有限强大,适合与 grep、find 配合
适合场景嵌入式环境、最小化系统日常开发、运维、日志分析、配置文件查看

从选型建议来看:

  • 在普通服务器或开发环境中,优先使用less。学习成本低,功能覆盖广,长期收益高。
  • 在资源受限的嵌入式系统或 BusyBox 环境中,保留more作为兜底工具,因为它占用资源更少。
  • 在脚本中如果需要自动分页输出,可以继续用more -d,它有一个显著优点:在屏底显示 “[Press space to continue, ‘q’ to quit.]” 提示,交互意图更明确。
  • 在交互式排障场景中,less +Fless +/关键字的组合用法,比more有效得多。

有一个常见误区需要特别说明:很多人以为less一定比more快。实际上,对于小文件,两者差距不明显;对于超大文件(比如几个 GB 的日志),less的优势主要体现在操作灵活性和搜索定位能力上,而不是纯粹的速度。真正影响大文件查看速度的,是文件系统的 IO 能力和终端渲染性能。

5. 实际场景演练:用 less 快速排查错误日志

现在来看一个完整的上手案例。

假设服务器上有一个 Java 应用日志文件/opt/app/logs/app.log,大小为 1.2GB,里面记录了大量正常业务日志,但偶尔会出现异常。你需要在最短时间内找到最近的Exception以及相关上下文。

5.1 第一步:查看文件基本信息和规模

ls -lh /opt/app/logs/app.log

输出示例:

-rw-r--r-- 1 app app 1.2G Jun 12 20:45 /opt/app/logs/app.log

确认文件是 1.2GB,绝对不能用catvim直接打开。vim在这个场景下也会卡顿,因为编辑器要建立交换文件并加载索引。

5.2 第二步:用 less 打开文件并跳到文件末尾附近

less +G /opt/app/logs/app.log

+G直接跳到文件的最后一行。最近的错误日志通常都在文件尾部,这个动作可以让你第一时间看到新的日志输出,省去了从头翻到尾的漫长等待。

5.3 第三步:向上搜索最近的异常关键字

less界面中输入:

?Exception

?表示向上搜索,从当前位置(文件末尾)往上查找最近的一个Exception。找到后,按n可以继续往上搜索更早的异常,按N可以往下搜索下一个异常。

如果搜索时想忽略大小写,可以在搜索前输入:

-i

然后再次执行?exception,大小写就不再敏感。

5.4 第四步:定位到具体行并查看上下文

假设搜索到异常出现在第 4862150 行,可以直接输入:

4862100G

跳到该行附近,然后按方向键上下翻动,查看异常发生前后的日志上下文。如果某行日志太长,导致自动换行后很难对齐格式,可以按:

-S

关闭自动换行模式,超长行会横向滚动,这样日志的原始时间戳和堆栈结构会清晰很多。

5.5 第五步:用行号定位并退出

如果确认需要记录行号再退出,可以按=查看当前行信息,或者直接按q退出。下次要重新定位时,直接用less +4862100G /opt/app/logs/app.log精确跳转。

这里还需要补充一个less的隐藏技巧:当你在less中操作时,可以随时输入:e /path/to/other/file来打开另一个文件,不需要先退出再重新进入。这个特性在同时排查多个日志文件时很实用。

6. 大数据场景下的效率技巧与高级用法

当文件超过一定规模(比如几个 GB 甚至更大)时,普通的分页浏览已经不能满足需求,需要结合less的高阶用法来提高效率。

6.1 结合 grep 过滤后再查看

有时候文件太大,直接进入后搜索仍然很慢,可以先通过管道过滤,再进入 less:

grep "ERROR" /opt/app/logs/app.log | less -N

这样less看到的是只包含 ERROR 的有效内容,体积大幅减小。如果还想频繁搜索,可以使用:

grep -i "exception" /opt/app/logs/app.log | grep -v "ExpectedException" | less

这个命令先匹配所有包含 exception 的行(忽略大小写),再排除包含 ExpectedException 的行(因为有些业务异常是预期内的),最后进入分页浏览。排查日志时,这个组合比直接打开原始文件定位效率高很多。

6.2 使用 tail 与 less 结合

如果要查看的是实时追加的日志,又希望在尾部操作,可以组合使用:

tail -n 1000 /opt/app/logs/app.log | less

或者直接:

tail -F /opt/app/logs/app.log | less

tail -F会持续跟踪文件,但由于管道的原因,less不会自动滚动。这个用法适合查看稳定输出的日志,按Ctrl+C可以停止跟踪。

6.3 使用 less 的 mark 标记功能

less支持在文件的不同位置打标记。按m再按一个字母,比如a,就会在当前位置建立一个名为a的标记;之后输入'a(单引号加 a)可以快速回到这个位置。这个功能在大型日志文件中对比前后两次异常上下文时非常有用。

具体操作流程:

  1. 在第一个异常附近按m,再按a
  2. 继续向下翻,找到第二个异常,按m,再按b
  3. 想回到第一处,按'a;回到第二处,按'b

这样就不需要记住行号也能快速来回跳转。

6.4 同时查看多个文件

less允许一次打开多个文件:

less file1.log file2.log file3.log

less内部,使用:n切换到下一个文件,:p切换到上一个文件,:e指定打开新文件,使用:d可以删除文件列表中的当前文件。对于日志文件按天切分的场景,这个特性非常高效,不用反复退出重新打开。

6.5 直接查看压缩文件

less的一个隐藏能力是查看 gzip 压缩的日志文件:

less access.log.gz

less会自动解压并分页显示内容,不需要提前gunzip。这在高压缩比的日志归档场景中能省去不少磁盘空间和解压时间。

7. 常见问题与排查思路

在实际使用中,lessmore虽然简单,但也有一批高频问题,这里逐一定位排查方式。

问题现象可能原因排查方式解决方案
进入 less 后屏幕混乱,退出后内容残留终端配置或环境变量不一致检查TERM环境变量设置export TERM=xterm-256color,使用less -X退出时保留内容
搜索不到想要的内容,但 grep 能查到搜索方向不对,大小写敏感确认/?的方向差异,检查大小写使用-i忽略大小写,换用?向上搜索
大文件打开慢文件所在磁盘 IO 较慢,或系统内存不足iostat查看磁盘 IO,用free -h查看内存优先使用grep过滤后再进入 less,避免直接打开超大文件
日志行太长导致格式错乱没有关闭自动换行-S观察效果进入时使用less -S
管道输入时 less 提示 “input is not a terminal”在脚本中直接调用 less,但无法交互检查脚本调用方式less -F让内容少时直接退出,或在脚本中使用非交互方式
按方向键出现字符而不是移动光标TERM环境变量设置不正确执行echo $TERM设置为正确的终端类型,重新登录
more 查看时无法向上翻more 的原生局限换用 less,或使用more -E在底部退出后重新进入

对于第一个问题,再补充说明一下:less默认退出时会清空屏幕内容,只保留最后一些行。这在某些终端模拟器中会让人觉得“显示异常”。如果希望退出后仍然保留所有浏览过的内容,可以在启动时使用less -X,或者在~/.bashrc中设置:

export LESS="-X"

这个设置对日常使用影响很大,尤其是从服务器复制输出内容时,能避免退出后看不到之前文本的困扰。

8. 最佳实践与工程建议

lessmore虽然只是两个基础命令,但在工程实践中,养成好的使用习惯能显著提高效率。

8.1 在 shell 配置中固化常用选项

推荐在~/.bashrc~/.zshrc中加入:

export LESS="-N -i -X -S"

解释一下:

  • -N:显示行号,排障时便于定位。
  • -i:搜索时忽略大小写,省去反复切换大小写。
  • -X:退出时不清屏,保留浏览痕迹。
  • -S:关闭自动换行,适合日志和配置文件。

如果你的终端宽度较窄,-S可能会导致需要频繁横向滚动,可以只在需要时临时加-S,不用固化。

8.2 区分日志文件与配置文件的查看方式

  • 查看日志文件:优先less +F实时跟踪,配合greptail过滤。
  • 查看配置文件:优先less -N,方便记录行号。
  • 查看源代码:优先less -S -N,避免长行换行破坏缩进。
  • 查看二进制或超大文件:尽量只用less的元信息功能,不要随便翻页。

8.3 搜索时注意正则特殊字符

less的搜索支持正则表达式。如果你搜索的字符串中包含.*[]等特殊字符,需要进行转义。比如搜索 Java 异常类名:

?java\.lang\.OutOfMemoryError

如果不转义,.会匹配任意字符,可能导致搜索到大量不相关的内容。

8.4 脚本中使用 less 的安全性

在 shell 脚本中,如果less检测到输出不是终端,它会直接退化为普通输出行为,但为了保险,推荐使用:

command | less -F -R
  • -F:如果输出内容少于一屏,直接像 cat 一样输出并退出。
  • -R:保留 ANSI 颜色控制字符,让彩色输出正常显示。

这在自动化脚本中非常安全,不会因为意外阻塞导致脚本卡住。

8.5 注意权限和文件占用问题

查看日志文件时,如果文件正被其他进程写入,使用less不会影响写入进程。但如果文件权限不对,比如普通用户尝试查看/var/log/secure,可能会看到 “Permission denied”。此时需要确认自己是否有 sudo 权限,或者使用:

sudo less /var/log/secure

需要注意,用sudo查看敏感日志文件时,操作记录同样会被系统审计,应遵循最小权限原则,不查看与工作无关的内容。

8.6 组合使用:从 less 无缝切换到编辑器

less内置的v命令可以直接用默认编辑器打开当前文件。如果查看配置时发现需要修改,直接按v进入vi,改完退出再回到less,整个过程非常流畅。这个功能在查看服务配置时尤其高效。

9. 总结与后续学习方向

lessmore是从 Unix 时代流传至今的经典命令,它们解决的核心问题是:在大文件面前,让用户拥有可控的阅读路径。more简单直接,适合最小化环境;less则在交互能力上实现了全面超越,是日常开发、运维、日志分析中更推荐的选择。

本文真正讲清楚的几个点是:

  • cat不适合大文件查看的根本原因,以及moreless的分页设计思想。
  • moreless在交互、搜索、跳转、实时跟踪方面的具体差异。
  • less在超大日志文件场景下的定位流程:进入尾部、向上搜索、行号跳转、关闭换行。
  • less的高阶用法:标记、多文件切换、直接查看压缩文件、结合 grep 和 tail 过滤。
  • 常见问题的排查方式,以及 shell 配置中可固化的便捷选项。

如果你想继续深入,下面几个方向值得研究:

  • lessvim的键位对比,很多操作习惯是互通的。
  • tail -Fjournalctl -fmultitail等实时日志工具与less的配合。
  • 在嵌入式 Linux 和 BusyBox 环境中,more的替代方案和限制。
  • less查看二进制文件时的表现,以及strings命令的配合使用。

建议你在自己的服务器上找一个大日志文件,按照本文的步骤实际演练一遍。先用less +G跳到尾部,再向上搜索一个错误关键字,定位行号,配合-S关闭换行,最后用q退出。整个过程只要熟练操作一遍,后续工作中遇到再大的日志文件都不会手足无措。把这个技巧记在心里,遇到线上问题的时候,就能比同事更快一步定位到问题根源。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 5:31:07

FPGA下载方式和常用电平标准

1. FPGA下载方式FPGA 的 "下载" 本质上是把配置比特流(Bitstream)写入 FPGA 内部配置 SRAM 或外部非易失存储器的过程。下面按三个维度系统梳理。1.1 按数据流向与时钟控制权分类类型时钟来源数据来源典型场景主动模式 (Active)FPGA 自身产生 …

作者头像 李华
网站建设 2026/9/3 5:31:04

Python数据可视化实战:NBA球员分析项目全流程解析

简介:这是一份面向计算机专业本科生及数据可视化初学者的Python实战项目资源,聚焦NBA球员数据的采集、清洗、分析与多维度可视化,适用于期末大作业、课程设计及毕业设计选题。资源包共19个文件,包含6个核心Python脚本(…

作者头像 李华
网站建设 2026/9/3 5:29:35

舌苔语义分割数据集 舌苔识别 基于UNet模型的舌苔语义分割:从数据准备到模型训练到建立gui

使用UNet模型训练舌苔语义分割数据集,步骤:安装依赖、准备数据集、配置UNet模型、训练和评估模型、以及构建GUI应用程序来展示分割结果。 文章目录 使用UNet模型训练舌苔语义分割数据集,步骤:安装依赖、准备数据集、配置UNet模型、…

作者头像 李华
网站建设 2026/9/3 5:27:01

Multisim仿真交通灯设计:数字电路实践与60-45-5时序实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 5:24:58

基于YOLOv5与ResNet18的骨龄检测系统:从定位到分类的医学影像分析实践

简介:本资源是一套面向计算机视觉方向本科生与研究生的骨龄检测毕业设计完整实现方案,聚焦医学影像中手腕X光片的关键骨骼区域定位与骨龄评估任务。项目创新性融合YOLOv5目标检测模型与ResNet18分类网络,先精确定位桡骨、尺骨及掌指骨等12类关…

作者头像 李华