[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 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”命令而创建的命令。
“Less”命令是后来开发的,目的是改进最初的“more”命令,后者只能向前显示,而不能向后显示。(摘自命令创建者的网站)
让我们来看一下 Less Man 手册页:
DESCRIPTION
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)(结束)*显示在命令行中
简而言之,信息直接输出到命令行。
* 从视图上看,格式相同,只是措辞不同。
■ 当与更多
$ 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
真麻烦。我觉得打“更多”肯定比打这个容易。
“更多”功能与“查找”功能结合使用时尤其方便,所以我认为没有理由不使用它。
最后
我写这篇博客的原因是,我过去在处理包含文件名的字符串连接时遇到了困难。
其中,最令我印象深刻的是,当我运用更多规范参数并最终获得令人满意的结果时。
这对我来说是一次非常宝贵的学习经历: “如果你理解了规范参数,有时就能轻松解决问题。”
我希望这篇文章能为阅读它的人提供一些有用的知识。
感谢您阅读本文。
参考资料
man “more” 页面(更多 5.19 版本信息)
-man-db/focal,现在版本为 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
7