如何在 Linux 上使用 less 命令

less 命令允许你浏览文本文件,每次显示一屏内容。乍一看,这似乎是 Linux 中最简单的命令之一,但实际上它的功能远比表面看起来的要强大。

less 的历史

在 Linux 和 Unix 世界中,一切都有其渊源,这里并非双关。 less 程序起源于 more 程序,后者最初在 1978 年随 3.0 版本的 伯克利软件发行版 Unix (3.0BSD) 发布。 more 允许你逐页浏览文本文件,每次显示一屏内容。

需求是发明之母,more 的早期版本无法向后滚动文件,这促使 Mark Nudelman 开发 less 并解决了这个问题。这项工作始于 1983 年,第一个版本于 1985 年在他所在的公司之外发布。截至 2019 年 10 月,他仍然是 less 的维护者

难道有不使用 less 的 Linux 用户吗?即使他们没有直接使用它来浏览文本文件,他们很可能也使用了 man 命令。man 在后台调用 less 来显示手册页。

这是一个功能强大的命令,其中隐藏着许多技巧。

为何 lessmore

多年来,less 的功能不断增强。它拥有数量惊人的命令行选项和应用程序内快捷键。快速比较一下less 的手册页more 的手册页,你就会发现 less 绝对优于 more

虽然 more 已经克服了最初无法向后翻页的缺陷,但它仍然不能通过管道输入进行向后翻页。而 less 可以做到这一点。

凭借其在文件导航、查看多个文件、搜索文本、添加和返回书签以及处理管道输入方面的灵活性,less 完胜。选择 less 而不是 more

使用 less 读取文件

要在 less 中加载文件,只需在命令行中提供文件名:

less Dr-Jekyll-and-Mr-Hyde-001.txt

文件已加载并显示。文件的顶部(或“开头”)显示在终端窗口中。你可以使用鼠标滚轮在文本中前后滚动。

在键盘上,使用空格键或 Page Down 键在文本中向前移动一屏内容。

Page Up 键会在文件中向后移动(朝向文件的“开头”)。 Home 和 End 键将分别直接将你带到文本文件的开头和结尾。

文件名显示在屏幕的左下角。当你开始在文件中移动时,底线会被清除。它用于显示消息并输入命令。

按“q”退出 less

显示行号

要为文本文件的行编号,请使用 -N (行号) 选项。

less -N Dr-Jekyll-and-Mr-Hyde-001.txt

行号有助于你回到日志文件或其他非标准文本中的特定行或部分。

less 中搜索

要搜索文件的文本,请按“/”键,然后输入你的搜索词组。搜索区分大小写。你的搜索词组显示在屏幕的底部。点击“Enter”执行搜索。

在此示例中,搜索词是“Enfield”,你可以在屏幕底部看到。

搜索从当前页面到文本文件的末尾进行。要搜索整个文件,请在搜索前移至文件顶部。

如果没有匹配项,系统会通知你。如果找到匹配项,则屏幕将移动以显示找到的项目。

要查找下一个匹配项,请按“n”。要搜索上一个匹配项,请按“N”。

要从文件中的当前位置向后搜索到文件的开头,请按“?” 键并输入你的搜索词。要查找下一个匹配项,请按“n”。要搜索上一个匹配项,请按“N”。

请注意,当你向后搜索时,下一个匹配项(用“n”找到)是下一个更靠近文件顶部的项,上一个匹配项的“N”查找更接近文件底部的匹配项。换句话说,当你向后搜索时,“n”和“N”会反转它们的搜索方向。

打开带有搜索词的文件

你可以使用 -p(模式)选项使 less 搜索文本文件并找到第一个匹配项。然后它将显示包含匹配搜索项的页面,而不是文件的第一页。当然,除非在文件的第一页上找到了搜索项。

请注意,-p 和搜索词之间没有空格。

less -pEnfield Dr-Jekyll-and-Mr-Hyde-001.txt

文件显示时会突出显示第一个匹配的搜索词。

less 导航:最有用的按键

使用这些按键来移动和搜索文本文件。

向前移动一行:向下箭头、Enter、e 或 j
向后移动一行:向上箭头、y 或 k
前进一页:空格键或 Page Down
向后移动一页:Page Up 或 b
向右滚动:右箭头
向左滚动:左箭头
跳转到文件顶部:Home 或 g
跳转到文件末尾:End 或 G
跳转到特定行:键入行号,然后按“g”
跳转到文件的百分比位置:键入百分比,然后按“p”或“%”。 (你甚至可以输入十进制值,例如,要跳到文件的 27.2%,输入“27.2”,然后按“p”或“%”。为什么要使用小数?确实不知道。)
向前搜索:点击“/”并输入你的搜索,例如“/Jekyll”,然后按 Enter
向后搜索:点击“?” 并输入你的搜索,例如“/Hyde”,然后按 Enter
下一个匹配的搜索项:n
上一个匹配的搜索项:N
退出:q

挤压空白行

-s (挤压空白行) 选项会删除一系列空白行,并用单个空白行替换它们。

我们的示例文件中有一些连续的空行,让我们看看在使用 -s 选项时 less 是如何处理它们的:

less -s Dr-Jekyll-and-Mr-Hyde-001.txt

在每种情况下,所有双(或更多)空行都被替换为单个空行。

查看多个文件

less 可以为你打开多个文件。你可以在文件之间来回跳转。less 会记住你在每个文件中的位置。

less Dr-Jekyll-and-Mr-Hyde-001.txt Dr-Jekyll-and-Mr-Hyde-002.txt

文件被打开,并且显示第一个文件。你会看到当前正在查看的文件以及已加载的文件数量。这在下面突出显示。

要查看下一个文件,请按“:”键,然后按“n”。

屏幕将更改为显示第二个文件,并且底行的信息会更新以显示你正在查看第二个文件。这在下面突出显示。

要移至上一个文件,请键入“:”键,然后按“p”。

使用标记

less 可以让你放置标记,以便你可以轻松回到标记的段落。每个标记由一个字母表示。要在当前显示的行上放置一个标记,请按“m”键,然后点击你想使用的字母,例如“a”。

当你按下“m”键时,屏幕的底行会显示一个提示,等待你按下字母键。

只要你按下字母,提示就会被删除。

从文件中的任何其他位置,你可以通过按撇号(或单引号)“’”,然后按要返回的标记的字母轻松返回到标记。当你按下“’”键时,系统会提示你输入想要去的标记。

按下你要返回的标记的字母,文本文件的该部分将显示给你。

使用 less 的管道输入

less 可以显示以管道文本流形式出现的信息,就像它是一个文件一样容易。

dmesg 命令显示内核环形缓冲区消息。我们可以使用以下命令将 dmesg 的输出通过管道传输到 less 中:

dmesg | less

显示 dmesg 的输出。

你可以对管道输入进行分页和搜索,就像它是一个文件一样。要查看最新消息,请点击“结束”键以转到文件的底部。

当新消息到达时,你必须按住“结束”键以强制 less 显示文件的底部。这不是很方便。即使在添加新数据时也不总是显示文本的底部,请使用 +F (前进) 选项。请注意使用 + 而不是 - 作为选项标志。

dmesg | less +F

+ 选项标志告诉 less 将该选项视为你在 less 中使用了该命令。因此,如果你忘记使用 +F 选项,请在 less 中按“F”键。

less 显示文本的底部,显示来自 dmesg 的最新消息。它会显示一条消息,表明它正在等待更多数据。当出现更多内核消息时,屏幕会滚动,以便你始终可以看到最新消息。

你不能在此模式下滚动或翻页;它专门用于显示管道文本的底部。要退出此模式,请按 Ctrl+c,你将返回到通常的交互模式。

less 编辑文件

你可以用 less 来编辑文件 – 嗯,有点。此命令不能编辑文件,但是如果你在查看文件时键入 “v”,则该文件将被传输到你的默认编辑器。当你离开编辑器时,你将返回 less

less 中查看文件时按 “v”:

该文件被加载到默认编辑器中,在本例中是 nano

当你关闭编辑器时,你将返回 less

总结

尽管看起来有悖常理,但在这种情况下 less > more