http://linuxtoy.org/archives/the-best-tips-and-tricks-for-bash.html
Bash 是我們經常與之打交道的 Shell 程式,本文針對其提示進行了搜羅。相信在你看過這些內容之後,定會在 Bash 的世界裡遊刃有餘。
- 從曆史中執行命令
有時候,我們需要在 Bash 中重複執行先前的命令。你當然可以使用上方向鍵來查看之前曾經運行過的命令。但這裡有一種更好的方式:你可以按 Ctrl + r 按鍵組合進入曆史搜尋模式,一旦找到需要重複執行的命令,按斷行符號鍵即可。
- 重複命令參數
先來看一個例子:
mkdir /path/to/exampledir
cd !$
本例中,第一行命令將建立一個目錄,而第二行的命令則轉到剛建立的目錄。這裡,“!$”的作用就是重複前一個命令的參數。事實上,不僅是命令的參數可以重複,命令的選項同樣可以。另外,Esc + . 快速鍵可以切換這些命令參數或選項。
- 用於編輯的快速鍵
- Ctrl + a:將游標定位到命令的開頭
- Ctrl + e:與上一個快速鍵相反,將游標定位到命令的結尾
- Ctrl + u:剪下游標之前的內容
- Ctrl + k:與上一個快速鍵相反,剪下游標之後的內容
- Ctrl + y:粘貼以上兩個快速鍵所剪下的內容
- Ctrl + t:交換游標之前兩個字元的順序
- Ctrl + w:刪除游標左邊的參數(選項)或內容
- Ctrl + l:清屏
- 處理作業
首先,使用 Ctrl + z 快速鍵可以讓正在執行的命令掛起。如果要讓該進程在後台執行,那麼可以執行 bg 命令。而 fg 命令則可以讓該進程重新回到前台來。使用 jobs 命令能夠查看到哪些進程在後台執行。
你也可以在 fg 或 bg 命令中使用作業 id,如:
fg %3
又如:
bg %7
- 使用置換
- 命令置換
先看例子:
du -h -a -c $(find . -name *.conf 2>&-)
注意 $() 中的部分,這將告訴 Bash 運行 find 命令,然後把返回的結果作為 du 的參數。
- 進程置換
仍然先看例子:
diff <(ps axo comm) <(ssh user@host ps axo comm)
該命令將比較本地系統和遠程系統中正在啟動並執行進程。請注意 <() 中的部分。
- xargs
看例:
find . -name *.conf -print0 | xargs -0 grep -l -Z mem_limit | xargs -0 -i cp {} {}.bak
該命令將備份目前的目錄中的所有 .conf 檔案。
- 使用管道
下面是一個簡單的使用管道的例子:
ps aux | grep init
這裡,“|”操作符將 ps aux 的輸出重新導向給 grep init。
下面還有兩個稍微複雜點的例子:
ps aux | tee filename | grep init
及:
ps aux | tee -a filename | grep init
- 將標準輸出儲存為檔案
你可以將命令的標準輸出內容儲存到一個檔案中,舉例如下:
ps aux > filename
注意其中的“>”符號。
你也可以將這些輸出內容追加到一個已存在的檔案中:
ps aux >> filename
你還可以分割一個較長的行:
command1 | command2 | ... | commandN > tempfile1
cat tempfile1 | command1 | command2 | ... | commandN > tempfile2
- 標準流:重新導向與組合
重新導向流的例子:
ps aux 2>&1 | grep init
這裡的數字代表:
上面的命令中,“grep init”不僅搜尋“ps aux”的標準輸出,而且搜尋 sterr 輸出。