命令列基本求生工具
安裝好 linux、 學了一點 GUI 環境下的基本求生技能、 看著檔案總管截圖快學了一些基本指令 之後, 再來就是學一些 (檔案總管等價功能之外的) 其他基本指令囉。 這裡介紹的工具非常有用, 不僅可以獨立使用, 也包含在許多其他大型應用軟體裡面, 所以每多學一個功能, 就可以在很多不同的場合提升你的效率。 這裡只把最基本的功能列出; 如果有興趣深究還是要看手冊。
GNU readline 使用者界面
作用類似 doskey, 提供給使用者較舒適的命令列操作環境。 現有的許多命令列交談式應用程式 (例如 tcsh, rlab, gdb, psql, lftp, ..。 等等) 都和 readline 程式庫連結。 使用者只要學會一套在命令列上操縱鍵盤的方法, 就可以在所有這些應用程式上大幅度提升工作效率。 學 readline 對 emacs 會有幫助。
基本操作: 鍵盤上的上下箭頭可以叫出先前執行過的指令, 左右箭頭及 BackSpace 可以在叫出來的舊指令上修改, 最後按 Enter 就可以執行新指令 (不必把遊標移到最後)。 以下介紹常用鍵。 注意: 以下的 [ESC] ..。 是指先按 [ESC], 放掉, 再按後面的鍵, 而不是像 Shift, Control, 或 Alt 一樣, 要和後面的鍵同時按著。
移動遊標的按鍵:
左 右 這一列最... ^a ^e 往...移動一個字元 ^b ^f 往...移動一個字 [Alt]b [Alt]f提示: b 是 backward; f 是 forward 的意思。 可以想像 [Alt] 把距離放大。
刪除字元的按鍵:
左 右 刪除一個字元 [BS] ^d 刪除遊標...邊的字 [Alt][BS] [Alt]d 刪除遊標以...的一切 ^k
叫出先前的指令 (command history 功能) 上下箭頭或 ^p, ^n 可以叫出前一個/下一個指令 ("previous", "next")。 另外還有搜尋類似指令的功能, 在不同的應用程式中有不同的設定:
在 tcsh 中, 打入命令的前面幾個字母, 再按 [Alt] p, 可以叫出之前最近一次與目前的命令列類似的指令。 如果你要的命令還再更前面, 可以再按一次 [Alt] p。 同樣地, [Alt] 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" 的順序來完成。 也可參考 這一頁a。
其他指令:
^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 回到最前面, 我們來練習搜尋字串。 按
/great
ENTER
搜尋 great,
找到的字串就會反白。 (任何時候, 如果不想看反白了, 可以按
ESC
u
。) 按 -i
切換「忽略/分辨大小寫」開關, 並注意反白的部分是否增加或減少? 多按幾次
-i
, 並注意最底下的英文說些什麼?
最後切換到「忽略大小寫」模式, 並按 n
搜尋下一筆。
連按幾次吧。 然後按 ? 反方向搜尋, 再連按幾次 n, 一直倒退,
直到它告訴你 "Pattern not found" 為止。 接著按
/gorilla
ENTER
搜尋 「大猩猩」,
再連按幾次 n。 到底了嗎? 這次改搜尋 chimp。 找不到嗎?
因為我們已在檔案底部。 請按 g 回到最前面再找一次。
學一點點簡單的 regexp 吧, 非常有用的! 請按
/the
ENTER
搜尋 "the"。
請仔細看, 連 "they", "them", "other" 裡面的 the 都被找出來了,
不太正確。 改搜尋 \bthe\b
看看。 這裡的 "\b" 是 boundary
的意思, 標示著文數字 (就是字母或數字) 與非文數字
(例如空格與標點符號等等) 的邊界。 仔細看看 "they", "them", "other"
等等是否不反白了呢?
再試試看 /[a-z]\b
ENTER
搜尋
"出現在字尾的母音字母"。 這裡的 [...] 表示要搜尋 ... 當中的任何
一個 字元。 (以下只寫字串樣版部分;
請自行加上開頭的斜線與結尾的換列鍵) 如果要搜尋
"首尾都是母音的英文單字" 呢? 可以用這樣的字串樣版:
\b[aeiou][a-z]*[aeiou]\b
這裡的減號是偷懶的寫法, 表示
"從 ... 到 ..." 而星號表示 "前面那個東西可以重複出現 0 次, 1 次, 2
次, ... 任意次。 是否看到 article Ape idea ... online
等等英文字反白呢? 當然上述寫法遺漏了一個首尾都是母音的英文字: "a"
畢竟 regexp 也有它的極限。
[^ a-z]
除了英文字母與空格之外的任何一個字元。^[a-z]
出現在一列開頭的一個英文字母。^.
每列開頭的那一個字元。[a-z]$
出現在一列結尾的一個英文字母。.$
每列結尾的那一個字元。^$
空列。 注意: 沒有東西反白, 可是每次按 n 畫面會如何跳躍?\b[a-z][a-z][a-z]\b
長度為 3 的英文單字。\b[a-z]{5,7}\b
長度為五至七個字母的英文單字。- 錯誤示範:
[a-z]{5,7}
長度為五至七個字母的單字。 注意 "greatapeprojec" 反白了... 為什麼? - 先試:
ethic
, 再試\<ethic\>
, 最後試(un)?ethic(al)?
, 注意每次有何不同, 並試著解釋這些特殊符號的意義。
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 (命令列選項):
- -r 把不可印字元忠實地照印出來。 檔案中有中文時可能就需要用這個選項。
- -i 搜尋時忽略大小寫
- -N 顯示列號
- -s 如果遇到連續的空列, 只印一列就好
很多命令列選項都可以在進入 less 後再臨時用 - 按鍵更改, 例如先前提到的 -i 就是。
文字模式的網頁瀏覽器 lynx
- 用法:
lynx 網址
-
lynx 內最重要的按鍵
- q 結束, 離開 lynx
- Space 下一頁
- b 上一頁
- 上箭頭 上一個 link
- 下箭頭 下一個 link
- 右箭頭 選進去這個 link
- 左箭頭 退出目前這頁 (回上一頁)
- g 換到另一個網址去
- G 換到另一個與目前網址接近的另一個網址
- ? 求助 (用左箭頭離開求助畫面)
-
其他常用按鍵
( 往上半頁 ) 往下半頁 ^a 跳到第一頁 ^e 跳到最後一頁 / 搜尋字串 n 再找下一個相同的字串 ^g 終止目前正在連 (但一直連不上) 的連線 (z 鍵有相同效果) ^L 重整亂掉的畫面 ^R 重新再把目前網頁載入一次 d 下載目前遊標所指到的那個網頁 a 把目前看的這頁或遊標所指到的那頁加入書籤中 v 查看我的書籤 = 查看目前這頁的基本資訊
-
常用的 command line options (命令列選項)
- -source 直接抓取網頁然後就結束, 不要進入互動模式。 通常與
output redirection 配合使用,
可以在背景下載網頁, 例如:
lynx -source http://www.cyut.edu.tw/~ckhung > ckh_hp.html
- -color 對不同的文字資料顯示不同的顏色, 例如 hyperlinks 是一種顏色, 粗體字又是一種顏色, ..。 至於那種資料用那個顏色, 由 /etc/lynx.cfg 決定。 有些連線程式不支援顏色, 使用顏色反而連反白都沒有了, 例如若你用 windows 的 telnet 連線, 也許用 -nocolor 反而才可以看得到目前遊標所在的 link。
- -image_links 凡是有圖形的地方, 也顯示連結。 如果你的 /etc/mailcap 檔設定正確的話, 配合圖形顯示軟體 (例如 xloadimage), 這可以讓你既享受文字瀏覽器的速度, 又能夠隨自己高興只選想看的圖形來看。
- -cfg 如果你不喜歡系統內定的一些設定 (例如上述不同資料所顯示的顏色), 可以用這個選項指定你自己寫的設定檔。
- -source 直接抓取網頁然後就結束, 不要進入互動模式。 通常與
output redirection 配合使用,
可以在背景下載網頁, 例如:
還有很多設定, 都寫在 ~/.lynxrc 檔案裡面。 使用者可以自己用文字編輯器直接修改檔案, 也可以在 lynx 當中按 o 鍵叫出 options 選單修改。 例如:
- user mode 選 advanced 可以使下方顯示目前遊標所在處的網址
- Display character set 選 Taipei (Big5) 看中文才不會亂掉
- 如果你不會用 vi 只會用 nano, 可把 Editor 設定成 nano, 這樣每次你按 e 鍵欲修改正在瀏覽的文件時, lynx 會暫時將控制權交給 nano (見下面)
在 options 選單內改完後要記得選 Accept Changes 新的設才會生效。 如果要將新的設定存起來, 在選 Accept Changes 之前還要記得先選 Save Options to Disk, 不然只有這次有效。
發揮你的想像力, 其實 lynx 還可以拿來當做簡單的目錄/檔案瀏覽器,
瀏覽並處理你自己帳號下的檔案: 打 lynx 。
開始瀏覽目前目錄下的檔案; 可以選擇進入一個檔案或目錄;
正在瀏覽一個檔案時可以用 e 鍵進入編輯該檔。 (內定使用 vi 作為 editor)
另外, 如果設定正確, lynx 會視檔案型態叫用不同的應用軟體, 不論是
midi 檔, mp3 檔,
或是圖檔 都可以打開。 例如我在 /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 的手冊。
更多文字模式應用軟體
- Top 10 Linux Console Applications
- RXVT and Slang Applications
- TINY Linux - Applications
- Life in Text Mode
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/gnu/basictool.php; 您所看到的版本: January 18 2023 10:27:04.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。