[Linux] 如何使用 more 命令以及意想不到的用法 [文件合并]

大家好,
我是系统解决方案部的中野,我经常纠结于到底是买新的家用电器还是二手的。

现在,说到在 Linux 环境中查看文件的命令,
我们今天将解释一下“more”,

“more”命令的不熟悉
而熟悉它的人可能会想:“我不太用‘more’命令”,或者“与其他命令相比,它并不那么好用。”

“more”的基本用法本文解释了,然后“为什么它的使用率很低”以及“何时使用more”的观点和建议。提出了作者关于

首先给出结论,它在按照规范连接文件时很有用,而不是在日常使用中。

测试环境

  • Linux 环境
    “操作系统:Ubuntu 20.04.5 LTS(WSL2 环境)”

- Shell:Bash
- 将语言环境更改为日语

如何使用 more 命令

更多[选项] 文件名 *选项可以省略

使用方法很简单,只需像使用普通编辑器或查看器一样,指定文件名(可以使用相对路径或绝对路径)。

运行程序时,“将显示适合屏幕(控制台)大小的内容”。

more 和 less 是称为“分页器”的功能,它们以固定行数显示文件信息。

主要选项

+数字 显示指定行号对应的行。
-l 这会忽略分页符并显示文本。
通常情况下,当遇到换行符 (^L) 时,`more` 命令会在下一行停止,但此操作会禁用此功能。
-f 显示数据行而不是屏幕线条。

如果一行很长,它会在屏幕上换行并逐行显示,但屏幕上换行的多行会同时显示为一行。

-s 将连续的空白行显示为一行。
-d 操作过程中如果按下无效键,屏幕上将显示有关该操作的帮助信息,而不是发出哔声。
-数字 一次显示指定行数。

* 已使用 `man` 命令确认了 `more` 的选项和实际行为。
此处仅列出常用选项。

运行时行为

■ 当文件内容一次性能够显示在屏幕上时

$ more testfile test text *一个只有一行“test text”的示例文件

如果行数能够容纳在控制台中,则直接输出立即命令执行完成

如果它能在控制台中显示,那么这与使用不带任何选项的 cat 命令没有区别。

■ 当文件内容一次无法显示在屏幕上时(一般用途)

$ more testfile_long 1 2 3 4 5 6 7 8 9 10 --续--(40%) *示例文件,数字按顺序从 1 开始列出

如果行数超过了控制台显示区域的大小,则只会完整显示能够容纳的行数。

more 是一种交互式状态,在该状态下,上述状态正在运行,并且接受子命令。

在交互情境中,它的行为类似于 less 和 view。

按下回车键会逐行显示未显示的部分,按下空格键则会根据屏幕大小显示下一行。所有内容显示完毕后,该过程完成,并显示“$”(提示符),返回到执行前的状态。

操作方法(主要交互命令)

“k”可以是任意十进制数。

例如,如果您按下“z”,显示屏将向前显示屏幕上的行数,但如果您输入“1z”,它将“向前显示一行”。

嗯? 帮助功能。
显示子命令列表及说明。
空间 显示待处理的第 k 行。
默认值为屏幕上当前显示的行数。
z `k` 显示下一行。
默认值为当前屏幕行号。
参数会成为新的默认值。
回车(Enter) k 显示目的地。默认值为 1。参数将成为新的默认值。
s  跳至下一行(k 为空)。(此操作不滚动,因此目标位置将位于顶部。)
默认值为 1。
f 滚动屏幕 k 次。(这将逐屏滚动,因此整个显示内容都会改变。)
默认值为 1。
b 向后滚动屏幕 k 次。(这将逐屏滚动,因此整个显示内容都会改变。)
默认值为 1。 
= 显示当前行号。
/图案 在正则表达式中查找第 k 个匹配项。
默认值为 1。
q 结束。

如今使用 more 命令很困难

人们普遍存在一种误解,或者更确切地说,是缺乏认识,认为“更多”按钮可以用来恢复到之前的显示状态。

目前,您可以使用子命令“b”向后移动。(再次强调一下)

然而,在实施之后,规范立即规定“显示屏只能向前移动,不能向后移动”,因此,这种信息和误解似乎至今仍然存在。

您也可以使用“/”进行搜索,它具备所有必要的功能。

然而,还有一些其他规格令人担忧。

问题

・“当所有内容都显示完毕时,操作结束”

即使你把内容看完,然后再尝试从头开始看,操作也会结束。

“如果所有东西都同时显示出来,你就无法操作它,所以这和猫没什么区别。”

当您想在快速显示图像的同时进行搜索时,此规范很不方便。

・“我无法显示完整的行号”

没有像“cat -n”或“less -N”那样可以同时显示所有行号的选项。

鉴于这些特点,日常生活中几乎没有理由专门使用“更多”作为命令。

我认为这就是为什么人们普遍认为“少看一点或多看一点也无妨”的原因。

提示:“less”最初是后来通过改进“more”命令而创建的命令。

最初的“more”命令而创建的,最初的“more”命令只能向前显示,而不能向后显示为了改进“less”命令是后来。(摘自命令创建者的网站)

让我们来看一下 Less Man 手册页:

[解释]
less 是一个类似于 more(1) 的程序,但 它既可以在文件中向前移动,也可以向后移动。

此外,由于 less 启动时无需读取整个输入文件,因此对于大型输入文件,它的启动速度比 vi(1) 等文本编辑器更快。
由于 less 使用 termcap(或 terminfo,取决于系统),因此它可以在许多终端上运行。
但是,对硬拷贝终端的支持仍然有限。(在硬拷贝终端上,屏幕顶部应该显示的行会出现一个插入符号 (^)。)

这些命令基于 more 和 vi 两个命令。有些命令可以在十进制数(在以下描述中用 N 表示)之后使用。

less是一个类似于 more(1) 的程序,但 它既可以在文件中向前移动,也可以向后移动

它明确指出,“后退”是基于“更多”的假设(而“更多”不能用来后退)。

更多(1978)

man:创建于 1978 年的命令。*参见参考资料。less
:创建于 1983 年的命令。*参见参考资料。

1978 年,在 Linux 出现之前,在 UNIX 时代,“more”命令被创建出来,以改善当时的现状。

它是包括 UNIX 在内的操作系统正式采用的寻呼机(命令)。

在本文中,我们将尊重“少”的历史和历史存在,但同时也会秉持“少在现代社会更加方便和普遍”的理念进行写作。

more 命令的有用规范

“更多”有一些“更少”和“查看”所没有的有趣功能。

打开多个文件时,文件名也会输出到标准输出。

当您使用 less 或 view 打开多个文件时,显示屏幕会为每个文件切换。

例如,让我们同时打开两个文件 testA.conf 和 testB.conf,它们分别包含 1 到 10 的数字排列组合。

■ 当与较少

$ less testA.conf testB.conf 1 2 3 4 5 testA.conf(文件 1/2)(结束)- 下一个:testB.conf *显示在命令行中

:n 表示移动到下一个文件

6 7 8 9 10 testB.conf(文件 2/2)(结束)*显示在命令行中

使用 `less` 命令时,信息会直接输出到命令行。
*注意:`view` 命令使用相同的格式,只是措辞不同。

■ 当与更多

$ more testA.conf testB.conf :::::::::::::: testA.conf ::::::::::::::: 1 2 3 4 5 --继续--(下一个文件:testB.conf) *显示在命令行中 

使用子命令(回车键或空格键)来推进显示。

:::::::::::::: testA.conf ::::::::::::::: 1 2 3 4 5 :::::::::::::: testB.conf ::::::::::::::: 6 7 8 9 10

more 会在输出中包含文件名,并对其进行不同的处理。

你可能会想,“这有什么好处呢?”,但这一规范引出了下一个“用途”。

何时使用 more 命令

通常情况下可能不会这样,但在极少数情况下,您可能需要将多个配置文件合并到一个文件中。

- 为了便于管理、记录和存档,我希望将其保存在一个可以一次性搜索且易于保存的文件中,而不是保存为单独的配置文件。

我过去只遇到过一次上述情况。

这时,上述“更多”的规格就体现出来了。

■ 当与“更多”连接时

$ 更多 testA.conf testB.conf > testA+C.conf $ cat testA+C.conf ::::::::::::::: testA.conf ::::::::::::::: 1 2 3 4 5 :::::::::::::: testB.conf :::::::::::::: 6 7 8 9 10

由于文件名是按标准输出的,因此在连接文件时可以包含文件名。

反之,尝试使用 less 函数连接文件:

■ 当与较少

$ less testA.conf testB.conf > testA+C_less.conf $ cat testA+C_less.conf 1 2 3 4 5 6 7 8 9 10 

“只有内容是链接的,但无法看到文件之间的链接关系”,这并没有达到目的。

结论:我通常不使用它,但当你想要连接包含文件名在内的文件时,它很有用。

总之,“少即是多”的理念在日常生活中既方便又易于实践。

但是,当您想要在连接中包含文件名时,“更多”功能就派上用场了。

另一方面,如果你不使用“更多”

$ for file in testA.conf testB.conf; do echo "==== $file ====" >> combined.conf; cat $file >> combined.conf; done $ cat combined.conf ==== testA.conf ==== 1 2 3 4 5 ==== testB.conf ==== 6 7 8 9 10

真麻烦。我觉得打“更多”肯定比打这个容易。

“更多”功能与“查找”功能结合使用时尤其方便,所以我认为没有理由不使用它。

最后

我写这篇博客的原因是,我过去在处理包含文件名的字符串连接时遇到了困难。

当我能够使用 `more` 规范完美地实现它时,我深受感动。
“有时候,如果你理解了规范,就能轻松解决问题。”这是一次难忘的经历,我从中吸取了一个重要的教训:

希望这篇文章能为读者提供一些有用的信息。
感谢您读到这里。

参考资料

man “more” 页面(信息截至 more 版本 5.19)
-man-db/focal,now 2.9.1-1 amd64

`more` 命令的早期历史。(参见开发者网站:
https://danhalbert.org/more.html

Less *开发者网站:
https://www.greenwoodsoftware.com/less/index.html

more(1) - Arch 手册页
https://man.archlinux.org/man/more.1.en

如果您觉得这篇文章对您有帮助,请点个“赞”!
8
加载中...
8票,平均分:1.00/18
11,460
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

里面

以中级员工的身份加入 Beyond 公司,
目前在系统解决方案部门工作。
我持有 LPIC-3 304 和 AWS SAA 认证。