☰
Linux大文件查看神器:less与more高效用法详解
2026/9/26 9:29:27 网站建设 项目流程

如果你在 Linux 下处理过几十万行的日志、几十 MB 的配置文件或者超大的文本导出结果,多半会遇到一个很直接的问题:用cat查看会刷屏,用编辑器打开会卡顿,甚至直接把终端和内存拖垮。这时候最该用的不是图形界面,也不是tail加grep硬拼,而是less和more这两个查看大文件的命令。它们的价值不是“能打开文件”,而是“只加载需要看的部分”,让大文件在普通机器上也能快速浏览、搜索、翻页,不占太多内存。

这篇内容适合 Linux 入门用户、运维新手,也适合那些平时只用cat和tail,但遇到大文件就手忙脚乱的人。重点不是把所有参数背下来,而是先搞懂 less 和 more 各自适合什么场景,再按实际任务拆开练习。下面会从基本定位、环境条件、翻页与搜索、大文件处理、日志场景、常见坑点几个方向完整讲一遍。

1. 先搞清楚 less 和 more 分别解决什么问题

很多人第一次接触这两个命令时,会以为它们只是“一个翻页工具”和“另一个翻页工具”。实际差别比想象中大。more 是更早出现的分页查看命令,功能简单,只能往下翻,操作逻辑偏“一页一页看”。less 是 more 的增强替代品,支持上下翻、搜索、跳转、打开多个文件、显示行号、跟随文件增长等能力。名字里那句著名的“less is more”就是在说这个工具比 more 更能处理更多场景。

1.1 more 适合什么场景

more 的定位非常轻量。它在最小化安装的 Linux 系统里基本都自带,依赖少,行为简单。如果远程服务器上没有 less,或者系统环境极简,more 可以作为保底方案。

它的经典用法是:

more /var/log/messages

执行后,文件内容按屏幕大小分页显示,底部会出现--More--(xx%)这样的提示。按空格键翻下一页,按回车键翻下一行,按 q 退出。

more 真正适合的场景是:

  • 只想快速“往下看”,不需要回头看前面的内容
  • 文件不算特别大,一页一页翻不觉得慢
  • 当前系统没有 less,或不想安装额外包
  • 写脚本时需要一种最简单的分页方式,不希望引入复杂交互

more 的限制也很明显:不能向上翻页。看一个长日志文件时,一旦往下翻多了,想回头看某一段,只能退出重新打开。这会浪费很多时间。所以我一般不会把 more 作为日常主力,它更像是一个“干净环境中能用的兜底工具”。

1.2 less 为什么更适合做主力

less 几乎可以理解为“带有搜索和上翻能力的分页器”。它打开文件时不是一次性读取全部内容,而是按需加载。对于几百 MB 或几个 GB 的日志文件,less 依然能快速启动,因为不需要等整个文件读到内存。

常用启动方式:

less /var/log/syslog

进入 less 之后,界面会直接显示文件开头部分。此时可以使用方向键、PageUp、PageDown、空格、b、g、G 等按键控制阅读位置。按 q 退出。

less 解决的实际问题包括:

  • 文件太大,Vim 打开会报错或卡顿
  • cat 输出太多,终端无法保留前面内容
  • 看日志时要频繁向前翻,回顾上下文
  • 需要搜索关键字并快速定位多次出现的位置
  • 需要查看行号、显示二进制内容、过滤高亮关键字
  • 需要像 tail -f 一样追踪持续写入的日志文件

一个很明显的对比:more 是一次性从上往下翻,less 则可以在文件里自由往返。遇到 Apache 日志、Tomcat 日志、Spring Boot 启动日志这类动辄几万行甚至几十万行的文件,less 的体验会好很多。

1.3 先做一个最简单的选择判断

如果你在终端里只是临时看一个文档,文件内容也就几十行,那用 cat 就够了。如果你要密密麻麻翻几十页,优先 less。如果机器环境很干净,或者系统里没有 less,才考虑 more。判断时不用太纠结,记住一条:需要往上看和搜索时,less 优先;只是从上往下顺一遍时,more 也可以用,但没必要硬选。

我见过一些新手把 more 当成唯一工具,遇到大日志后按空格翻了十分钟,翻过头才发现回不去,最后只能重新打开。这不是 more 的问题,是选择不对。工具本身没有绝对好坏,关键是匹配场景。

2. 环境准备和基础操作,先把最小流程跑通

less 和 more 都不是复杂工具,但不同 Linux 发行版里,它们的实现和参数会有细微差异。做实验前先确认系统里有没有这两个命令,再按最小步骤操作一遍,避免一上来就陷入参数调试。

2.1 检查系统是否安装了 less 和 more

在终端里执行:

which less which more less --version more --version

一般输出会类似:

/usr/bin/less /usr/bin/more less 590 (GNU regular expressions)

如果which没有返回路径,说明系统里可能没有安装 less。在 Debian/Ubuntu 系列中,可以用:

sudo apt update sudo apt install less

在 CentOS/RHEL 系列中:

sudo yum install less

这里有一个容易忽略的点:more在很多系统里是util-linux或系统基础包自带的,less 则不一定。所以远程接手一台新机器时,先执行which能避免后面命令报command not found。

如果是国产系统,比如麒麟系统、统信 UOS,底层大多也是基于 Debian 或 CentOS 的包管理方式。检查命令是否存在的逻辑一样,安装软件时把 apt 或 yum 换成本发行版支持的包管理器即可。

2.2 生成一个测试文件,别拿生产日志练手

学习这两个命令时,不要直接拿线上大日志去测试。可以先造一个几十万行的测试文件,确认输出大小和内容结构都已知,再来观察 less 和 more 的行为。

比如在 /tmp 下生成一个包含 30 万行文本的文件:

seq 1 300000 > /tmp/bigfile.txt

seq会输出从 1 到 300000 的数字,每行一个。生成后可以用ls -lh /tmp/bigfile.txt查看大小。这个文件足够大,能体现分页查看的差异,又不至于让普通机器卡死。

如果你想模拟更常见的日志结构,可以这样生成:

for i in $(seq 1 200000); do echo "2025-06-01 12:00:00 INFO request-$i user-$i status=200"; done > /tmp/test.log

生成 20 万行之后,文件大小大约十几 MB。先用这个文件练习翻页、搜索和退出,比空看文档更直观。

2.3 打开文件后的基础按键,先记住 10 个

进入 less 之后,不用背太多快捷键,最常用的可以先记住这一组:

空格:向下翻一页 b:向上翻一页 回车:向下滚动一行 k:向上滚动一行 g:跳转到文件开头 G:跳转到文件末尾 /:从当前位置向后搜索 ?:从当前位置向前搜索 n:跳到下一个匹配项 N:跳到上一个匹配项 q:退出

more 里的基础按键更少:

空格:向下翻一页 回车:向下翻一行 q:退出 b:向后回看一页(部分实现支持) /:搜索(部分实现支持)

注意 more 的b和/在不同系统里表现不一样。比如某些最小化系统里的 more 来自bsdmainutils,行为可能与 util-linux 的 more 不同。所以我更建议在练习时以 less 为主,more 只保留“能翻页、能退出”的认知。

2.4 如何判断“真正打开了文件”

很多人学会less file后,会担心 less 是否真的读取了整个文件。判断方法很简单:打开一个很大的文件时,less 的启动速度很快,并且界面立即显示文件开头。如果文件特别大,你按 G 跳转到末尾时,它才会去读取末尾部分。这种“迟滞读取”就是 less 处理大文件的优势。

对比一下:用 Vim 打开一个大文件,启动时可能需要几秒甚至更久,因为 Vim 要做语法解析、交换文件等操作。用 cat 打开大文件,终端会不断滚屏,最后只保留最后几屏内容。less 的目标就是避免这些问题。

3. 大文件浏览的核心操作,不只是翻页

大文件翻页只是第一步。真正高效的做法是结合搜索、行号跳转、多文件切换和过滤来定位目标内容。否则几万行日志靠肉眼翻,效率会很低。

3.1 搜索关键字的正确用法

在 less 中,按/输入关键字后回车,less 会从当前行开始向后搜索。如果搜索到内容,会高亮显示所有匹配项,并且自动定位到第一个匹配位置。按n跳转到下一处,按N回退到上一处。

举例:

less /tmp/test.log

进入后输入:

/status=500

然后按 n 逐个查看匹配行。这样日志中有多少处 500 错误,以及它们附近的上下文,都能快速浏览。

如果你从头开始搜索,建议先按g回到文件开头,再输入/。因为 less 的搜索基准是当前行,而不是每次默认从头开始。忘记这点,可能会漏掉文件前面部分的匹配项。

less 搜索还支持正则表达式。比如想找包含 error 或 exception 的行,可以输入:

/error\|exception

注意不同 less 版本对正则表达式的支持程度不同,但大多数 Linux 发行版里的 less 都使用 POSIX 扩展正则。如果搜到了不想要的匹配,按 n 继续找即可。

3.2 跳转行号和直接查看文件末尾

对于非常大的日志,行号是一个很关键的定位依据。比如你通过 grep 知道某一类错误出现在第 152340 行,可以直接在 less 中输入:

152340G

这里的 G 相当于“跳转到指定行”。输入行号后按 G,less 会立刻跳到对应行。

如果想直接看文件末尾新增了哪些内容,按大写 G 跳到文件末尾。这在查看持续增长的日志时很常用。

在 more 中,跳转能力有限。虽然部分 more 实现支持=显示当前行号,但整体不如 less 灵活。

3.3 显示行号,以及带行号打开文件

less 默认不显示行号。临时查看当前行号可以按=或Ctrl+G,状态栏会显示当前行数、总行数等信息。如果你希望打开后每一行前都显示行号,可以这样启动:

less -N /tmp/test.log

用-N参数后,行号会显示在每行左侧。处理几十万行日志时,这个功能很适合用来记录问题行位置,方便后续用 grep 或 sed 做进一步处理。

注意,显示行号会让 less 在打开超大文件时多做一些计算,但一般不会太明显。如果只是临时看几眼,不一定要用-N。

3.4 多个文件切换和命令行传参

less 可以一次打开多个文件,这在对比同类日志时非常方便:

less /tmp/test.log /tmp/test2.log

在 less 内部使用:n切换到下一个文件,使用:p切换到上一个文件。如果想查看当前文件列表,可以输入:e重新加载,或者用:d删除某个文件列表项。对于新手,先记住:n和:p就够。

还有一点,less 打开管道输入时也很有用。比如:

cat /tmp/test.log | grep "ERROR" | less

实际上不需要 cat,可以直接:

grep "ERROR" /tmp/test.log | less

这样 grep 的结果会交给 less 分页显示,避免屏幕滚动后看不到前面的匹配内容。

3.5 过滤并高亮关键字

less 本身不能像 grep 那样过滤文件内容,但可以用&命令实现模式过滤。在 less 中输入:

&ERROR

此时 less 只会显示包含 ERROR 的行,其他行隐藏。取消过滤可以再次输入&然后回车。

这个功能在处理超大日志时很实用。它和搜索的区别是:搜索只是定位,过滤是隐藏不相关内容。结合使用,能更快把注意力集中在错误上下文上。

不过要注意,less 的过滤并不是重新生成文件,它只是在显示层隐藏内容。后续按文件跳转时,行号仍然是原始文件的绝对行号。这是优点也是坑点:看到第 3000 行时,它可能是原文件的第 3000 行,而不是过滤后的第 3000 行。

4. 处理超大文件和日志场景,这些参数更实用

大文件场景下,比较关键的几个问题分别是:启动速度、内存占用、长时间追踪、编码兼容、终端宽度。下面逐个展开。

4.1 打开超大文件时的适用边界

我见过很多人问“less 能打开多大文件”。答案取决于系统内存、文件系统缓存和 less 实现,不能给一个绝对数字。但在常见环境下,几百 MB 的文本日志,less 可以轻松打开;几个 GB 的纯文本文件,只要你没有搜索复杂正则,一般也能启动和翻页。

真正要担心的是极端场景:比如 20 GB 以上的单文件日志,或者文件里包含大量超长行。less 虽然不会一次性读入整个文件,但当它要定位到某一行、搜索匹配、渲染超长行时,仍然需要读取对应的数据块。如果每一行都特别长,less 渲染一屏都可能卡。

对于超大文件,还可以参考这几个参数:

less -S /tmp/test.log

-S表示截断超长行,而不是自动换行。自动换行在普通文件里没问题,但遇到超长 JSON 或超长日志时,会让卡片顿。用-S后,超出屏幕的部分不会显示,可以通过左右方向键平移查看。

组合使用:

less -N -S /tmp/test.log

文件既显示行号,又禁用长行换行,浏览速度会更快。

4.2 实时跟踪日志文件,相当于 tail -f

less 支持跟随文件增长。在 less 中按F,它会进入类似tail -f的跟随模式。文件有新增内容时,less 会自动滚动到末尾,实时显示新增日志。按Ctrl+C退出跟随模式,回到普通浏览模式。

这种用法很适合在排查线上问题时,既想看历史日志,又想观察新日志输出。比如:

less /var/log/application.log

然后按F,此时新的应用日志会不断出现在屏幕上。如果要继续查看历史部分,按Ctrl+C停止跟随,再用方向键翻回去。

对比tail -f,less 的优势是能随时切回历史上下文,而不需要再开一个终端。劣势是如果日志增长极快,less 渲染会比较吃力,这时候用tail -f配合重定向可能更稳妥。

4.3 文件编码和二进制内容

大文件不一定是纯文本。less 打开二进制文件时,会显示类似^@的转义字符和<B0>之类的内容,用来表示无法显示的二进制数据。这时可以使用:

less -b 4096 /tmp/unknown.bin

-b参数用来设置缓冲区大小,单位是 KB。处理二进制文件时,适当增加缓冲区可以减少重复读取。不过日常场景里,遇到二进制文件正确的做法是先判断文件类型:

file /tmp/unknown.bin

如果确认是日志压缩包或数据文件,就不应该强行用 less 查看。

对于非 UTF-8 编码的日志,less 在显示中文时可能乱码。可以结合iconv转换编码后再用 less 查看:

iconv -f GBK -t UTF-8 /tmp/old.log | less

这条命令会把 GBK 编码的中文日志转换为 UTF-8 后再分页显示。注意它不会修改源文件,只是临时转换输出流。

4.4 如何退出 less,以及终端残留问题

less 按 q 退出,more 也是按 q 退出。但有些场景下,less 退出了,终端里仍然保留你搜索时的高亮内容。这是因为 less 在退出时可以控制是否清空屏幕。默认情况下,less 退出后会恢复原来的终端内容,但如果你使用了某些终端配置,可能会残留。

如果想退出后不恢复原屏幕,保留刚看过内容,可以用:

less -X /tmp/test.log

或者退出时不希望屏幕被清空,也可以设置环境变量LESS=-X。但要注意,-X也会影响鼠标滚轮、终端切换等行为。一般不建议全局设置,只在需要时使用。

4.5 大文件里复制内容的技巧

less 本身没有类似 Vim 的 yank 复制功能。如果你在 less 中看到一段需要复制的内容,最常用的方法是:

  1. 按v调用系统编辑器打开当前文件(需要环境变量 EDITOR 已设置)
  2. 或者用鼠标选中终端内容直接复制
  3. 或者先记录行号,退出后使用 sed 提取

比如在 less 中按v,less 会调用默认编辑器打开当前文件,并定位到当前行附近。如果你设置了EDITOR=vim,那体验会接近直接在 Vim 中继续处理文件。没有设置时,也可以通过:

export EDITOR=vim

临时设定,再启动 less。

4.6 处理日志时,less 和 grep、awk、sed 的配合

less 适合人眼交互查看,但机器化处理和批量提取时,应该用 grep、awk、sed。一个典型的排查流程是:

  1. 先用 grep 从大日志中筛出关键错误行:
grep "OutOfMemoryError" /tmp/app.log > /tmp/oom.txt
  1. 再用 less -N 打开结果文件,定位具体行号:
less -N /tmp/oom.txt
  1. 如果要提取某一行附近的上下文,可以用 grep 的-A和-B参数:
grep -n -A 10 -B 5 "OutOfMemoryError" /tmp/app.log | less
  1. 或者用 sed 提取指定行范围:
sed -n '1000,1200p' /tmp/app.log | less

这种组合比只在 less 里翻文件高效得多。less 的角色定位是“人看”,grep/sed/awk 的角色定位是“机器处理”。搞混这两个定位,才会出现“在 less 里翻了一小时,最后发现只是要看某个关键字出现次数”的低效操作。

5. 常见参数对比和界面交互细节

less 和 more 都有一些常用参数。整理成表格后更适合速查,也方便你在不同系统间迁移经验。

5.1 less 和 more 参数对比

功能或参数lessmore
打开文件并显示行号less -N file部分 more 不支持
禁止长行换行less -S file部分 more 不支持
打开多个文件less file1 file2支持不完整
搜索关键字/keyword/keyword,部分实现支持
向上翻页按 b 或方向键部分实现支持
跳转到指定行输入行号后按 G有限支持
跟随文件增长按 F不支持
退出按 q按 q
显示当前状态按=或 Ctrl+G按=

这个表不是绝对标准,不同 Linux 发行版和 BusyBox 环境会有差异。关键是理解:less 的功能边界明显更大,more 更多是轻量备份。

5.2 less 里常用命令行参数速查

参数作用示例
-N显示行号less -N app.log
-S截断长行,不换行less -S app.log
-i搜索时忽略大小写less -i app.log
-I搜索时忽略大小写,且匹配显示时也忽略less -I app.log
-X退出时不恢复原屏幕less -X app.log
-b设置缓冲区大小less -b 8192 app.log
-p打开时定位到指定模式less -p "ERROR" app.log
-m显示详细百分比提示less -m app.log
-F文件内容少于一屏时直接退出less -F short.txt

其中-p是比较容易被忽视的参数。比如:

less -p "OutOfMemoryError" /tmp/app.log

打开 less 后会自动定位到第一个“OutOfMemoryError”出现的位置,省去手动输入搜索的步骤。

5.3 more 的常见参数

more 的参数比 less 少很多,但也有一些值得了解:

参数作用示例
-d显示提示信息more -d /tmp/bigfile.txt
-c先清屏再显示,避免滚动more -c /tmp/bigfile.txt
-s将连续多个空行合并为一行more -s /tmp/test.log
+num从指定行开始显示more +100 /tmp/bigfile.txt

more +100这种从指定行开始查看的用法,在 more 里是支持的。如果临时只能使用 more,这个参数比手动翻页快许多。

5.4 环境变量和别名建议

less 的行为可以通过环境变量LESS改变。比如你想让 less 默认显示行号、忽略大小写,可以这样设置:

export LESS="-N -i"

如果希望永久生效,可以把这行写入~/.bashrc或~/.zshrc,然后执行source ~/.bashrc。

但我不建议把-N做成全局默认。原因是有些文件打开时显示行号会占用左侧空间,反而让阅读不习惯。更重要的是,某些脚本或工具内部会调用 less,此时环境变量会被继承,可能导致输出格式和预期不一致。比如你用 less 查看man帮助页面时,如果默认设置了-N,所有帮助文档都会显示行号,观感很差。

更稳妥的做法是给常用场景设置别名:

alias lessn='less -N' alias lesss='less -S' alias lesslog='less -N -S'

这样既保留默认 less 的干净行为,又能在需要行号或长行截断时快速调用。

6. 实战中的坑点,绕开这些才叫真的会用

有些问题不是 less 命令本身有多大难度,而是使用场景和环境差异导致误判。下面几个坑是我在实际使用中经常遇到的问题,新手尤其容易踩。

6.1 用 less 打开压缩文件时到底行不行

less 默认不能直接读取.gz压缩文件。比如:

less /var/log/syslog.gz

打开后很可能是乱码或者被识别为二进制内容。解决方式有几种:

zcat /var/log/syslog.gz | less

或者:

gzip -dc /var/log/syslog.gz | less

对于.bz2压缩文件,可以用:

bzcat /var/log/syslog.bz2 | less

所以当你发现 less 打开文件乱码时,先确认文件是不是被压缩过。用file命令看一眼是最稳的。

6.2 搜索时大小写和特殊字符导致匹配失败

默认情况下,less 的搜索区分大小写。如果日志里是ERROR,你输入/error会搜不到。想忽略大小写,可以启动时加-i:

less -i /var/log/application.log

进入 less 后,也可以在搜索模式中临时修改大小写敏感度。按/后输入:

-i (作为搜索开头)

但更稳定的做法是启动时设置好。

另一个问题是搜索正则中的特殊字符。如果搜索内容是 IP 地址、端口号、时间戳,其中包含点号、斜杠、问号,需要转义。比如在日志中搜索192.168.1.1,按字面意义应该是:

/192\.168\.1\.1

如果直接输入192.168.1.1,正则会把点号当作任意字符,可能匹配到其他 IP。这是一个非常隐蔽的坑。

6.3 打开文件后内容太多,终端宽度不够

终端宽度不足时,less 默认会自动换行。比如一行日志有 300 个字符,终端宽度 100,less 会把它拆成 3 行显示。看普通日志没问题,但看堆栈信息或 JSON 数据时,自动换行会严重干扰阅读。

使用-S参数可以解决这个问题。开启后,超出屏幕的部分会被截断,你按左右方向键可以横向滚动查看。对排查 Java 异常堆栈、Python traceback、超长 SQL 非常有用。

6.4 文件内容一直在增长,less 打开后看到的不是最新内容

如果日志文件正在持续写入,直接用 less 打开,看到的是打开瞬间的文件快照起始位置。你需要按F进入跟随模式,才能看到新写入的内容。或者按G跳到文件末尾,再按F进入跟随。

这个操作顺序很容易被忽略。很多人打开日志后发现没有新内容,就误以为应用没在写日志,实际上是 less 停在文件开头或中间位置。

6.5 多个终端同时用 less 查看同一个大文件

less 没有文件锁机制,多个用户或多个终端可以同时打开同一个文件。这个特性在排查问题时很有用:你在这边用 less 翻历史日志,同事在那边用 tail -f 看实时输出,互不影响。

但如果有人正在用 vim 编辑这个文件,你再用 less 查看,注意你看到的可能是旧版本或临时文件内容。此时先确认文件的修改时间和当前进程,再用 less 查看,避免基于过期数据做判断。

6.6 在脚本里使用 less,必须考虑交互问题

如果你写一个自动化脚本,想把某个文件输出给用户分页查看,可以直接调用 less。但脚本里如果包含管道,并且不是交互终端,less 可能会报“stdin isn't a terminal”之类的错误。这时需要给 less 加参数:

less -R -F -X file.txt

-R是保留颜色输出,-F是文件内容少于一屏时直接退出,-X是退出不清屏。这个组合在脚本里比较常见,但它不是万能的。如果脚本完全是非交互执行的,建议不要依赖 less,直接把结果重定向到文件或直接 cat 输出。

6.7 用 less 代替 grep 统计次数,效率很低

有些人在 less 里搜索关键字后,靠不停按 n 来数匹配次数。文件小还可以,文件大了效率极低。统计匹配次数应该用 grep:

grep -c "ERROR" /tmp/test.log

或者想看每个关键字出现次数,可以配合 sort 和 uniq:

grep -o "ERROR\|WARN\|INFO" /tmp/test.log | sort | uniq -c

less 的价值在于阅读上下文,在于人机交互浏览,而不是做统计。很多低效操作源于没有分清楚“查看”和“处理”的边界。

6.8 处理 Windows 格式文件时出现^M

有些日志文件是从 Windows 上传到 Linux 的,行尾带有\r\n。用 less 查看时,每行末尾会显示^M,影响阅读。

处理方式有两种。一种是在查看时忽略:

less -i -S file.log

^M仍然会显示,但不影响最终阅读。另一种是先把文件转换为 Unix 格式:

sed -i 's/\r$//' file.log

或者:

dos2unix file.log

转换后再用 less 查看,行尾就不会出现^M。这个问题在生产环境里更常见,因为很多 Windows 程序导出日志后直接传到 Linux 服务器,行尾格式没转换。

6.9 less 卡住或响应慢,先排查终端和文件类型

如果 less 打开文件后按方向键响应很慢,先不要怀疑 less 本身,按这个顺序排查:

  1. 确认文件是不是超大文件,比如几 GB,且文件系统缓存没预热
  2. 确认有没有用-S,没有的话,超长行渲染会拖慢响应
  3. 确认终端类型和 SSH 连接网络,比如用远程连接时,屏幕刷新频率会受网络延迟影响
  4. 确认是否加载了复杂的 lesskey 配置
  5. 确认系统内存是否充足,如果内存不足,less 可能会频繁换页

很多“卡顿”实际是文件系统缓存未加载或终端网络延迟导致,不是 less 本身的问题。

7. 嵌入式和国产系统场景下的额外注意点

根据输入里的热词,很多人可能是在嵌入式 Linux 或国产系统环境里学习 less 和 more。这些环境与常规 Ubuntu/CentOS 有些差异,值得单独说。

7.1 BusyBox 里的 less 和 more,功能大幅缩水

嵌入式 Linux 中经常使用 BusyBox 来提供命令集合。BusyBox 自带的 less 和 more 与完整版差异很大,很多参数不支持。比如 BusyBox 的 less 可能不支持-N、-S,more 的行为也简化很多。

遇到这种情况,先执行:

less --help

看输出是 GNU less 还是 BusyBox less。如果输出很短,说明功能有限,就不要尝试那些高级参数。此时可以用cat、grep、sed的组合来代替 less 的高级能力。也可以用:

tail -n 100 file

查看末尾内容,或者用 grep 定位关键字。

7.2 国产系统里安装 less 的方式

国产系统如果基于 Debian 或 Ubuntu,安装命令通常是:

sudo apt install less

如果基于 CentOS 或 openEuler 风格,则可能是:

sudo yum install less

或者:

sudo dnf install less

有的国产系统默认内置 less,不需要安装。但不同版本之间,less 版本可能偏低,导致某些正则表达式不支持。遇到搜索报错时,可以先更新 less 或调整正则写法。

7.3 为什么建议在国产系统里多验证一次

国产系统的 shell 默认可能是 bash,也可能是其他 shell。环境变量、别名配置、终端编码都和主流发行版有细微差别。比如你设置了LESS="-N",但系统里 less 版本不支持-N,那每次打开文件都会报错。

所以我在国产系统里部署脚本时,会额外执行一次:

less --version | head -n 1 more --version 2>&1 | head -n 1

确认版本和能力,再决定脚本里是否依赖 less 高级参数。如果版本太低,就尽量用 grep、sed、awk 完成自动化处理,把 less 留给人工查看。

7.4 嵌入式系统里查看 logcat 和内核日志

嵌入式 Linux 中,查看内核日志通常用dmesg,查看应用日志可以用logcat(Android 类系统)或者直接读/var/log/messages。这些输出如果很长,同样可以通过管道交给 less:

dmesg | less
logcat -d | less

但要注意嵌入式系统内存有限,如果 dmesg 输出非常大,不建议全部交给 less。可以先过滤关键关键字:

dmesg | grep "usb" | less

或者先写入临时文件,分段查看。这也符合“先处理再查看”的原则。

8. 常见搜索问题和热词场景,统一给出判断思路

搜索词里出现了很多和 Linux 系统、命令相关的热门问题。这里结合 less 和 more,统一给出判断思路,避免在查看大文件时走弯路。

8.1 用 less 查看中文日志乱码怎么办

中文日志乱码有几种原因:

  • 文件编码不是 UTF-8
  • 终端编码不是 UTF-8
  • less 缺少对应的多字节字符支持

排查顺序:

  1. 先执行locale,看系统语言环境是否支持中文
  2. 再执行file /tmp/test.log,看文件编码类型
  3. 如果文件是 GBK 编码,使用iconv转换后查看
  4. 如果终端本身编码不对,尝试重新连接终端并设置 UTF-8

一个常见的组合命令:

iconv -f GBK -t UTF-8 /tmp/test.log | less

转换不影响源文件。对于特别大的 GBK 日志,可以考虑先转成一个临时文件,再用 less 打开。

8.2 less 和 cat 和 tail 到底怎么选

这是一个高频问题,直接给结论:

  • 内容少于一个屏幕,用 cat
  • 要实时看最新日志,用 tail -f
  • 要看末尾几十行,用 tail -n 100
  • 要翻阅历史日志并搜索,用 less
  • 要快速统计匹配次数,用 grep -c
  • 要提取指定行范围,用 sed -n
  • 系统环境极简,只有 more,用 more +num

千万不要养成“所有文件都用 cat 查看”的习惯。遇到大文件时,cat 会把内容全部推到终端,不仅浪费内存,还会让终端卡死或丢掉前面内容。

8.3 如何快速记下 less 的常用键

如果只需要记住一套操作,我会推荐这个顺序:

  1. 输入less 文件名打开文件
  2. 按/关键字搜索
  3. 按n或N切换匹配位置
  4. 按g回开头,按G去末尾
  5. 按q退出

这套流程覆盖了 80% 的日常需求。剩下的参数和技巧遇到具体场景再查即可,不需要一次全部背下来。

8.4 为什么有些命令在输入时出现 “ora-04013: number to cache must be less than one cycle” 这类报错

这个报错看起来和 less 无关,实际是其他场景中的参数约束错误。比如在某些数据库工具里,cache 参数设置超过了一个周期的范围。看到这种报错时,第一反应不是去查 less,而是确认当前命令属于哪个工具,再检查参数取值范围。

搜索热词里出现这类内容,说明很多人把“报错关键词”和“当前使用的命令”混在一起搜索。正确的排查习惯是:先看命令本身,再确认参数范围,不要盲目把错误归到系统命令上。对于 less 和 more,它们自身的报错一般很明确,比如unknown option或cannot open file。

8.5 关注 Linux 常用命令大全时,less 应该排在哪个位置

如果你在整理自己的 Linux 常用命令清单,建议把 less 放在“文件查看”分类里,和 cat、tail、head、grep 并列。它的重要性和 grep 差不多,尤其是处理日志和大文件时。

一个建议的“查看命令优先级”是:

  • 小文件:cat
  • 文件头部:head
  • 文件尾部:tail
  • 分页浏览:less
  • 分页浏览且环境极简:more
  • 查找关键字:grep
  • 提取行范围:sed

这样分类后,不需要死记硬背,每次使用都按场景选择。

9. 生产环境中的排查案例

用一个真实感强的案例来把 less 和 more 串起来。假设你接手一台 Linux 服务器,应用日志文件为/opt/myapp/logs/app.log,大小约 1.2 GB。应用报错时,你需要快速定位错误并判断影响范围。

第一个动作,不要直接 less 打开 1.2 GB 文件。先看文件大小和尾部内容:

ls -lh /opt/myapp/logs/app.log tail -n 50 /opt/myapp/logs/app.log

确认应用还在输出日志,再看错误关键字:

grep -n "ERROR" /opt/myapp/logs/app.log | tail -n 50

这样能拿到最近一段时间内错误行的大致行号。接下来使用 less 打开文件并跳转到某个行号附近,查看上下文:

less -N -S /opt/myapp/logs/app.log

进入 less 后,输入:

243210G

跳转到第 243210 行,查看错误前后的日志内容。使用?可以向前搜索最近的异常栈位置,使用/可以继续向后搜索。结合n和N快速翻看多个错误点。

如果错误信息很多,需要统计各类型错误数量,先退出 less,用正则统计:

grep -o "ERROR.*" /opt/myapp/logs/app.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

这个流程的核心顺序是:先看文件概况,再 grep 定位,再 less 细化上下文,最后用统计命令量化。少一步都可能浪费时间,多一步也可能过度操作。

这个案例也说明,less 在日志排查中的真正定位是“精确上下文阅读器”,而不是“万能排查工具”。它和 grep、tail、awk 各司其职,才能高效完成生产环境排障。

10. 最后一个实用清单,直接照着做

到这里,less 和 more 的核心内容已经完整覆盖。最后给一个可以直接照着做的清单,适合新手第一次完整练习,也适合有经验的人做知识回顾。

10.1 第一次练习清单

步骤命令或操作预期结果
1. 生成测试文件seq 1 300000 > /tmp/bigfile.txt生成 30 万行文本
2. 用 more 查看more /tmp/bigfile.txt分页显示,底部出现 --More--
3. 退出 more按 q回到终端
4. 用 less 查看less /tmp/bigfile.txt显示文件开头,进入交互界面
5. 向下翻页按空格每次翻一页
6. 向上翻页按 b回看上一页
7. 跳转到末尾按 G显示文件最后部分
8. 跳转到开头按 g显示文件开头
9. 搜索关键字输入/:然后输入100000定位到第一个 100000
10. 退出 less按 q回到终端

这次练习应该能让你建立“less 可以随时上下查看”的肌肉记忆。做完后,再练习带参数启动:

less -N -S /tmp/test.log

感受行号和长行截断的区别。

10.2 日常使用速查

需求命令
查看文件并显示行号less -N file
查看文件并截断长行less -S file
查看文件并搜索关键字less -p "ERROR" file
跟随日志增长打开 less 后按 F
打开多个文件less file1 file2
从第 100 行开始查看more +100 file
查看最近 100 行tail -n 100 file
匹配关键字并统计次数grep -c "ERROR" file
提取 100 到 200 行sed -n '100,200p' file
实时跟踪日志tail -f file

10.3 最后几条个人建议

less 和 more 并不是越复杂越好。很多用户只需要掌握 less 的基础翻页和搜索,就能覆盖绝大多数查看场景。真正要花时间练习的是“什么时候用 less,什么时候用 grep、tail、sed”,也就是在排查日志时如何组合使用这些工具。

如果只学一个命令,我建议学 less。如果只记一个参数,我建议记住-N,行号是后续定位和协作的基础。如果遇到 less 没有安装的环境,用 more 加+num也能临时应急。

我在实际工作中见过不少因为查看方式不当导致的效率问题:有人用 cat 打开 1 GB 日志导致终端卡死,有人用 vim 打开大文件等了好几分钟,还有人在 less 里反复翻页却忘了用搜索。这些问题的根源不是命令能力不足,而是没有先想清楚“我到底要从这个文件里得到什么”。带着问题去选择命令,才不会在大文件面前手足无措。

如果你现在手头正好有一个大日志文件,建议先按本地的系统环境走一遍上面的最小练习,把less -N、搜索、跳转和-S这几个关键操作试一遍。等这些操作变成肌肉记忆,再遇到大文件时,你就不会下意识去找 Vim 或者cat了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询