摘要
对 less 的各种用法做一次整顿,顺便也能够当作参考手册。
<!--MORE-->

引子

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 将退出帮忙屏。

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

按键指令
SPACE下一页
d下半页
b前一页
u前半页
v编辑内容
j 或 ↵ Enter下ㄧ行
k前ㄧ行
Home文件顶部
End文件结尾
F追随模式(供日志应用)。Follow Mode (for logs). Interrupt to abort.
g 或 <第一行
G 或 >最初ㄧ行
⟨n⟩G跳到第⟨n⟩
/⟨text⟩向前搜寻⟨text⟩。文字会被视为正则表达式。
?⟨text⟩如同/,但为向后搜寻。
n下一个合乎的搜寻后果
N上一个合乎的搜寻后果
Escu敞开合乎突显(请见-g命令行选项)
-⟨c⟩切换选项⟨c⟩,例如-i会切换是否要在搜寻时疏忽大小写
m⟨c⟩设置标记⟨c⟩
'⟨c⟩跳到标记⟨c⟩
= 或 Ctrl+G文件信息
:n下一个文件
:p上一个文件
h阐明。这会应用less显示,q来到。
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.

罕用选项

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

选项能力
-X ........ --no-init不应用 termcap 的 init/deinit 性能。退出 less 时不清屏。
-x [N[,...]] --tabs=[N[,...]]设置 TAB 字符的显示宽度
-n -N .... --line-numbers --LINE-NUMBERS显示/不显示行号。行号被显示在状态命令行中
-m -M .... --long-prompt --LONG-PROMPT切换状态命令行的提示符的格调
-J ........ --status-column在左侧显示一列垂直的状态行,搜寻后果行能够在这一列提供一个标记显示
-F ........ --quit-if-one-screen如果内容显示有余一屏则立刻退出 less
-e -E .... --quit-at-eof --QUIT-AT-EOF当首次到达文件结尾地位时立刻退出 less

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

如果在浏览界面中应用 -N,则行号会被显示在状态命令行中。

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

less -N /var/log/syslog

会有:

键盘

快捷键(less

在手册页浏览界面中,能够应用快捷键来帮忙浏览。

因为手册页的显示是应用操作系统 Shell 环境中的默认 PAGER 来实现的,所以快捷键遵循相应 PAGER 的性能映射。

大多数零碎中当初默认采纳 less 作为默认 PAGER,因而上面介绍 less 快捷键,但针对 manpage 修改形容文字。

基本操作

按键能力
h显示帮忙屏幕
q退出
e ^E J ^N CR后退一行(或 N 行)
y ^Y k ^K ^P后退一行(或 N 行)
f ^F ^V SPACE后退一屏
b ^B ESC-v后退一屏
z后退一屏(设置屏高为 N)
w后退一屏(设置屏高为 N)
ESC-SPACE后退一屏,在文末容许上滚
d ^D后退半屏
u ^U后退半屏
ESC-) RightArrow向右卷动半屏
ESC-( LeftArrow向左卷动半屏
ESC-} ^RightArrow向右卷动到最右侧
ESC-{ ^LeftArrow向左卷动到第一列
F继续滚动后退,如同 tail -f 那样
ESC-F继续滚动后退,但在查找关键字匹配时进行滚动
r ^R ^L从新绘制屏幕
R重绘屏幕,废除曾经缓存的输出

带有 N 的命令,容许 N cmd 的输出办法。

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

F 命令具备即时刷新文件内容的能力,它相当于增强版的 tail -f 性能,岂但能够随时刷新和显示最新的文件内容,也可能临时进行刷新,在已有的内容中导航和检索,而且还能持续再次地应用 F 进入即时刷新的状态。

搜寻

按键能力
/pattern向前搜寻关键词 pattern
?pattern向后搜寻关键词 pattern
n反复上一次搜寻(反复 N 次)
N反向地反复上一次搜寻
ESC-n反复上一搜寻,容许逾越多个文件
ESC-N反复上一搜寻,反向,容许逾越多个文件
ESC-u放弃、还原、翻转搜寻高亮状态
&pattern只显示匹配行文字

一个 pattern 能够由以下按键(ASCII字符)进行前缀润饰:

按键能力
^N or !搜寻非匹配行
^E or *搜寻多个文件(越过以后主题的文件开端)
^F or @从第一个文件(/)或者最初一个文件(?)开始搜寻
^K高亮匹配文字,但不挪动(放弃以后浏览地位不变)
^R不应用正则式

跳转

按键能力
g < ESC-<文件第一行(或第 N 行)
G > ESC->文件最初一行(或最初第 N 行)
p %转到文件开始(或者按百分比定位到 N)
t转到下一个标记(反复 N 次)
T转到前一个标记(反复 N 次)
[ ( {查找闭括号 } ) ]
} ) ]查找开括号 [ ( {
ESC-^F (c1) (c2)查找闭括号 (c2)
ESC-^B (c1) (c2)查找开括号 (c1)

g 这样的按键,在浏览界面能够间接失效。但你也能够间断按键,例如 1 3 g 能够转到第 13 行。

按键能力
m<letter>标记以后地位为 <letter>
'<letter>跳转到前一个标记地位(以 <letter> 为索引)
''跳转到前一个标记地位
^X^X等同于 '

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

  • ^ 文件开始
  • $ 文件结尾

切换文件

按键能力
:e [file]装载一个新文件
^X^V等同于 :e
:n列表中下一个(后 N 个)文件
:p列表中上一个(上 N 个)文件
:x列表中第一个(第 N 个)文件
:d从命令行列表中删除以后文件
= ^G :f打印以后文件名

杂项

按键能力
-<flag>翻转一个命令行选项
--<name>翻转一个选项
_<flag>显示一个命令行选项
__<name>显示一个选项
+cmd每当载入解释一个新文件时,执行 less 命令 cmd
!command执行 Shell 命令 command
\Xcommand管道操作,从以后地位和标记地位 X 到 Shell 命令 command
s file保留输出到文件
v编辑以后文件(应用 $VISUAL$EDITOR
V打印 less 版本号

环境变量

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.

参考

  • man less
  • less (Unix) - Wikipedia)