Linux大文件查看神器:less与more高效用法详解

发布时间:2026/9/3 4:40:23
Linux大文件查看神器:less与more高效用法详解 如果你在 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.txtseq会输出从 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 status200; 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进入后输入/status500然后按 n 逐个查看匹配行。这样日志中有多少处 500 错误以及它们附近的上下文都能快速浏览。如果你从头开始搜索建议先按g回到文件开头再输入/。因为 less 的搜索基准是当前行而不是每次默认从头开始。忘记这点可能会漏掉文件前面部分的匹配项。less 搜索还支持正则表达式。比如想找包含 error 或 exception 的行可以输入/error\|exception注意不同 less 版本对正则表达式的支持程度不同但大多数 Linux 发行版里的 less 都使用 POSIX 扩展正则。如果搜到了不想要的匹配按 n 继续找即可。3.2 跳转行号和直接查看文件末尾对于非常大的日志行号是一个很关键的定位依据。比如你通过 grep 知道某一类错误出现在第 152340 行可以直接在 less 中输入152340G这里的 G 相当于“跳转到指定行”。输入行号后按 Gless 会立刻跳到对应行。如果想直接看文件末尾新增了哪些内容按大写 G 跳到文件末尾。这在查看持续增长的日志时很常用。在 more 中跳转能力有限。虽然部分 more 实现支持显示当前行号但整体不如 less 灵活。3.3 显示行号以及带行号打开文件less 默认不显示行号。临时查看当前行号可以按或CtrlG状态栏会显示当前行数、总行数等信息。如果你希望打开后每一行前都显示行号可以这样启动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 -fless 支持跟随文件增长。在 less 中按F它会进入类似tail -f的跟随模式。文件有新增内容时less 会自动滚动到末尾实时显示新增日志。按CtrlC退出跟随模式回到普通浏览模式。这种用法很适合在排查线上问题时既想看历史日志又想观察新日志输出。比如less /var/log/application.log然后按F此时新的应用日志会不断出现在屏幕上。如果要继续查看历史部分按CtrlC停止跟随再用方向键翻回去。对比tail -fless 的优势是能随时切回历史上下文而不需要再开一个终端。劣势是如果日志增长极快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 中看到一段需要复制的内容最常用的方法是按v调用系统编辑器打开当前文件需要环境变量 EDITOR 已设置或者用鼠标选中终端内容直接复制或者先记录行号退出后使用 sed 提取比如在 less 中按vless 会调用默认编辑器打开当前文件并定位到当前行附近。如果你设置了EDITORvim那体验会接近直接在 Vim 中继续处理文件。没有设置时也可以通过export EDITORvim临时设定再启动 less。4.6 处理日志时less 和 grep、awk、sed 的配合less 适合人眼交互查看但机器化处理和批量提取时应该用 grep、awk、sed。一个典型的排查流程是先用 grep 从大日志中筛出关键错误行grep OutOfMemoryError /tmp/app.log /tmp/oom.txt再用 less -N 打开结果文件定位具体行号less -N /tmp/oom.txt如果要提取某一行附近的上下文可以用 grep 的-A和-B参数grep -n -A 10 -B 5 OutOfMemoryError /tmp/app.log | less或者用 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显示当前状态按或 CtrlG按这个表不是绝对标准不同 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.lognum从指定行开始显示more 100 /tmp/bigfile.txtmore 100这种从指定行开始查看的用法在 more 里是支持的。如果临时只能使用 more这个参数比手动翻页快许多。5.4 环境变量和别名建议less 的行为可以通过环境变量LESS改变。比如你想让 less 默认显示行号、忽略大小写可以这样设置export LESS-N -i如果希望永久生效可以把这行写入~/.bashrc或~/.zshrc然后执行source ~/.bashrc。但我不建议把-N做成全局默认。原因是有些文件打开时显示行号会占用左侧空间反而让阅读不习惯。更重要的是某些脚本或工具内部会调用 less此时环境变量会被继承可能导致输出格式和预期不一致。比如你用 less 查看man帮助页面时如果默认设置了-N所有帮助文档都会显示行号观感很差。更稳妥的做法是给常用场景设置别名alias lessnless -N alias lesssless -S alias lesslogless -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会搜不到。想忽略大小写可以启动时加-iless -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 个字符终端宽度 100less 会把它拆成 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 isnt a terminal”之类的错误。这时需要给 less 加参数less -R -F -X file.txt-R是保留颜色输出-F是文件内容少于一屏时直接退出-X是退出不清屏。这个组合在脚本里比较常见但它不是万能的。如果脚本完全是非交互执行的建议不要依赖 less直接把结果重定向到文件或直接 cat 输出。6.7 用 less 代替 grep 统计次数效率很低有些人在 less 里搜索关键字后靠不停按 n 来数匹配次数。文件小还可以文件大了效率极低。统计匹配次数应该用 grepgrep -c ERROR /tmp/test.log或者想看每个关键字出现次数可以配合 sort 和 uniqgrep -o ERROR\|WARN\|INFO /tmp/test.log | sort | uniq -cless 的价值在于阅读上下文在于人机交互浏览而不是做统计。很多低效操作源于没有分清楚“查看”和“处理”的边界。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 本身按这个顺序排查确认文件是不是超大文件比如几 GB且文件系统缓存没预热确认有没有用-S没有的话超长行渲染会拖慢响应确认终端类型和 SSH 连接网络比如用远程连接时屏幕刷新频率会受网络延迟影响确认是否加载了复杂的 lesskey 配置确认系统内存是否充足如果内存不足less 可能会频繁换页很多“卡顿”实际是文件系统缓存未加载或终端网络延迟导致不是 less 本身的问题。7. 嵌入式和国产系统场景下的额外注意点根据输入里的热词很多人可能是在嵌入式 Linux 或国产系统环境里学习 less 和 more。这些环境与常规 Ubuntu/CentOS 有些差异值得单独说。7.1 BusyBox 里的 less 和 more功能大幅缩水嵌入式 Linux 中经常使用 BusyBox 来提供命令集合。BusyBox 自带的 less 和 more 与完整版差异很大很多参数不支持。比如 BusyBox 的 less 可能不支持-N、-Smore 的行为也简化很多。遇到这种情况先执行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 21 | head -n 1确认版本和能力再决定脚本里是否依赖 less 高级参数。如果版本太低就尽量用 grep、sed、awk 完成自动化处理把 less 留给人工查看。7.4 嵌入式系统里查看 logcat 和内核日志嵌入式 Linux 中查看内核日志通常用dmesg查看应用日志可以用logcatAndroid 类系统或者直接读/var/log/messages。这些输出如果很长同样可以通过管道交给 lessdmesg | lesslogcat -d | less但要注意嵌入式系统内存有限如果 dmesg 输出非常大不建议全部交给 less。可以先过滤关键关键字dmesg | grep usb | less或者先写入临时文件分段查看。这也符合“先处理再查看”的原则。8. 常见搜索问题和热词场景统一给出判断思路搜索词里出现了很多和 Linux 系统、命令相关的热门问题。这里结合 less 和 more统一给出判断思路避免在查看大文件时走弯路。8.1 用 less 查看中文日志乱码怎么办中文日志乱码有几种原因文件编码不是 UTF-8终端编码不是 UTF-8less 缺少对应的多字节字符支持排查顺序先执行locale看系统语言环境是否支持中文再执行file /tmp/test.log看文件编码类型如果文件是 GBK 编码使用iconv转换后查看如果终端本身编码不对尝试重新连接终端并设置 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 的常用键如果只需要记住一套操作我会推荐这个顺序输入less 文件名打开文件按/关键字搜索按n或N切换匹配位置按g回开头按G去末尾按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定位到第一个 10000010. 退出 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 file10.3 最后几条个人建议less 和 more 并不是越复杂越好。很多用户只需要掌握 less 的基础翻页和搜索就能覆盖绝大多数查看场景。真正要花时间练习的是“什么时候用 less什么时候用 grep、tail、sed”也就是在排查日志时如何组合使用这些工具。如果只学一个命令我建议学 less。如果只记一个参数我建议记住-N行号是后续定位和协作的基础。如果遇到 less 没有安装的环境用 more 加num也能临时应急。我在实际工作中见过不少因为查看方式不当导致的效率问题有人用 cat 打开 1 GB 日志导致终端卡死有人用 vim 打开大文件等了好几分钟还有人在 less 里反复翻页却忘了用搜索。这些问题的根源不是命令能力不足而是没有先想清楚“我到底要从这个文件里得到什么”。带着问题去选择命令才不会在大文件面前手足无措。如果你现在手头正好有一个大日志文件建议先按本地的系统环境走一遍上面的最小练习把less -N、搜索、跳转和-S这几个关键操作试一遍。等这些操作变成肌肉记忆再遇到大文件时你就不会下意识去找 Vim 或者cat了。