平时查看大日志文件时,用 cat 直接输出会刷屏,找关键信息很麻烦。more 命令就是专门解决这个问题的------它让文本查看变得可控,一页一页地翻,不会错过重要内容。
摘要 :
more是 Linux 中最基础的分页器命令,用于逐屏查看长文本文件。本文从基本用法出发,梳理了常用操作快捷键、5 个实战技巧(指定行查看、管道配合、搜索定位、限制行数、清屏显示),对比了more与less的适用场景,并浅析了其分页实现原理。最后总结了常见坑点与现代替代工具,帮助读者高效掌握这个轻量级文本查看利器。
more 命令的本质
more 是一个分页器(pager) ,核心功能是把长文本按屏幕高度分页显示。和 less 相比,它更轻量,几乎所有 Linux 发行版都预装。
基本用法很简单:
bash
more /var/log/syslog
按空格翻页,按 q 退出。就这么简单。
常用操作速查
进入 more 后,这些按键最常用:
| 按键 | 功能 |
|---|---|
Space 或 f |
向下翻一页 |
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 的核心逻辑不复杂:
- 获取终端尺寸 :通过
ioctl获取屏幕高度(行数) - 计算分页:文件总行数 ÷ 屏幕高度 = 页数
- 缓冲输出:每次只读取并显示一屏内容
- 等待用户输入:根据按键决定显示下一页或退出
伪代码示意:
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从指定行开始- 配合管道过滤后分页查看
- 了解
morevsless的适用场景
如果你需要一个在线 Linux 命令参考工具 ,可以试试 JsonKit Linux 命令大全,里面整理了常用命令的用法和示例。
