“more”和“less”命令有什么区别?

下面两个命令有什么区别?
more file-name
less file-name

6more是一个用于逐屏浏览文本的过滤器。这个版本尤为简单。用户应该意识到less(1)提供了更多(1)的仿真功能并且具有广泛的增强功能。 - schrodingerscatcuriosity
4换句话说,less给我比more更多的选择?如果是这样的话,根本不需要考虑使用more了吗? - BlueSkies
1@BlueSkies 没错,你最好不要再烦恼了。 - Eliah Kagan
5@BlueSkies 如果是这样的话,你需要开始使用“大多数” ;) - Rinzwind
1还有一个双关语吗? - schrodingerscatcuriosity
15少即是多,但不及大多数。 - alexyorke
11改进后的寻呼机被明确命名为“less”,因为“少即是多”。 - chrylis -cautiouslyoptimistic-
与 pico 和 nano 编辑器相比较。 - user3445853
我使用Unix已经超过30年,从来没有听说过most!谢谢大家! - Henrique
多或少,少即是多。 - Arkku
2我经常使用'less'来浏览文件,以查找一些关于我想执行的shell命令的信息(比如查找主机名或最新版本等),然后按下'q'退出并输入命令。退出时,Less会清除屏幕,隐藏我正在查看的内容...这就是为什么我仍然在这种情况下使用more。 - RemcoGerlich
它们差不多是一样的。 - Lightness Races in Orbit
3个回答

更多是最古老的,较少是一种改进,而最多是在此基础上的改进。

简短比较:

  • 更多:前向导航和有限的后向导航。
  • 较少:既有前向导航又有后向导航,并且还具有搜索选项。您可以立即跳转到文件的开头和结尾。此外,您还可以切换到编辑器(如在vi或vim中打开文件)。当文件很大时,它比编辑器快得多。
  • 最多:具有更多较少的所有功能,但您还可以打开多个文件,在打开多个文件时逐个关闭文件,允许锁定和滚动打开的窗口,并允许拆分打开的窗口。
所有三个都使用 h 键来让您查看命令的按键绑定。

5另一个很棒的选择是:bat,自Ubuntu Eoan 19.10或Debian不稳定版本sid以来已在官方仓库中提供。 - Pablo Bianchi
@Pablo 一只蝙蝠不是一个寻呼机,它对此依赖较少。 - ash
@Josh 你是对的,更准确地说 batcat 的替代品,但整体体验就像是有着类固醇效果的 less - Pablo Bianchi
3@JörgWMittag 它必须与Linux(完整的操作系统,而不仅仅是内核)配套使用,因为Linux具有这些命令。否则就像有人说“我讨厌Windows,因为它有驱动器字母。”然后你说“我看不出驱动器字母与Windows有什么关系。驱动器字母来自CP/M。”- 毫无意义,对吧? - user253751
2@user253751:有一些Linux操作系统不使用GNU,因此没有less。有一些Linux操作系统不兼容Unix,因此没有more。我使用过的任何Linux操作系统默认都没有安装most。有些甚至根本没有它。相反,所有非Linux的Unix系统都有more。有一些GNU操作系统有less,但不使用Linux。有一些操作系统有most,但不使用Linux。例如,我使用的macOS与Linux无关,但我三者都有。 - Jörg W Mittag
1无论如何,这不是GNU/Linux。它是Apache/Mozilla/KDE/Wayland/OpenJDK/Eclipse/.../GNU/Linux。 - user253751
1@user253751: 我不知道这一点,也从未听过有人这样使用。无论如何,这并没有什么区别,因为most不是GNU的一部分,所以即使出于某种奇怪的原因,你选择重新定义"Linux"为"GNU/Linux",那么"most"与Linux无关的论点仍然成立。我一直认为"Linux"意味着"Linux","GNU"意味着"GNU",而"GNU/Linux"意味着"GNU/Linux"。如果同时将"Linux"和"GNU/Linux"都解释为"GNU/Linux",而"Linux"却不表示"Linux",那会非常令人困惑。 - Jörg W Mittag
@JörgWMittag 嗯,我觉得把“GNU/Linux”解释为“GNU/Linux”是很令人困惑的。 - user253751
大部分对我来说都是新的!很不错。 - Pogrindis

笑话
有一个由三个单词组成的老笑话:“少即是多”。(这就是Guillermo Chamorro在问题中第二条评论所引用的“双关语”)。也许人们喜欢这个笑话的原因之一是,这个陈述可以用三种不同的方式理解,因此没有清晰地表明哪种方式是正确的。然而,这三种方式都至少在某些操作系统上是准确的。(第二点可能不适用于Ubuntu,我知道这是一个以Ubuntu为重点的网站。但是,Ubuntu源自Debian,后者有从其他Unix和Unix-ish系统借鉴和分享思想的悠久历史。因此,了解其他操作系统的做法并不是坏事。)
以下是对这些内容的澄清:
  1. 有一个名为LESS_IS_MORE的变量。
    • less命令支持一个名为LESS_IS_MORE的shell/环境变量。默认情况下,less命令的行为与旧的more命令相似,但如果less命令发现该变量被设置为1(数字一),则less命令将提供更少的功能,以增加与名为more的旧分页命令的兼容性。
    • 这不是特定于Ubuntu的,所有平台上的less都支持此功能。这在less(1)(less的“man页面”)中提到。
  2. 作为less的本质不可争辩的事实(在某些操作系统上)
    • less命令支持许多程序在类Unix环境中使用的行为,即检查它运行时的文件名。如果运行less程序的命令行以more作为文件名开头,则less程序将以增加与旧的more命令的兼容性的方式运行,类似于运行LESS_IS_MORE命令的效果。
    • 某些操作系统实际上依赖于此功能,并且没有包含一个名为more的单独程序。嗯,准确地说,有一个可用的名为more的命令(强烈建议用于与脚本和一些常见用户行为的兼容性),但是lessmore命令都是指向相同可执行代码位流的“硬链接”。因此,当运行名为less的命令时,操作系统实际上运行的可执行代码与运行名为more的命令时运行的可执行代码相同的。(这甚至不仅仅是运行相同代码的情况。从数据存储设备的完全相同位置读取数据,所以它们使用的确实是完全相同的代码。)因此,less就是more的说法是一个字面(事实性、非主观、可证明的)真理,因为这两个程序实际上都使用了完全相同的可执行代码。(但是,根据使用的命令不同,程序的行为可能会有所不同。)
    • 如果有人说“less is more,literally.”,那么这个人可能是想澄清less命令和more命令共享相同的可执行位。这可以通过“硬链接”(使用ln实现)最有效地完成,但也可以通过“符号链接”(使用ln -s实现)或者通过复制可执行文件的位的副本(可以使用cp轻松实现)来实现。
  3. 作为一个简单的英语陈述
    • 这是一个带有观点的陈述(很多人都同意),说明less命令具有更多的好功能,因此less命令比旧的、更传统的分页命令
      在这个回答中,我确实努力使对命令的所有引用都明显标出。然而,体验这个笑话最好的方式是口头表达,因为这样增加了一些模糊性。口头上说
      “LESS_IS_MORE”
      或者“less is more”
      或者“less is MORE!”
      可能以完全相同的方式发音,所以如果声调没有清楚地表明对任何特定单词的强调,那么仅听到这三个单词并不能真正指示具体哪个准确的陈述(如果有)被引用得比其他陈述更多。
      开玩笑的话,这也可以用作衡量某人对Unix程序的熟悉程度的一种方法。许多人在使用命令之前不会阅读每个命令的“man页面”(尤其是在学习如何有效使用第一个Unix平台上最基本的命令时),因此当完全解释这个笑话时,许多人才会了解LESS_IS_MORE变量。因此,口头上讲这个笑话可以检查收件人似乎有多少认可或困惑。
      (如果对方看起来有点困惑,那可能是一个好时机来帮助教育他们关于这个陈述的多个方面。根据前面的一两点,他们会对常见命令的行为有更多了解。如果他们记得这个笑话,那么他们就能记住最后一点,这有助于他们记住“less”命令的存在,很多人对此更加满意,并记住哪个命令通常在许多平台上提供更好的体验。)

      DOS兼容性

      “more”命令有一个值得一提的方面,这可能使它(至少在某些人的观点中)比“less”命令更好。
      很多Unix(-ish)系统都内置了一个名为more的命令和一个名为less的命令,作为操作系统的一部分安装在其中。(另一个答案中提到了进一步构建在less命令之上的most命令,但是它预装在的系统要少得多。所以,首先需要安装该程序。)然而,more命令也可能预装在更多的计算机上,包括那些通常不被认为是主要基于Unix兼容性设计的计算机。
      在MS-DOS和类似/兼容的平台上,包括现代的Microsoft Windows,以下命令将与Unix完全相同:
      • more < filename.txt
      您还可以将内容通过管道传递给more。一个典型的演示方法是显示一个命令来显示文本文件的内容。在Unix中,通常使用cat来完成这个任务。MS-DOS没有cat命令,而是使用type命令。(Unix有一个单独的type命令,功能完全不同。)所以:
      • Unix: cat file.txt | more
      • DOS: 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命令的优势,足以使他们更喜欢习惯于运行该命令。

      杂项

      我并不打算在这里提供完整的答案,因为这样做只会与其他答案重复。相反,我决定只包含其他地方没有看到的信息。因此,这个答案旨在补充其他答案。希望你喜欢这里呈现的信息,但一定要查看其他答案。两个先前发布的答案也提供了额外的信息。

这应该是我在这个SE上读过的最好的答案之一。 - Jesús Franco

less允许您向上和向下导航。

这是最重要的区别,但还有许多其他区别。 less提供了比more更多的功能。您可以在less中按下H键,它将显示其简化的帮助信息,解释如何使用其各种交互功能。

最常用的是使用空格键Page Down向下滚动一页文本,使用B键或Page Up向上滚动一页文本。所有四个箭头键都可以使用(尽管上下箭头键最常用)。

less还在性能、资源使用和适应异常终端方面与more不同。正如man less所说:

Less是一个类似于more的程序(1),但它具有更多的功能。与文本编辑器vi(1)相比,Less不需要在开始之前读取整个输入文件,因此对于大型输入文件,它启动更快。Less使用termcap(或某些系统上的terminfo),因此可以在各种终端上运行。甚至还有对硬拷贝终端的有限支持。(在硬拷贝终端上,应该打印在屏幕顶部的行以插入符号为前缀。)

命令基于morevi。命令可以由描述下面的十进制数N前导。如指示,一些命令使用了这个数字。

我一直在比较`less`和传统的`more`实现方式。在Ubuntu中,`more`是这样一个实现方式。然而,如果你调用`less`但使用`more`的名字 - 例如,如果你创建一个指向`less`的symlink或hardlink并以此运行它 - 那么它的行为就会不同,外观上类似于`more`,但允许你在文档中同时向上和向下移动。

4还有一些方便的操作:按下 G 可以跳转到文件底部,然后按下 F 可以继续跟踪新内容(类似于 tail -f)。按下 Ctrl-C 停止跟踪,并且您可以再次浏览文件。 - glenn jackman
按下 H 键弹出的简化帮助也是可搜索的。 - BlueSkies