下面两个命令有什么区别?
more file-name
less file-name
答案1
答案2
笑话
有一个老笑话,由三个词组成:“少即是多”。(这是 guillermo chamorro 对这个问题的第二条评论中提到的“双关语”。)人们如此喜欢这个笑话的原因之一可能是,这句话可以用三种不同的方式来理解,因此无法明确到底是哪种方式。然而,这三种方式都是准确的,至少在某些操作系统上是如此。(第 2 点可能不适用于 Ubuntu,我确实知道这是一个以 Ubuntu 为中心的网站。然而,Ubuntu 源自 Debian,它有着从其他 Unix 和 Unix-ish 系统汲取思想并与之共享的悠久历史。因此,了解其他操作系统的功能并不是一件坏事。)- 有一个名为 LESS_IS_MORE 的变量
- 作为 less 本质的不争事实(在某些操作系统上)
- 作为一个简单的英语语句
为了澄清这些:
- 有一个名为 的变量
LESS_IS_MORE
。- 该
less
命令支持名为 的 shell/环境变量LESS_IS_MORE
。默认情况下,该less
命令的行为与旧命令非常相似,但如果该命令发现此变量的值设置为 1(数字一),则该命令将提供较少的功能,以增加与名为 的旧寻呼机命令的兼容性。more
less
less
more
- 这不是 Ubuntu 独有的,并且支持
less
所有平台。less
(1) (less
的“手册页”),标题为“兼容性more
”的部分。
- 该
- 作为 less 本质的不争事实(在某些操作系统上)
- 该
less
命令支持许多类 Unix 环境中的程序使用的行为,即检查其以哪个文件名运行的行为。如果运行该less
程序的命令行以文件名开头more
,则命名的程序less
将执行的操作是提高与旧more
命令的兼容性,类似于LESS_IS_MORE
运行该命令时的操作。 - 一些操作系统实际上依赖于此功能,而没有费心包含名为的单独程序
more
。好吧,要清楚的是,有一个可用的命令名为more
(强烈建议使用,以兼容脚本和一些相当常见的用户行为),但less
和more
命令都是指向同一可执行代码流的“硬链接”。因此,操作系统在运行名为的命令时运行的可执行代码less
实际上是与操作系统在运行名为 的命令时运行的可执行代码相同more
。(这甚至不仅仅是运行代码的相同副本的情况。从字面上看,相同的位是通过从数据存储设备的完全相同的位置读取来加载的,因此它实际上是相同的代码。)因此,陈述 是less
指more
字面上的(事实的、非主观的、可证明的)事实,因为这些实际上是完全相同的程序,因为这两个程序实际上都使用完全相同的可执行代码。(但是,根据用于运行程序的命令,程序的行为可能会有所不同。) - 如果有人说“确实
less
是more
”,那么这个人可能想澄清命令less
和more
命令共享相同的可执行位。这可以ln
最有效地作为“硬链接”(使用实现)来实现,但也可以使用“符号链接”(使用实现ln -s
)来实现,或者通过复制可执行文件的位(可以使用轻松实现cp
)。
- 该
- 作为一个简单的英语语句
- 这是一个主观的陈述(很多人都同意),指出该
less
命令具有更多不错的功能,因此该less
命令比更老、更传统的分页命令(恰好名为more
)提供的体验更好。由于使用名为 的命令的体验less
明显更好,人们觉得用“更多!”来描述这种更好的体验是合适的。
- 这是一个主观的陈述(很多人都同意),指出该
在整个回答中,我确实努力使所有对命令的引用都明显地被标记出来。然而,体验这个笑话的最佳方式是通过口头表达,因为这会增加一些歧义。口头表达,说
- “少即是多”
- 或者 ”
less
是more
” less
或“更多的“!”
可能全部以完全相同的方式发音,因此,如果语音语调没有清楚地表明对任何特定单词有任何特别的强调,那么仅仅听到这三个单词并不能真正表明究竟哪一个准确的陈述(如果有的话)比其他陈述更能被引用。
除了幽默之外,这也可以用作衡量某人对这个 Unix 命令程序的熟悉程度的一种方式。许多人在使用命令之前不会阅读每个命令的“手册页”(尤其是在学习如何在他们使用的第一个 Unix 平台上有效使用一些最基本的命令时),因此许多人最终在充分解释这个笑话后才了解 LESS_IS_MORE 变量。因此,口头说出这个笑话可以检查接收者似乎有多少认可或困惑。
(如果对方看起来有点困惑,这可能表明这是个好时机,可以帮助对方了解该语句的多个方面。基于第一点或第二点,他们最终会对常见命令的行为有更多的了解。如果他们记住了这个笑话,那么他们就可以记住最后一点,这有助于他们记住许多人更喜欢的命令的存在less
,并记住哪个命令通常在许多平台上提供更好的体验。)
DOS 兼容性
“ ”命令有一个方面more
值得一提,这可能使它看起来比“ less
”命令更好(至少在某些人看来)。
非常多的 Unix(-ish) 系统都带有一个名为的命令more
和一个名为的命令less
,它们是内置的,作为操作系统的一部分安装的。(另一个答案提到了most
进一步构建在该less
命令之上的名为的命令,但它预装在极少的系统上。因此,需要先安装该程序。)但是,该more
命令也可能预装在大量计算机上,包括通常不被认为主要围绕 Unix 兼容性设计的计算机。
在 MS-DOS 和类似/兼容平台(包括现代 Microsoft Windows)中,以下操作将与在 Unix 中完全相同地工作:
more < filename.txt
您还可以通过管道输入more
。 演示此操作的典型方法是显示一个显示文本文件内容的命令。 在 Unix 中,这通常使用 来完成cat
。 MS-DOS 没有cat
命令,而是使用type
。 (Unix 有一个单独的type
命令,它执行的操作完全不同。)因此:
- Unix:
cat file.txt | more
- 注意事项:
type file.txt | more
(请记住,当我提到 DOS 时,它也适用于现代 Microsoft Windows,更不用说其他系统(如 OS/2)。因此,这些 DOS 参考资料与 Microsoft Windows 一样与当今的现代世界息息相关。)
作为一个更现代的例子,以下内容适用于现代 Microsoft Windows 系统,也适用于许多 Unix 系统:
netstat -na | more
在现代版本中,您还可以在命令行中指定一个或多个文件名。如果这样做,将显示第一个文件,然后显示下一个文件。
more fileone.txt filetwo.txt
虽然该less
命令可用于 MS-DOS、Microsoft Windows 和其他操作系统,但该程序通常不是预先捆绑的。因此,less
除非付出一些努力来安装系统,否则该命令不可用。如果您踏入一个您以前从未去过的计算机实验室,那么很有可能该命令随时more
可用,而该命令less
通常仅在 Unix 平台上可用。对于某些人来说,这可能是该命令的一个优势,more
这足以让他们更愿意习惯运行该命令。
杂项
我不会尝试在这里提供完整的答案,因为这样做只会与其他答案重复。相反,我决定只包含我在其他地方没有看到的信息。所以这个答案旨在补充其他一些答案。我希望你喜欢这里提供的信息,但一定要看看其他答案。两个预先存在的答案(在此之前发布)也提供了额外的信息。
答案3
less
可让您向上和向下导航。
这是最重要的区别,但还有许多其他区别。less
提供了除 之外的众多功能more
。您可以按下H,less
它会显示其简略帮助,解释如何使用其各种交互功能。
最常见的是Spacebar或Page Down向下移动一屏文本,B和Page Up向上移动一屏文本。所有四个箭头键都可以使用(尽管向上和向下箭头最常用)。
less
more
在性能、资源使用和适应不寻常的终端方面也有所不同。man less
说:
较少的是类似于更多的(1),但它还有更多的功能。较少的在启动之前不必读取整个输入文件,因此对于较大的输入文件,它的启动速度比文本编辑器更快六(1). Less 使用 termcap(或某些系统上的 terminfo),因此它可以在各种终端上运行。它甚至对硬拷贝终端也提供有限的支持。(在硬拷贝终端上,应打印在屏幕顶部的行以插入符号为前缀。)
命令基于更多的和六。命令前面可以有一个十进制数,在下面的描述中称为 N。如所示,某些命令会使用该数字。
我一直less
在与 的传统实现进行比较more
。在 Ubuntu 中,more
就是这样的实现。但是,如果您less
以名称调用 但more
—— 如果您创建符号链接或硬链接以less
调用more
并运行它,则会发生这种情况 —— 那么它的行为会有所不同,more
在外观上相似,但允许您在文档中上下移动。