less

逐页显示文件


语法格式

less [-[+]aBceEfFgGiIJKmMnNqQrsSuUwW~] [-b size] [-h lines] [-j line]
[-{oO} logfile] [-y lines] [-[z] lines] [-# shift] [--] [files]
less [-?|--help] [-V|--version]

命令简介

类似于more,less命令也是一个分页显示程序,用于逐页显示指定的输入文件。但功能更强大。其中,files是一个或一组文本文件。利用less的内置命令,可以前后滚动、快速定位、随意浏览文件。且在开始显示之前,less只是首先读取部分文件内容,故在查阅大型文件时,比vi等编辑器读取文件的速度要快得多。less命令使用termcap(或terminfo)确定终端特性,能够适用于各种终端。

less命令提供大量的命令选项,为节省用户的输入时间,less命令能够从环境变量LESS中读取命令选项。环境变量LESS的解析优先于命令行选项。因此,如果已经设置了LESS变量,less命令首先会读取变量LESS定义的命令行选项,然后再解释命令行中指定的命令选项,故命令行选项能够抵消环境变量提供的同名选项。

因此,在运行more命令之前,可以事先设置环境变量LESS,使之包含常用的命令行选项,以免在每次运行less命令时输入太多的命令选项。例如,若想总是使用“-N”与“-w”选项,可以将LESS变量设置如下:

export LESS="-N -w"          (bash)
setenv LESS "-N -w"          (tcsh)

less使用的内置命令借鉴于more和vi。在输入命令之前,可以先输入一个数字,作为屏幕滚动或跳跃的单位,同时作为后续命令的默认值。在内置命令的描述中,这个数字称作N

命令选项

-a, --search-skip-screen  表示从当前屏幕的最后一行之后开始检索,从而跳过当前显示的所有数据行。通常,检索是从当前屏幕的第二行开始检索的。

-b size, --buffers=size  指定less处理每一个输入文件时使用的缓冲区空间数量(单位为KB)。通常,每个文件使用64KB的缓冲区空间,除非输入文件是一个管道(参见“-B”)选项。如果size是-1,表示缓冲区空间不受限制,也就是说,整个文件都可以读入内存。

-B, --auto-buffers  通常,当读取的数据来自管道时,缓冲区空间是根据需要自动分配的。如果从管道读取的数据量较大,可能会引起大量的内存分配。“-B”选项禁止读取管道时缓冲区空间的自动分配。在此情况下,管道只能使用64KB内存(或“-b”选项指定的空间数量)。警告,使用“-B”选项可能会导致显示的数据有误,因为只有最近查看的管道数据部分才能保持在内存中,早期的数据将会丢失。

-c, --clear-screen  从第一行开始逐行向下刷新屏幕。通常,整屏刷新是从屏幕底部逐行向上滚动实现的。

-e, --quit-at-eof  令less在第二次遇到文件结束符时自动退出less命令。通常,只有使用q命令一种方法才能退出less命令。

-E, --QUIT-AT-EOF  令less在第一次遇到文件结束符时就立即自动退出less命令。

-f, --force  强制打开目录或设备特殊文件等非普通文件。也禁止在打开二进制文件时发出警告信息。通常,less会拒绝打开非普通文件。

-F, --quit-if-one-screen  令less在第一屏即可显示整个文件时自动退出less命令。

-g, --hilite-search  通常,less会高亮显示匹配最近一个检索命令的所有字符串。而这个选项表示仅仅高亮显示首次发现的匹配最近一个检索命令的字符串。如果匹配的字符串较多,则会提高less的检索速度。

-G, --HILITE-SEARCH  禁止高亮显示检索命令发现的所有字符串。

-h n, --max-back-scroll=n  指定向后(文件前部)滚动的最大行数。如果屏幕后滚超过n行,以前移的方向刷新屏幕。

-i, --ignore-case  表示检索时忽略大小写字母的差异。但是,如果指定的检索模式中含有大写字母,将会忽略此选项,即检索时仍然区别大小写字母。

-I, --IGNORE-CASE  类似于“-i”选项,但即使指定模式中含有大写字母,检索时仍然忽略大小写字母的差异。

-j n, --jump-target=n  指定“目标”行的屏幕位置。“目标”行可以是匹配检索模式的行,以及直接跳转或按百分比跳转的行。指定的屏幕行号n可以是一个正整数,如1表示屏幕的第一行,2表示第二行等。也可以是一个负数,如“-1”表示屏幕的最后一行,-2表示屏幕倒数第二行等。也可以是以小数点为首字符的小数,表示屏幕高度的百分比,如“.5”表示屏幕的中间一行。如果指定了“-j”选项(不管哪一种形式),则向前检索是从目标行的下一行开始的,向后检索是从目标行开始的。

-J, --status-column  在屏幕左边显示一个状态列。状态列将会显示匹配当前检索的数据行。注意,“-w”或“-W”选项也使用状态列。

-K, --quit-on-intr  当按下中断键(Ctrl-C组合键)时能够立即退出less命令。通常,中断键不能终止less命令,只是返回到命令提示模式。

-m, --long-prompt  令less采用与more同样的提示方式,如显示已读文件的百分比等。通常,less仅显示一个冒号“:”提示符。

-M, --LONG-PROMPT  令less采用与more同样的提示方式,且显示更多的提示信息。

-n, --line-numbers  禁止显示行号。使用行号的默认做法会降低less的运行速度,尤其是在处理大型输入文件时。禁止显示行号将会避免这个问题。允许显示行号意味着:行号将会出现在详细提示信息或“=”命令中,而且v命令也会把当前行号传递给编辑器。

-N, --LINE-NUMBERS  在输出的每行数据之前插入一个行号。

-o logfile, --log-file=logfile  在查阅文件的同时,把输入数据复制到指定的文件。仅当输入文件是管道文件(而非普通文件)时,才能使用这个选项。如果指定的文件已经存在,在覆盖文件之前,less会提请用户确认。

-O logfile, --LOG-FILE=logfile  类似于“-o”选项,但即使指定的文件存在,覆盖之前也不会提请用户确认。

-q, --quiet, --silent  采用适度的“安静”操作方式。除非出现错误,禁止终端发出警示音。通常,只要出现异常情况,less都会发出终端警示音。

-Q, --QUIET, --SILENT  采用彻底的“安静”操作方式,完全禁止终端发出任何警示音。

-r, --raw-control-chars  以“原始”的方式显示不可打印字符,而通常是以控制字符的形式显示不可打印字符。

-s, --squeeze-blank-lines  把多个连续的空行合并为一个空行。

-S, --chop-long-lines  截断而非延续超长的数据行。默认的处理方式是把超长的数据行延续到下一行显示。

-u, --underline-special  如果输入文件中存在退格符与回车,按可打印字符处理,即不加任何处理地直接送到终端。

-U, --UNDERLINE-SPECIAL  如果输入文件中存在退格符、制表符与回车字符,按控制字符处理,即按照“-r”选项的做法处理输入文件中的退格符、制表符和回车字符。

-w, --hilite-unread  在前滚一个满屏后临时高亮显示第一个“新”行。第一个“新”行是指紧随前一屏最后一行的数据行。而且高亮显示输入g或p命令后的目的数据行。在下一个非满屏前移的命令之后撤销高亮显示。除非指定了“-J”选项(高亮显示状态列),否则高亮显示整个数据行,包括延续行。

-W, --HILITE-UNREAD  类似于“-w”选项,高亮显示第一个“新”行,不管是满屏前滚,还是大于一行的多行前移。

-y n, --max-forw-scroll=n  指定向前(文件后部)滚动的最大行数。如果屏幕前滚超过n行,重新刷新屏幕。如果需要,可以使用“-c”选项从上到下刷新屏幕。通常,任何前移都会引起屏幕滚动。

-[z]n, --window=n  使用指定的行数n作为窗口滚动的默认行数。默认的行数是一个满屏的行数。less的内部命令z与w也可用于修改窗口的大小。为与more命令兼容,“-”与n之间的“z”可以省略。如果n是一个负数,结果是当前窗口行数与n的算术运算结果。例如,如果当前窗口的行数是24,“-z-4”选项的最终结果是20行。

-# [n], --shift=[ n]  指定左右箭头命令横向滚动的默认列数。如果指定的列数n是0,表示默认的列数是当前整个屏幕窗口宽度的一半。此外,指定的列数n可以是一个以小数点为首字符的小数,表示当前屏幕窗口宽度的百分比。例如,“.5”是当前屏幕窗口宽度的一半,“.3”是当前屏幕窗口宽度的30%等。

--  命令行选项结束标志。紧随其后的任何参数均按文件名解释。

+  如果某个命令行选项的首字符是加号“+”,紧随其后的字符实际上是less的一个内部命令,也是运行less命令后执行的第一个内部命令。例如,“+G”表示从文件的最后而非起始位置开始显示文件,“+/xyz”表示从文件中第一次出现xyz字符串的位置开始显示文件,作为一种特殊情况,“+n”相当于“+ng”,表示从指定的行数开始显示文件。如果命令行选项的前两个字符是“++”,第一个内部命令适用于每个输入文件,而非仅仅第一个文件。

-?, --help  类似于内置命令h,显示less命令的内置命令、命令选项及其简单说明等帮助信息。

-V, --version  显示命令的版本与版权等信息,然后退出。

内置命令

h, H  显示less支持的内部命令汇总及其简单说明。即使忘记了其他的所有命令,也要记住这个命令。

空格键, ^V, f, ^F  向前(文件后部)滚动N行,N的默认值为当前窗口的行数(参见“-z”选项)。如果N大于当前窗口的行数,仅显示最后的整屏部分。

z  类似于空格键,但如果在z命令之前指定了NN将会成为新的窗口行数。

ESC-空格键  类似于空格键,但做整屏滚动,即使到达文件结尾也是如此。

Enter键, ^N, e, ^E, j, ^J  向前(文件后部)滚动N行,N的默认值为1。

d, ^D  向前(文件后部)滚动N行,N的默认值为当前窗口行数的一半。如果在d命令之前指定了NN将会成为后续d或u命令的新的默认值。

b, ^B, ESC-v  向后(文件前部)滚动N行,N的默认值为当前窗口的行数(参见“-z”选项)。如果N大于当前窗口的行数,仅显示最后的整屏部分。

w  类似于b,但如果在w命令之前指定了NN将成为新的窗口行数。

y, ^Y, ^P, k, ^K  向后(文件前部)滚动N行,N的默认值为1。

u, ^U  向后(文件前部)滚动N行,N的默认值为当前窗口行数的一半。如果在u命令之前指定了NN将成为后续d或u命令的新的默认值。

ESC-), →  向右(数据向左)水平滚动N个字符,N的默认值是屏幕窗口宽度的一半(参见“-#”选项)。如果在之前指定了NN将成为后续“→”和“←”命令的默认值。当数据向左滚动时,超长的数据部分将会隐去,就像指定了“-S”选项。

ESC-(, ←  向左(数据向右)水平滚动N个字符,N的默认值是屏幕窗口宽度的一半(参见“-#”选项)。如果之前指定了NN将成为后续“→”和“←”命令的默认值。

r, ^R, ^L  刷新屏幕。

R  刷新屏幕,扔掉缓存的任何数据。如果在查阅文件时文件正在更新,则这个命令是非常有用的。

F  向前滚动显示。即使已读到文件结尾,仍然继续读文件。通常,当查询的文件已位于文件结尾处,但文件仍在不断增长时,可以使用这个命令,监视文件后续的数据变化。这相当于使用“tail -f”命令观察不断变化的文件。

g, <, ESC-<  直接跳到文件的第N行,N的默认值为1(文件的第一行)。

G, >, ESC->  直接跳到文件的第N行,N的默认值为文件的最后一行。

p, %  直接跳到文件的百分之N处,N应位于0~100的范围内,且可以含有小数部分。

P  直接跳到文件包含字节偏移值N的数据行。

{  如果左花括号出现在屏幕顶部的文本行中,输入“{”命令将会直接跳到匹配的右花括号处,而匹配的右花括号将会滚动、调整到屏幕底部的文本行上。如果屏幕顶部的文本行中含有多个左花括号,可以使用数字N指定行中的第N个括号。

}  如果右花括号出现在屏幕底部的文本行中,输入“}”命令将会直接跳到匹配的左花括号处,而匹配的左花括号将会滚动、调整到屏幕顶部的文本行上。如果屏幕底部的文本行中含有多个右花括号,可以使用数字N指定行中的第N个括号。

(  类似于“{”,只需把花括号改为圆括号。

)  类似于“}”,只需把花括号改为圆括号。

[  类似于“{”,只需把花括号改为方括号。

]  类似于“}”,只需把花括号改为方括号。

ESC-^F  紧接着ESC-^F输入两个字符,可以作为自定义的左括号命令,如输入“ESC ^F< >”(其中小于号“<”相当于上述的左括号,大于号“>”相当于右括号)之后,可以直接跳到匹配屏幕顶部小于号的大于号位置。

ESC-^B  紧接着ESC-^B输入两个字符,可以作为自定义的右括号命令,如输入“ESC ^B< >”(其中小于号“<”相当于上述的左括号,大于号“>”相当于右括号)之后,可以直接跳到匹配屏幕底部大于号的小于号位置。

’  在单引号后输入“^”或“$”将会直接跳到文件的开始或结尾。

/pattern  从当前屏幕显示的第二行开始,向前检索文件,直接滚动到第N(默认值为1)个匹配指定模式的数据行。指定的模式按正则表达式解释和处理。下列字符具有特殊的意义,如果出现在模式的开始位置,其目的是修改检索的行为而不是作为模式的一部分:

^N, !  检索不匹配指定模式的数据行。

^E, *  检索多个文件。也就是说,如果检索遇到了当前文件的结束标志仍未发现匹配者,将继续检索命令行文件参数表中的下一个文件。

^F, @  从命令行文件参数表中第一个文件的第一行开始检索,而不管当前屏幕上显示的是什么,以及“-a”或“-j”选项的设置。

^K  高亮显示当前屏幕上匹配模式的任何正文,但禁止移动到第一个匹配者所在的位置(即保持当前的位置不变)。

^R  禁止解释正则表达式中的元字符,即仅做简单的字符串比较。

?pattern  向后(文件前部)检索匹配模式的第N个数据行。检索从当前屏幕顶部一行的前一行开始。如同“/”命令,下列字符具有特殊的意义:

^N, !  检索不匹配指定模式的数据行。

^E, *  检索多个文件。也就是说,如果检索到了当前文件的起始位置仍未发现匹配者,将继续检索命令行文件参数表中的前一个文件。

^F, @  从命令行文件参数表中最后一个文件的最后一行开始检索,而不管当前屏幕上显示的是什么,以及“-a”或“-j”选项的设置。

^K  其意义同正向检索中的^K。

^R  其意义同正向检索中的^R。

n  重复执行先前的检索,即检索匹配模式的第N个数据行。如果先前的检索被“^N”命令修改,检索第N个不包含匹配模式的数据行。如果先前的检索被“^E”命令修改,且当前文件中的检索不满足要求,继续检索下一个(或前一个)文件。如果先前的检索被“^R”命令修改,按字符串(而非正则表达式)继续检索。如果先前的检索被“^F”或“^K”命令修改,则没有影响。

N  逆向重复执行先前的检索。

ESC-n  重复执行先前的检索,且可跨越文件的边界,其效果就像是先前的检索被“*”命令修改那样。

ESC-N  逆向重复执行先前的检索,且可跨越文件的边界。

ESC-u  撤销检索结果的高亮显示,关闭匹配当前检索模式的字符串的高亮显示。如果由于先前的ESC-u命令已经关闭了高亮显示,则重新恢复高亮显示。任何检索命令也将恢复高亮显示(注意,ESC-u命令不能恢复“-G”选项禁止的高亮显示)。

&pattern  仅显示匹配指定模式的数据行,隐藏不匹配的数据行。如果模式为空(输入“&”字符之后立即按下Enter键),关闭任何过滤功能,显示所有的数据行。当处于过滤模式时,屏幕左下角的提示信息前部将会出现一个“&”符号,以提醒用户当前显示的可能并非文件内容的全部。如同“/”命令,下列字符具有特殊的意义:

^N, !  仅显示不匹配指定模式的数据行。

^R  禁止解释正则表达式中的元字符,即仅做简单的字符串比较。

:e [file]  考察新指定的文件。如果省略了文件名,重新考察命令行文件参数表中的“当前”文件。如果file参数中含有百分号“%”,使用当前文件的名字替换“%”,如果file参数中含有“#”,使用先前考察的文件名替换“#”。指定的文件file将会插入命令行文件参数表中的“下一个”文件位置,以便随后的“:n”和“:p”命令能够看到。如果文件名参数file含有通配符,涉及多个文件,所有文件都会插入命令行文件参数表中,但首先考察的是第一个文件。如果file含有空格,整个文件名前后应加双引号。

:n  考察命令行文件参数表中的下一个文件。如果指定了N,考察后数第N个文件。

:p  考察命令行文件参数表中的前一个文件。如果指定了N,考察前数第N个文件。

:x  考察命令行文件参数表中的第一个文件。如果指定了N,考察先前第N个文件。

:d  从命令行文件参数表中删除当前的文件。

=, ^G, :f  显示当前文件的有关信息,如文件名、当前的行号范围和屏幕底部一行的字节偏移值等。如果可能,也会显示文件的大小、文件的行数以及已显示文件的百分比等。

V  显示less命令的版本号。

q, Q, :q, :Q, ZZ  退出less命令。

v  调用编辑器编辑当前文件。调用的编辑器取决于环境变量VISUAL或EDITOR的设置,如果两个变量均未定义,默认的编辑器为vi。

! shell-cmd  调用Shell执行给定的命令。在命令的参数中,可以使用百分号“%”表示当前的文件,“#”表示刚考察的前一个文件,“!!”表示重复执行最近一个Shell命令。输入“!”后如果没有指定Shell命令,表示仅调用Shell而已,即直接进入交互Shell。调用哪一个Shell取决于环境变量SHELL的设置,默认的Shell为sh。

| m shell-cmd  利用管道,把当前文件的部分内容提交给指定的Shell命令,其中m是一个标记字母。如果m是“^”,表示把文件从开始至当前屏幕最后一行之间的数据提交给Shell命令。如果m是“$”,表示把当前屏幕第一行至文件结尾之间的数据提交给Shell命令。如果m是“.”或直接按下Enter键,表示把当前屏幕的全部内容提交给Shell命令。

-  紧接着立即输入一个单字符的命令选项,表示增加或修改当前的命令选项,之后,less命令会显示一行简短的消息,说明新的设置及其意义。如果选项需要提供数值参数(如“-b”或“-h”选项)或字符串参数(如“-P”或“-t”选项),在输入选项字母后可以接着输入新的参数值。如果未输入参数值,less命令将会输出一条消息,说明当前的设置,但不会做任何修改。

--  类似于“-”命令,用于设置长选项。在输入长选项的名字之后,必须按下Enter键。

_  输入下画线之后立即输入一个单字符的命令选项,less命令会显示一行简短的消息,说明相应选项的当前设置。注意,这不会修改选项的设置。

__(双下画线)  类似于“_”命令,用于显示长选项的当前设置。在输入长选项的名字之后,必须按下Enter键。

+cmd  每当显示一个新文件时,首先执行指定的内部命令。例如,“+G”表示在处理后续每个文件时,总是从文件的最后而非起始位置开始显示文件。

命令行编辑

一旦进入屏幕底部的命令行(如检索字符串时),可以使用下列特殊键编辑命令行。作为一个字符文字,如果需要输入特殊键本身,首先需要按下Ctrl-V或Ctrl-A组合键,然后再按下特殊键。例如,若想输入一个制表符文字字符,可先按Ctrl-V组合键,然后再按制表符键。此外,如果需要输入一个反斜线字符,需要连续输入两个反斜线字符。

←, ESC-h  光标左移一个字符位置。

→, ESC-l  光标右移一个字符位置。

ESC-←, ESC-b或ESC-←  把光标左移至前一个字(或当前字)的起始字符位置。

ESC-→, ESC-w或ESC-→  把光标右移至下一个字的起始字符位置。

HOME, ESC-0  把光标移至当前行的行首位置。

END, ESC-$  把光标移至当前行的行尾位置。

退格键  删除光标左边的字符。当删除字符直至命令行为空时则取消命令。

DELETE或ESC-x  删除光标位置的字符。

^退格键,ESC-退格键  删除光标左边的字。

^DELETE, ESC-X或ESC-DELETE  删除光标位置的字。

↑, ESC-k  获取前一个命令行。

↓, ESC-j  获取下一个命令行。

TAB  补齐光标左边不完整的文件名。如果匹配多个文件名,仅将第一个匹配的文件名引入命令行。重复按下TAB键,将会循环显示匹配的所有文件名。如果完整的文件名是一个目录,一个斜线字符“/”将会附加到文件名后面。使用环境变量LESSSEPARATOR可以指定不同的字符。

BACKTAB, ESC-TAB  类似于TAB键,但采用反向方式循环显示匹配的文件名。

^L  补齐光标左边不完整的文件名。如果匹配多个文件名,把匹配的所有文件名引入命令行。

^U  删除整个命令行,或取消当前命令(如果命令行为空)。

应用实例

1. 从日志文件后面开始查阅最新的数据,期间可以使用F内置命令不断观察文件的变化(参见“tail -f”命令)。

$ less +G /var/log/messages


索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z