摘要:
對 less 的各種用法做一次整理,順便也可以當作參考手冊。
<!--MORE-->
引子
less
是一個 Linux 命令列實用程式,用於顯示檔案內容,它支援管道輸入,所以能夠被用於接收前一命令的標準輸出病進行全屏展示。
less
是 more
的增強版本,它具有更全面的全檔案導航能力,以及全文搜尋能力。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)
?