Linux more 命令详解:从基础分页到高级文本查看技巧

平时查看大日志文件时,用 cat 直接输出会刷屏,找关键信息很麻烦。more 命令就是专门解决这个问题的------它让文本查看变得可控,一页一页地翻,不会错过重要内容。

摘要more 是 Linux 中最基础的分页器命令,用于逐屏查看长文本文件。本文从基本用法出发,梳理了常用操作快捷键、5 个实战技巧(指定行查看、管道配合、搜索定位、限制行数、清屏显示),对比了 moreless 的适用场景,并浅析了其分页实现原理。最后总结了常见坑点与现代替代工具,帮助读者高效掌握这个轻量级文本查看利器。

more 命令的本质

more 是一个分页器(pager) ,核心功能是把长文本按屏幕高度分页显示。和 less 相比,它更轻量,几乎所有 Linux 发行版都预装。

基本用法很简单:

bash 复制代码
more /var/log/syslog

按空格翻页,按 q 退出。就这么简单。

常用操作速查

进入 more 后,这些按键最常用:

按键 功能
Spacef 向下翻一页
Enter 向下翻一行
b 向上翻一页(部分版本支持)
/pattern 向下搜索
n 重复上次搜索
= 显示当前行号
:f 显示当前文件名和行号
q 退出

实战技巧

1. 从指定行开始查看

bash 复制代码
more +100 /var/log/nginx/access.log

直接从第 100 行开始,跳过前面的内容。

2. 配合管道使用

bash 复制代码
cat large-file.txt | more
# 或者更简洁的
large-file.txt | more

其实 more 设计之初就是为了配合管道:

bash 复制代码
ps aux | more
dmesg | more
journalctl -u nginx | more

3. 搜索高亮定位

bash 复制代码
more +/error /var/log/app.log

从第一个包含 "error" 的行开始显示,快速定位问题。

进入后按 /timeout 继续搜索下一个匹配项,按 n 重复搜索。

4. 限制每屏行数

bash 复制代码
more -10 /etc/passwd

每屏只显示 10 行,适合小窗口或需要精细查看的场景。

5. 清除屏幕后显示

bash 复制代码
more -c file.txt

-c 选项会在显示前清屏,避免之前的内容干扰阅读。

more vs less:该怎么选?

很多人纠结用 more 还是 less。简单说:

用 more 的场景:

  • 只需要向前翻页,不需要回退
  • 追求极致轻量(嵌入式环境)
  • 简单的日志查看

用 less 的场景:

  • 需要前后自由滚动
  • 需要更强大的搜索功能
  • 查看压缩文件(less 支持 zless

代码对比:

bash 复制代码
# more - 只能向下,不能回退
more /var/log/syslog
# 按空格向下,按 q 退出

# less - 可以上下滚动
less /var/log/syslog
# 支持 ↑↓ 方向键,PageUp/PageDown,/ 搜索,? 反向搜索

实现原理浅析

more 的核心逻辑不复杂:

  1. 获取终端尺寸 :通过 ioctl 获取屏幕高度(行数)
  2. 计算分页:文件总行数 ÷ 屏幕高度 = 页数
  3. 缓冲输出:每次只读取并显示一屏内容
  4. 等待用户输入:根据按键决定显示下一页或退出

伪代码示意:

bash 复制代码
void display_file(const char *filename) {
    int lines_per_page = get_terminal_height();
    FILE *fp = fopen(filename, "r");
    char line[1024];
    int line_count = 0;
    
    while (fgets(line, sizeof(line), fp)) {
        printf("%s", line);
        line_count++;
        
        if (line_count >= lines_per_page) {
            // 显示 "--More--(xx%)" 提示
            printf("--More--(%d%%)", (ftell(fp) * 100) / file_size);
            
            // 等待用户按键
            char cmd = getchar();
            if (cmd == 'q') break;
            if (cmd == ' ') line_count = 0;  // 下一页
            if (cmd == '\n') line_count--;   // 下一行
        }
    }
    fclose(fp);
}

常见坑点

1. 二进制文件乱码

bash 复制代码
more /bin/ls  # 会显示乱码,甚至破坏终端

解决:用 -d 选项或直接用 file 命令判断文件类型。

2. 管道中的交互问题

bash 复制代码
# 错误:管道中的 more 无法交互
cat file.txt | ssh user@host "more"

# 正确:使用 -d 选项或改用 cat
cat file.txt | ssh user@host "more -d"

3. 大文件性能

more 没有缓存机制,每次翻页都要重新读取文件。对于 GB 级日志,建议先用 head/tail 截取:

bash 复制代码
tail -n 10000 huge.log | more

现代替代方案

虽然 more 经典,但现代工具提供了更好的体验:

bash 复制代码
# bat - 语法高亮 + 分页
bat app.js

# most - 支持多窗口
most config.yaml

# nvim - 用编辑器查看
nvim -R /var/log/syslog

不过 more 的优势在于无处不在------任何 Unix-like 系统都有它,不需要安装。

总结

more 命令虽然简单,但掌握这些技巧能让日常运维效率提升不少:

  • more +/pattern file 快速定位
  • more +N file 从指定行开始
  • 配合管道过滤后分页查看
  • 了解 more vs less 的适用场景

如果你需要一个在线 Linux 命令参考工具 ,可以试试 JsonKit Linux 命令大全,里面整理了常用命令的用法和示例。


相关工具:Linux less 分页器 | Linux cat 文件查看 | Linux head/tail 日志查看

相关推荐
相思难忘成疾2 小时前
SELinux 强制访问控制安全策略验证
linux·运维·服务器·网络·memcached
j7~2 小时前
【Linux操作系统】基础IO文件系统(理解硬件,理解文件系统,Inode,软硬链接)
linux·运维·服务器·磁盘·文件系统·inode·软硬件链接
Donk_672 小时前
Shell 数组实践
linux·算法·bash
XMAIPC_Robot2 小时前
电力设备RK3568/RK3576+FPGA,多系统混合部署Linux+RTOS RT-THREAD,强实时性
linux·运维·fpga开发
aashuii2 小时前
linux测试lsquic
linux·运维·服务器
认真的薛薛2 小时前
Linux运维:Jenkins部署
linux·运维·jenkins
叶半欲缺2 小时前
密码忘记了吗?Linux单用户模式下修改密码!
linux·运维·服务器
handler013 小时前
【Linux 网络】一文读懂 HTTP 协议
linux·c语言·网络·c++·笔记·网络协议·http