在 Linux 环境下查看文本文件,less 和 more 是两个最基础也最容易被混用的分页器。它们都能将长内容分屏展示,但在文件读取方式、交互能力和资源占用上存在本质区别。很多人在排查问题时随手敲下 more,却在需要回看时卡住,其实就是没搞清楚两者的设计定位。

一、文件读取机制的差异
more 命令诞生较早,其核心逻辑是单向流式读取。它从文件头部开始,按屏幕页面向前输出,且通常受限于一次映射的缓冲区大小,在读取极大文件时可能出现加载停顿。more 不会把整个文件一次性读入内存,但也不支持自由回退到已释放的页。
less 则采用按需缓冲的策略,它并不在打开时加载全部内容,而是根据用户滚动方向动态读取对应块。由于 less 维护了可前后移动的视图窗口,即使面对几十 GB 的日志也能快速响应。也正因如此,less 在打开大文件时往往比某些编辑器和 more 更轻量。
# 使用 more 查看大日志,只能一路空格向前 more /var/log/huge_app.log # 使用 less 打开同样文件,可随意上下浏览 less /var/log/huge_app.log
二、交互操作与翻页能力
more 的交互较为原始,基本只能通过空格翻页、回车单行前进,且不支持向后滚动。在某些系统实现中,more 甚至会在文件结束前强制退出。这种单向性导致用户在错过关键信息后只能重新运行命令并配合搜索。
less 提供了完整的 vim 风格快捷键:可以使用上下箭头、PageUp、PageDown、g 跳首行、G 跳末行,还能用 / 向前搜索、? 向后搜索、n 与 N 切换匹配项。下面列出常用按键对照,方便日常切换工具时参考。
| 操作 | more | less |
|---|---|---|
| 向前翻页 | 空格 | 空格或 PageDown |
| 向后翻页 | 不支持 | PageUp 或 b |
| 搜索 | 仅 / 向前 | / 向前、? 向后 |
| 跳到末尾 | 自动退出 | G |
三、搜索与内容定位能力
more 的搜索功能十分薄弱,多数版本只支持简单的子串匹配,且搜索起点只能是当前已读区域,无法回溯未显示部分。若要在 more 中找前面的报错,往往要退出再用 grep 过滤。
less 的搜索不仅支持正则表达式,还会高亮所有命中结果,并允许在搜索后通过 n 和 N 在匹配间往返。对于运维人员,这意味着在百兆日志里定位异常栈变得非常直接。以下示例展示在 less 中搜索错误并高亮:
# 打开文件后输入以下交互指令 /ERROR # 向前查找 ERROR n # 下一个匹配 N # 上一个匹配 ?WARN # 向后查找 WARN
四、屏幕处理与退出表现
more 在退出后经常把文件内容留在终端上,需要手动清屏才能恢复提示符环境。这在自动化脚本里可能造成输出混乱,尤其是连续调用 more 时。
less 默认在退出时清除自身绘制的页面,将终端还原到调用前的状态。该特性由终端控制序列实现,对脚本友好。如果希望 less 像 more 一样保留内容,可加 -X 参数关闭清屏。
# 保留屏幕内容的 less 调用 less -X /etc/passwd # 等价更传统的 more 行为 more /etc/passwd
五、适用场景建议
当只需要快速从头扫一遍短文本、或在极简环境里确保命令存在,more 依然可用。它的代码体积小,某些嵌入式系统只预装了 more。但在服务器运维、日志分析、代码审阅等需要回看和复杂搜索的场景,less 几乎是默认选择。
从性能角度,less 的延迟加载避免了大文件占满内存;从效率角度,其双向浏览减少重复执行。建议在个人环境变量中将默认分页器设为 less,例如 export PAGER=less,这样 man 手册也会用更顺手的界面展示。
# 将以下行加入 ~/.bashrc export PAGER=less export LESS='-R' # 支持彩色输出
六、常见误区澄清
有人认为 less 因为名字带 less 所以功能更少,这是典型的字面误解。less 作者取意“less is more”,实际它是 more 的超集。另一个误区是用 pipe 给 more 传数据时误以为能后退,其实标准输入模式下两者都受流限制,less 也只能在缓冲范围内回看。
理解这些区别后,可根据任务灵活选用。简单向前浏览用 more 无妨,复杂排查请直接 less。掌握按键与参数,能显著降低命令行下的认知负担。
小结:more 是单向流式分页器,less 是双向缓冲分页器;前者轻量但弱交互,后者功能全且适合大文件。