写点什么

Linux 命令 less 全知全会

作者:hedzr
  • 2021 年 12 月 25 日
  • 本文字数:4676 字

    阅读完需:约 15 分钟

Linux 命令 less 全知全会

摘要

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

引子

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


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


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


基本使用

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


less /var/log/messages
复制代码


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


ps aux|less
复制代码


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


dmsg|less +F
复制代码

被嵌入地、隐含地使用

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


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


man printf
复制代码


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


阅读界面操作

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


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


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



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

搜索

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


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


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


重复上一次搜索是 n


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


标记(Mark)

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


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


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


选项

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


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


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 允许从命令行直接键入命令,使用 + 前缀即可,所以 +F 代表着进入滚动刷新模式,例如:


less +F /var/log/messages
复制代码


注意你仍然可以使用 less 的命令行专有的选项,例如 -F 代表着文件内容不够一屏时立即退出 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。前者显示一个 : 提示符,后者显示一系列文档状态信息如行号、显示位置百分比等等。


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


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


less -N /var/log/syslog
复制代码


会有:


键盘

快捷键(less

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


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


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

基本操作


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


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


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

搜索


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


跳转


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



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


  • ^ 文件开始

  • $ 文件结尾

切换文件

杂项

环境变量

PAGER

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


export PAGER=less
复制代码

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.
复制代码

参考


🔚

发布于: 3 小时前
用户头像

hedzr

关注

一刀解决 2020.05.12 加入

https://hedzr.com

评论

发布
暂无评论
Linux 命令 less 全知全会