命令列基本求生工具

安裝好 linux、 學了一點 GUI 環境下的基本求生技能 看著檔案總管截圖快學了一些基本指令 之後, 再來就是學一些 (檔案總管等價功能之外的) 其他基本指令囉。 這裡介紹的工具非常有用, 不僅可以獨立使用, 也包含在許多其他大型應用軟體裡面, 所以每多學一個功能, 就可以在很多不同的場合提升你的效率。 這裡只把最基本的功能列出; 如果有興趣深究還是要看手冊。

GNU readline 使用者界面

作用類似 doskey, 提供給使用者較舒適的命令列操作環境。 現有的許多命令列交談式應用程式 (例如 tcsh, rlab, gdb, psql, lftp, ..。 等等) 都和 readline 程式庫連結。 使用者只要學會一套在命令列上操縱鍵盤的方法, 就可以在所有這些應用程式上大幅度提升工作效率。 學 readline 對 emacs 會有幫助。

基本操作: 鍵盤上的上下箭頭可以叫出先前執行過的指令, 左右箭頭及 BackSpace 可以在叫出來的舊指令上修改, 最後按 Enter 就可以執行新指令 (不必把遊標移到最後)。 以下介紹常用鍵。 注意: 以下的 [ESC] ..。 是指先按 [ESC], 放掉, 再按後面的鍵, 而不是像 Shift, Control, 或 Alt 一樣, 要和後面的鍵同時按著。

移動遊標的按鍵:

                        左              右
這一列最...             ^a              ^e
往...移動一個字元       ^b              ^f
往...移動一個字     [ESC]b          [ESC]f
提示: b 是 backward; f 是 forward 的意思。 又, [ESC] 加在指令前面, 有放大的效果。

刪除字元的按鍵:

                        左              右
刪除一個字元            [BS]            ^d
刪除遊標...邊的字  [ESC][BS]        [ESC]d
刪除遊標以...的一切                     ^k

叫出先前的指令 (command history 功能) 上下箭頭或 ^p, ^n 可以叫出前一個/下一個指令 ("previous", "next")。 另外還有搜尋類似指令的功能, 在不同的應用程式中有不同的設定:

在 tcsh 中, 打入命令的前面幾個字母, 再按 [ESC], 最後按 p, 可以叫出之前最近一次與目前的命令列類似的指令。 如果你要的命令還再更前面, 可以再按 [ESC], 再按 p。 同樣地, [ESC] n 可以叫出之後最近一次與目前的命令列類似的指令。

在 bash 與其他大部分使用 GNU readline 的應用程式裡面, 可以先打 ^r, 再打入幾個字元, readline 界面也會叫出之前最近一次與目前的命令列類似的指令, 而且隨著你打入的字元越多, 它找到的命令會越正確, 直到你所要找的命令出現為止, 即可按 enter。 同樣地, ^n 可以叫出之後最近一次與目前的命令列類似的指令。

檔案名稱快打鍵 (completion): [TAB] 鍵可以將打到一半的檔案名稱自動打完。 [TAB] 鍵在某些應用程式中有加強的功能, 例如在 tcsh 中可以自動快打命令名稱及環境變數名稱; 在 lftp 中, 檔案名稱的自動快打會根據你下的指令 (究竟是 get 或 put) 來決定要對遠端或本地的檔案名稱快打。

用熟了以後, 可以在 ~/.inputrc 內自己設定功能鍵。 詳見 readline(3) 及 How To Make A Hotkey On The Linux Console。 如果你無法在命令列上輸入中文, 或許可以試著設定其中的 set convert-meta Off

簡單的文字檔案編輯器 nano

筆者建議學 vim 或 emacs, 因為它們的功能多很多。 反正 unix 下的 editor 只要學一種就可以用一輩子 (在各種不同的應用軟體中都可以指定使用你喜歡的 editor), 何不做長期的投資? 更何況 vim 與 emacs 在 OS/2, Mac, Windows, DOS, ..。 底下都可以用。 如果你想學 vim, 可以先從功能較陽春的 less 學起 (文字檔案閱覽器, 不能修改只能看); 如果你想學 emacs, 可以先從功能較陽春的 readline 學起 (命令列編輯器, 一次只能看見一列資料)。

在你有信心認真使用 vim 或 emacs 之前, 可以先學 nano, jed, 或 joe 或圖形介面的 geany。 這裡介紹 nano。

最重要的按鍵:

^G: 顯示線上手冊
^X: 結束編輯, 離開 nano。 (如果曾經作任何修改, nano
    會問你要不要存檔.)
方向鍵: 移動遊標
[BS]: 刪除文字

遊標移動及簡單刪除:

^B: 向左一個字元                ^F: 向右一個字元                
^A: 跳到這一列的最左邊          ^E: 跳到這一列的最右邊
^P: 向上一列                    ^N: 向下一列
^Y (F7): 向上一頁               ^V: 向下一頁
[BS]: 刪除遊標左邊的字元        ^D: 刪除遊標下的字元            

檔案讀寫:

^R: 讀入一個檔案, 將其內容安插在目前遊標所在的位置
^O: 將工作到目前為止的成果存檔

區塊指令:

^6: 設定區塊開始 (然後移動遊標時,
    就會看到反白的區塊延伸到目前遊標的位置為止)
^K: 刪除區塊 (目前反白部分)
^U: 把剛才刪除的區塊貼回目前遊標的位置

例如要搬動區塊, 可以用 "^6 移動遊標 ^K 移動遊標 ^U" 的順序來完成。

其他指令:

^W: 搜尋字串
^L: (當螢幕變得亂七八糟時使用) 重新整理螢幕
^C: 顯示目前遊標的位置是在整個檔案的那裡
^T: 拼字檢查

建議建立一個 ~/.nanorc 設定檔, 裡面填這幾句:

set mouse
set constantshow
# 較舊版本: set const
set softwrap

第一句讓你可以在 nano 裡面用滑鼠; 第二句要求 nano 隨時顯示你遊標目前所在行列數; 第三句要求 nano 不要把太長的列的右半部藏起來, 而是拉到下一列繼續顯示。 又, 如果你有在寫程式, 請下 ls /usr/share/nano/ 查看它是否支援你的程式語言。 例如在 ~/.nanorc 裡面加上一句 include /usr/share/nano/javascript.nanorc 那麼在編輯 *.js 檔的時候, nano 就會變彩色的。

也記得把 ~/.nanorc 複製到 /root/.nanorc 去。

文字檔閱覽器 less

less 是一個 pager, 用來將很長的文字檔或程式輸出分頁顯示, 讓使用者可以一次讀一頁, 還可以倒退/搜尋。 最簡單的用法是: less 檔案名稱 (閱讀檔案)。 也經常放在 pipe 後面 -- 當前一個命令的輸出資料太多時 (請下 last 看看), 用 less 看才不會一下子就向上捲走, 例如: last | less。 有些人習慣打 cat 檔名 | less, 但這似乎有點多此一舉, 用第一種用法不是比較省事嗎? 最後, less 也經常被其他應用程式 (尤其是每個程式的 help 功能) 叫出來使用。 拿 less 來學習 regular expressions 也很棒, 因為它會將找到的字串反白。 也因為它支援 regexp, 所以學 less 對 vi 會有幫助。

最重要的按鍵:

h 求助 (用 q 離開求助畫面)
q 結束, 離開 less
Space 下一頁
b 上一頁
上下左右方向鍵具有它們天生的意義

請下 less gap.txt 閱讀 gap.txt 檔, 並注意最底下的顯示。 按 G 到最後面, 看看這個檔案總共有多少列? 再按 g 回到最前面, 我們來練習搜尋字串。 按 /greatENTER 搜尋 great, 找到的字串就會反白。 (任何時候, 如果不想看反白了, 可以按 ESCu。) 按 -i 切換「忽略/分辨大小寫」開關, 並注意反白的部分是否增加或減少? 多按幾次 -i, 並注意最底下的英文說些什麼? 最後切換到「忽略大小寫」模式, 並按 n 搜尋下一筆。 連按幾次吧。 然後按 ? 反方向搜尋, 再連按幾次 n, 一直倒退, 直到它告訴你 "Pattern not found" 為止。 接著按 /gorillaENTER 搜尋 「大猩猩」, 再連按幾次 n。 到底了嗎? 這次改搜尋 chimp。 找不到嗎? 因為我們已在檔案底部。 請按 g 回到最前面再找一次。

學一點點簡單的 regexp 吧, 非常有用的! 請按 /theENTER 搜尋 "the"。 請仔細看, 連 "they", "them", "other" 裡面的 the 都被找出來了, 不太正確。 改搜尋 \bthe\b 看看。 這裡的 "\b" 是 boundary 的意思, 標示著文數字 (就是字母或數字) 與非文數字 (例如空格與標點符號等等) 的邊界。 仔細看看 "they", "them", "other" 等等是否不反白了呢?

再試試看 /[a-z]\bENTER 搜尋 "出現在字尾的母音字母"。 這裡的 [...] 表示要搜尋 ... 當中的任何 一個 字元。 (以下只寫字串樣版部分; 請自行加上開頭的斜線與結尾的換列鍵) 如果要搜尋 "首尾都是母音的英文單字" 呢? 可以用這樣的字串樣版: \b[aeiou][a-z]*[aeiou]\b 這裡的減號是偷懶的寫法, 表示 "從 ... 到 ..." 而星號表示 "前面那個東西可以重複出現 0 次, 1 次, 2 次, ... 任意次。 是否看到 article Ape idea ... online 等等英文字反白呢? 當然上述寫法遺漏了一個首尾都是母音的英文字: "a" 畢竟 regexp 也有它的極限。

Q: ^[^a-z] 是什麼意思?

回到 less 的操作, 以下是其他常用按鍵:

k 上一列                j 下一列                Enter 下一列
g 跳到第一列            G 跳到最後一列          37g 跳到第 37 列。
/ 往下搜尋字串          ? 往上搜尋字串
n 再找下一個相同的字串  Esc-u 把剛才找到的字串上的反白消掉
-i 從此以後搜尋時忽略大小寫/從此以後搜尋時大小寫有別
^G 詢問目前遊標所在的位置                       = 同 ^G
^R 或 ^L 重整亂掉的畫面
ma 把遊標所在位置記錄為書籤 a                   'a 跳到書籤 a 處,
'' 跳躍回上一次跳躍之前的位置

常用的 command line options (命令列選項):

  1. -r 把不可印字元忠實地照印出來。 檔案中有中文時可能就需要用這個選項。
  2. -i 搜尋時忽略大小寫
  3. -N 顯示列號
  4. -s 如果遇到連續的空列, 只印一列就好

很多命令列選項都可以在進入 less 後再臨時用 - 按鍵更改, 例如先前提到的 -i 就是。

文字模式的網頁瀏覽器 lynx

  1. 用法: lynx 網址
  2. lynx 內最重要的按鍵
    1. q 結束, 離開 lynx
    2. Space 下一頁
    3. b 上一頁
    4. 上箭頭 上一個 link
    5. 下箭頭 下一個 link
    6. 右箭頭 選進去這個 link
    7. 左箭頭 退出目前這頁 (回上一頁)
    8. g 換到另一個網址去
    9. G 換到另一個與目前網址接近的另一個網址
    10. ? 求助 (用左箭頭離開求助畫面)
  3. 其他常用按鍵
    ( 往上半頁              ) 往下半頁
    ^a 跳到第一頁           ^e 跳到最後一頁
    / 搜尋字串              n 再找下一個相同的字串
    ^g 終止目前正在連 (但一直連不上) 的連線 (z 鍵有相同效果)
    ^L 重整亂掉的畫面       ^R 重新再把目前網頁載入一次
    d 下載目前遊標所指到的那個網頁
    a 把目前看的這頁或遊標所指到的那頁加入書籤中
    v 查看我的書籤
    = 查看目前這頁的基本資訊
    
  4. 常用的 command line options (命令列選項)
    1. -source 直接抓取網頁然後就結束, 不要進入互動模式。 通常與 output redirection 配合使用, 可以在背景下載網頁, 例如: lynx -source http://www.cyut.edu.tw/~ckhung > ckh_hp.html
    2. -color 對不同的文字資料顯示不同的顏色, 例如 hyperlinks 是一種顏色, 粗體字又是一種顏色, ..。 至於那種資料用那個顏色, 由 /etc/lynx.cfg 決定。 有些連線程式不支援顏色, 使用顏色反而連反白都沒有了, 例如若你用 windows 的 telnet 連線, 也許用 -nocolor 反而才可以看得到目前遊標所在的 link。
    3. -image_links 凡是有圖形的地方, 也顯示連結。 如果你的 /etc/mailcap 檔設定正確的話, 配合圖形顯示軟體 (例如 xloadimage), 這可以讓你既享受文字瀏覽器的速度, 又能夠隨自己高興只選想看的圖形來看。
    4. -cfg 如果你不喜歡系統內定的一些設定 (例如上述不同資料所顯示的顏色), 可以用這個選項指定你自己寫的設定檔。

還有很多設定, 都寫在 ~/.lynxrc 檔案裡面。 使用者可以自己用文字編輯器直接修改檔案, 也可以在 lynx 當中按 o 鍵叫出 options 選單修改。 例如:

在 options 選單內改完後要記得選 Accept Changes 新的設才會生效。 如果要將新的設定存起來, 在選 Accept Changes 之前還要記得先選 Save Options to Disk, 不然只有這次有效。

發揮你的想像力, 其實 lynx 還可以拿來當做簡單的目錄/檔案瀏覽器, 瀏覽並處理你自己帳號下的檔案: 打 lynx 。 開始瀏覽目前目錄下的檔案; 可以選擇進入一個檔案或目錄; 正在瀏覽一個檔案時可以用 e 鍵進入編輯該檔。 (內定使用 vi 作為 editor) 另外, 如果設定正確, lynx 會視檔案型態叫用不同的應用軟體, 不論是 midi 檔, mp3 檔, 或是圖檔 [我不用 .doc 檔] 圖案 都可以打開。 例如我在 /usr/bin 底下, 建一個 symbolic link: ln -s ee xli (從此以後凡有軟體 -- 例如 lynx -- 想用 xli 看圖檔, 其實都是由 ee 指令在服務) 並且在 /etc/mailcap 裡面加兩句:

audio/midi; /usr/bin/timidity -A 30 %s
audio/mpeg; /usr/bin/mpg123 %s

遇到上面幾個例子, 就自動會用正確的軟體來開啟檔案。

2005 Text Mode Browser Roundup

info 檔閱覽器 pinfo

[2016/5/20: 現在網路教學文那麼多, 我自己已經沒什麼在用 pinfo 了] 自由軟體基金會 所寫的程式, 多半既附 man 格式也附 info 格式的 手冊, 且通常都強調 "info 檔內有更詳盡的資料"; 但是用以閱讀 info 檔的命令 info 有點難操作。 現在有一個替代程式 pinfo, 操作鍵比較自然。

用法: pinfo 文件名稱 其中「文件名稱」可能正是命令名稱, 例如 bash 或 find; 也可能是套件名稱, 例如 textutils 或 fileutils。 如果什麼參數都不給, 它就會列出系統內所有已安裝的 info 文件。

一份 info 文件包含很多個 nodes, (可把每個 node 想像成是一頁網頁) 在 pinfo 中, 可以用上下箭頭, Home, End, 及 Page Up, Page Down 等鍵在本 node 內移動。

而 nodes 之間的關係構成一棵樹。 位於樹根的 node 叫做 top node, 你一進入 pinfo 所看到的, 就是這份 info 文件的 top node。 Top node 通常像是一本書的目錄, 你可以用上下箭頭選到其中一個 child node, 再用右箭頭進去看這個 child node; 從 child node 要回到上一層 (以此例而言, 也就是 top node), 則是用左箭頭。 當然 child node 可能還有它自己的 child node, ..。 就像一本書可分成好幾篇; 一篇可分成好幾章, 一章可分成好幾節一樣。

除了層次的關係之外, node 之間還有順序的關係, 就像書本的樹狀章節結構, 到最後還是要按照順序從最前面排到最後面。 在 pinfo 當中, 用 n 可跳到下個 node, p 可跳到前個 node。

不論是用 / 鍵在本 node 內搜尋字串, 或是用 s 在本文件內所有 nodes 搜尋字串, 都可以使用 regular expressions

如果你不喜歡內定的顏色或按鍵設定, 還可以自己在 ~/.pinforc 檔案中修改。 詳見 pinfo 的手冊。

更多文字模式應用軟體

  1. Top 10 Linux Console Applications
  2. RXVT and Slang Applications
  3. TINY Linux - Applications
  4. Life in Text Mode