Bootstrap

Linux 命令 less 全知全会

摘要

对 less 的各种用法做一次整理,顺便也可以当作参考手册。

引子

是一个 Linux 命令行实用程序,用于显示文件内容,它支持管道输入,所以能够被用于接收前一命令的标准输出病进行全屏展示。

是 的增强版本,它具有更全面的全文件导航能力,以及全文搜索能力。 在大文件打开方面有很好的优化,在即时显示、快速加载等方面性能突出。 还支持一次性打开多个文件,它将会逐一地显示这些文件的内容。

取名为 也因为一句名人名言:。这句名言已经哲学化了。

基本使用

less 的基本使用方法有两种,一是打开一个或多个文件:

less /var/log/messages

二是作为管道操作的末端:

ps aux|less

在管理操作时,可能会常常用到 等价的实时刷新模式:

dmsg|less +F

被嵌入地、隐含地使用

在很多场所中 less 被通过 PAGER 环境变量而悄悄地使用。

一个典型的例子是 man 命令。当:

man printf

时,printf 的手册页将被显示在 less 的阅读界面中,如同这样:

阅读界面操作

在 less 显示的阅读界面中,按键即命令。

你可以随时按下 显示帮助屏, 将退出帮助屏。

其它最常用的按键命令有:

稍后键盘一节中我们会完整地介绍全部可用的按键命令。

搜索

在 less 的阅读界面中,底部行被称作状态命令行。如果你在界面中按键,则该行的状态提示暂时被隐藏,带有 提示符的命令行输入会被显示。

当你按下 进入搜索状态时,状态命令行等待你继续键入 pattern。

你可以在搜索时使用正则式 pattern。

重复上一次搜索是 。

如果你键入 序列,那么阅读界面左侧将显示一列垂直的状态栏,而 匹配的行在这个状态栏中会有显示:

标记(Mark)

标记是一个字母,大小写敏感。标记等同于我们在 Visual Studio Code 这样的图形化文字编辑器中的书签。

在阅读界面按下 ma 按键序列, 命令将会为你的当前阅读位置建立一个名为 的标记。稍后你可以使用 返回到这个位置。

如果你键入 序列,那么阅读界面左侧将显示一列垂直的状态栏,而 标记在这个状态栏中会有显示:

选项

选项既可以从命令行指定,也可以在 less 阅读界面中通过前缀字符序列 或 直接键入和进行翻转。

例如你可以键入 来显示帮助屏(尽管 来得更简便)。

less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
     [-b space] [-h lines] [-j line] [-k keyfile]
     [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
     [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
     [-# shift] [+[+]cmd] [--] [filename]...

less 允许从命令行直接键入命令,使用 前缀即可,所以 代表着进入滚动刷新模式,例如:

less +F /var/log/messages

注意你仍然可以使用 less 的命令行专有的选项,例如 代表着文件内容不够一屏时立即退出 less。

如果你使用了 前缀,那么该命令将会被自动应用到每一个文件。

可以一次性打开多个文件并依次显示。

主要的命令行选项

有效的命令行专有选项大体上如下表(由于描述文字很简单故保留原文):

  -?  ........  --help
                  Display help (from command line).
  -a  ........  --search-skip-screen
                  Search skips current screen.
  -A  ........  --SEARCH-SKIP-SCREEN
                  Search starts just after target line.
  -b [N]  ....  --buffers=[N]
                  Number of buffers.
  -B  ........  --auto-buffers
                  Don't automatically allocate buffers for pipes.
  -c  ........  --clear-screen
                  Repaint by clearing rather than scrolling.
  -d  ........  --dumb
                  Dumb terminal.
  -D [xn.n]  .  --color=xn.n
                  Set screen colors. (MS-DOS only)
  -e  -E  ....  --quit-at-eof  --QUIT-AT-EOF
                  Quit at end of file.
  -f  ........  --force
                  Force open non-regular files.
  -F  ........  --quit-if-one-screen
                  Quit if entire file fits on first screen.
  -g  ........  --hilite-search
                  Highlight only last match for searches.
  -G  ........  --HILITE-SEARCH
                  Don't highlight any matches for searches.
  -h [N]  ....  --max-back-scroll=[N]
                  Backward scroll limit.
  -i  ........  --ignore-case
                  Ignore case in searches that do not contain uppercase.
  -I  ........  --IGNORE-CASE
                  Ignore case in all searches.
  -j [N]  ....  --jump-target=[N]
                  Screen position of target lines.
  -J  ........  --status-column
                  Display a status column at left edge of screen.
  -k [file]  .  --lesskey-file=[file]
                  Use a lesskey file.
  -K            --quit-on-intr
                  Exit less in response to ctrl-C.
  -L  ........  --no-lessopen
                  Ignore the LESSOPEN environment variable.
  -m  -M  ....  --long-prompt  --LONG-PROMPT
                  Set prompt style.
  -n  -N  ....  --line-numbers  --LINE-NUMBERS
                  Don't use line numbers.
  -o [file]  .  --log-file=[file]
                  Copy to log file (standard input only).
  -O [file]  .  --LOG-FILE=[file]
                  Copy to log file (unconditionally overwrite).
  -p [pattern]  --pattern=[pattern]
                  Start at pattern (from command line).
  -P [prompt]   --prompt=[prompt]
                  Define new prompt.
  -q  -Q  ....  --quiet  --QUIET  --silent --SILENT
                  Quiet the terminal bell.
  -r  -R  ....  --raw-control-chars  --RAW-CONTROL-CHARS
                  Output "raw" control characters.
  -s  ........  --squeeze-blank-lines
                  Squeeze multiple blank lines.
  -S  ........  --chop-long-lines
                  Chop (truncate) long lines rather than wrapping.
  -t [tag]  ..  --tag=[tag]
                  Find a tag.
  -T [tagsfile] --tag-file=[tagsfile]
                  Use an alternate tags file.
  -u  -U  ....  --underline-special  --UNDERLINE-SPECIAL
                  Change handling of backspaces.
  -V  ........  --version
                  Display the version number of "less".
  -w  ........  --hilite-unread
                  Highlight first new line after forward-screen.
  -W  ........  --HILITE-UNREAD
                  Highlight first new line after any forward movement.
  -x [N[,...]]  --tabs=[N[,...]]
                  Set tab stops.
  -X  ........  --no-init
                  Don't use termcap init/deinit strings.
  -y [N]  ....  --max-forw-scroll=[N]
                  Forward scroll limit.
  -z [N]  ....  --window=[N]
                  Set size of window.
  -" [c[c]]  .  --quotes=[c[c]]
                  Set shell quote characters.
  -~  ........  --tilde
                  Don't display tildes after end of file.
  -# [N]  ....  --shift=[N]
                  Horizontal scroll amount (0 = one half screen width)
      ........  --no-keypad
                  Don't send termcap keypad init/deinit strings.
      ........  --follow-name
                  The F command changes files if the input file is renamed.
      ........  --use-backslash
                  Subsequent options use backslash as escape char.

常用选项

其中或许会被常常用到的可能有:

状态命令行有两种风格:short, medium。前者显示一个 提示符,后者显示一系列文档状态信息如行号、显示位置百分比等等。

如果在阅读界面中使用 ,则行号会被显示在状态命令行中。

如果在命令行使用了 ,那么行号可以被显示在每一行的左侧。对于:

less -N /var/log/syslog

会有:

键盘

快捷键()

在手册页阅读界面中,可以使用快捷键来帮助阅读。

由于手册页的显示是使用操作系统 Shell 环境中的默认 PAGER 来完成的,所以快捷键遵循相应 PAGER 的功能映射。

大多数系统中现在默认采用 作为默认 PAGER,因此下面介绍 快捷键,但针对 manpage 修正描述文字。

基本操作

带有 的命令,允许 的输入方法。

以 命令为例,简单地键入 则屏幕向下卷滚,内容上移一行;但你可以键入 使得内容一次性地向上滚动 31 行。与其相反的是 命令,可以使屏幕向上卷滚,内容下移一行。

F 命令具有即时刷新文件内容的能力,它相当于增强版的 功能,不但可以随时刷新和显示最新的文件内容,也能够暂时停止刷新,在已有的内容中导航和检索,而且还能继续再次地使用 F 进入即时刷新的状态。

搜索

一个 可以由以下按键(ASCII字符)进行前缀修饰:

跳转

g 这样的按键,在阅读界面可以直接生效。但你也可以连续按键,例如 1 3 g 可以转到第 13 行。

一个标记位置(mark)是一个大写字母或者小写字母。另外,下面是预定义的标记位置:

  • 文件开始

  • 文件结尾

切换文件

杂项

环境变量

PAGER

现在是大多数 Linux 发行版的 PAGER 默认值。因此当 PAGER 没有显式设定时,系统总是使用它。

export PAGER=less

LESS

你可以为 指定预设的命令行选项,例如:

LESS="-X"; export LESS

这使得 less 退出之后不会清屏。

行编辑

less 阅读界面中,按键输入会显示在屏幕最下面一行,同时进入行编辑模式。有时候你可以像 vi 一样按下 进入到命令的行编辑模式。

下面是这个行编辑的键盘操作方法(由于描述文字很简单故保留原文)。

 RightArrow ..................... ESC-l ... Move cursor right one character.
 LeftArrow ...................... ESC-h ... Move cursor left one character.
 ctrl-RightArrow  ESC-RightArrow  ESC-w ... Move cursor right one word.
 ctrl-LeftArrow   ESC-LeftArrow   ESC-b ... Move cursor left one word.
 HOME ........................... ESC-0 ... Move cursor to start of line.
 END ............................ ESC-$ ... Move cursor to end of line.
 BACKSPACE ................................ Delete char to left of cursor.
 DELETE ......................... ESC-x ... Delete char under cursor.
 ctrl-BACKSPACE   ESC-BACKSPACE ........... Delete word to left of cursor.
 ctrl-DELETE .... ESC-DELETE .... ESC-X ... Delete word under cursor.
 ctrl-U ......... ESC (MS-DOS only) ....... Delete entire line.
 UpArrow ........................ ESC-k ... Retrieve previous command line.
 DownArrow ...................... ESC-j ... Retrieve next command line.
 TAB ...................................... Complete filename & cycle.
 SHIFT-TAB ...................... ESC-TAB   Complete filename & reverse cycle.
 ctrl-L ................................... Complete filename, list all.

参考

🔚