讓我們面對現實吧:壞習慣很難改變。但是您已經熟悉的習慣可能更難克服。有時,重新審視某些事情可能讓您遇到“啊哈,我沒想到它能做到這一點!”的時刻。本文将提供另外 10 個小技巧,可以使您成為更高效的 Linux 高手。
是哪10個小技巧呢?如下:- 使用檔案名自動補全功能 (file name completion)。
- 使用曆史擴充。
- 重用以前的參數。
- 使用 pushd 和 popd 管理目錄導航。
- 查找大型檔案。
- 不使用編輯器建立臨時檔案。
- 使用 curl 指令行實用工具。
- 最有效地利用正規表達式。
- 确定目前使用者。
- 使用 awk 處理資料。
檔案名自動補全功能讓你無需在指令提示符處鍵入各種又臭又長的檔案名,避免輸入錯誤,提高效率。這個功能在各個 Shell 中的工作方式略有不同,是以首先請确定自己用的是哪種shell。
我正在運作哪種 Shell?可以使用 echo $0 或 ps -p $$ 指令顯示您正在使用的 Shell。
List1:确定你的shell
C ShellC Shell 支援最直接檔案名補全功能。設定 filec 變量即可啟用該功能(使用指令 set filec)。
在您開始鍵入檔案名後,可以按 Esc 鍵,Shell 将補全檔案名或者補全盡可能多的部分。
例如,假設有名為 file1、file2 和 file3 的檔案。如果鍵入 f,然後按 Esc 鍵,将填充 file,之後你需要輸入 1、2 或 3 來完成相應的檔案名。
BashBash Shell 也提供了檔案名補全功能,但它使用 的是Tab 鍵。您在 Bash Shell 中不需要設定任何選項即可啟用檔案名補全功能,該選項是預設設定的。
Bash 還實作了其他功能。鍵入檔案名的一部分後,按 Tab 鍵,如果有多個檔案滿足您的請求,并且您需要添加文本以選擇其中一個檔案,那麼您可以多按 Tab 鍵兩次,以顯示與您目前鍵入的内容相比對的檔案的清單。
用之前名為 file1、file2 和 file3 的檔案示例,首先鍵入 f。當按一次 Tab 鍵時,Bash 自動補全顯示file;再按一次 Tab 鍵時,将展開清單 file1 file2 file3。
Korn Shell對于 Korn Shell 使用者,檔案名補全功能取決于 EDITOR 變量的值。如果 EDITOR 設定為 vi,那麼您鍵入部分名稱,然後按 Esc 鍵後跟反斜杠 () 字元。
如果 EDITOR 設定為 emacs,那麼您鍵入部分名稱,然後按兩次 Esc 鍵以補全檔案名。
2. 使用曆史擴充如果你的一系列指令都用了相同的檔案名,會發生什麼情況?有一種快捷方式可以快速獲得你上次使用的檔案名。如List 2 所示,!$ 指令傳回前一個指令使用的檔案名。
從檔案 this-is-a-long-lunch-menu-file.txt 中搜尋單詞 pickles 的出現位置。
搜尋結束後,用 vi 指令來編輯 this-is-a-long-lunch-menu-file.txt 檔案,而不需要重新鍵入檔案名。
用感歎号 (!) 來通路曆史,然後使用美元符号 ($) 傳回前一指令的最後字段。
如果你需要反複用到長檔案名,那麼這是一個非常好的工具。
List2:用 !$ 獲得前一個指令使用的檔案名
3. 重用以前的參數!$ 指令傳回某個指令使用的上一個檔案名參數。但如果某個指令使用多個檔案名,而您隻希望重用其中一個檔案名,該如何做?
!:1 操作符傳回某個指令使用的第一個檔案名。
List 3 中的示例顯示可以如何将此操作符與 !$ 運算符組合使用。在第一個指令中,将一個檔案重新命名為更有意義的名稱,但為了保持原始檔案名可用,建立了一個符号連結。
重新命名檔案 kxp12.c 以提高可讀性,然後使用 link 指令來建立到原始檔案名的符号連結,以防在其他位置使用該檔案名。
!$ 操作符傳回 file_system_access.c 檔案名,而 !:1 操作符傳回 kxp12.c 檔案名,該檔案名是上個指令的第一個檔案名。
List3:組合使用 !$ 和 !:1
4. 使用 pushd 和 popd 管理目錄導航UNIX 支援各種目錄導航工具,我最喜歡的兩款提高工作效率的工具是 pushd 和 popd。您肯定知道 cd 指令用于更改目前目錄。如果要在多個目錄中導航,但希望能夠快速傳回某個位置,該如何做?
pushd 和 popd 指令建立一個虛拟目錄堆棧,pushd 指令用來更改您的目前目錄并将其存儲在堆棧中,而 popd 指令用來從堆棧的頂部移除目錄并使您傳回該位置。可以使用 dirs 指令來顯示目前目錄堆棧。
List4:使用 pushd 和 popd 在目錄樹中導航
pushd 和 popd 指令還支援使用參數處理目錄堆棧。使用 +n 或 -n 參數,其中 n 是一個數字,可以向左或向右移動堆棧:
List5:旋轉目錄堆棧
5. 查找大型檔案有時候需要找出磁盤空間到底被什麼占用了?可以使用以下幾個工具來管理儲存設備。
df 指令顯示每個可用卷上已使用的塊的總數以及空閑空間的百分比。
List6:确定各卷的使用情況
要查找大型檔案?用 find 指令時附帶 -size 參數。List 7 顯示了如何使用 find 指令來查找大于 10MB 的檔案。注意,-size 參數以 KB 為機關計量大小。
List7:查找大于10MB的所有檔案
6. 不要用編輯器建立臨時檔案下面是個簡單示例:需要快速建立一個簡單臨時檔案,但不想啟動編輯器。使用帶有 > 檔案重定向操作符的 cat 指令。
如List 8所示,使用不帶檔案名的 cat 指令隻回顯向标準輸入鍵入的任何内容;> 重定向将該輸入捕獲到指定的檔案中。注意,在結束輸入時必須提供檔案結束字元,一般是 Ctrl-D。
List8:快速建立臨時檔案
要執行相同操作,但是附加到現有檔案而不是建立新檔案。如List 9 所示,改用 >> 操作符。>> 檔案重定向操作符向現有檔案附加内容。
List9:快速向檔案附加内容
7. 使用 curl 指令行實用工具想從指令行通路 Web?用 curl 指令!curl 指令使您可以使用 HTTP、HTTPS、FTP、FTPS、Gopher、DICT、TELNET、LDAP 或 FILE 協定從伺服器檢索資料。
例如,用 curl 指令來下載下傳 HTTP 托管的檔案。使用 -o 參數來指定儲存輸出的位置
List10:用 curl 下載下傳檔案
curl指令非常強大,可以通過man curl了解更多它的功能 。
8. 最有效的利用正規表達式大量 UNIX 指令使用正規表達式作為參數。從技術角度而言,正規表達式是表示某種模式的字元串(也就是說,由字母、數字和符号組成的字元序列),用于定義零或更長的字元串。
正規表達式使用元字元(例如,星号 [*] 和問号 [?])來比對其他字元串的部分或全部内容。
正規表達式不一定包含通配符,但通配符可以使正規表達式在搜尋模式和處理檔案時發揮更大的作用。表 1 顯示了一些基本正規表達式序列。
表 1. 正規表達式序列
以下是經常與 grep 指令一起使用的一些基本正規表達式:
List11:使用正規表達式和 grep
9. 确定目前使用者有時查找問題是,需要确定某個特定使用者是否運作過您的管理腳本。為找出答案,您可以使用 whoami 指令來傳回目前使用者的名稱:
List12:從指令行使用 whoami
List13:用 whoami 確定目前使用者不是根使用者的 Bash 腳本
10. 用awk處理資料awk 指令似乎始終處在 Perl 的陰影下,但它對于簡單、基于指令行的資料處理來說是一個快速、實用的工具。List 14 展示了如何開始使用 awk 指令。
若要擷取檔案中每行文本的長度,用 length() 函數。若要檢視字元串 ing 是否出現在檔案文本中,請用 index() 函數,該函數傳回 ing 首次出現的位置,
這樣您就可以使用它來進行進一步的字元串處理。若要 tokenize(也就是說,将一行拆分為單詞長度的片段)某個字元串,請使用 split() 函數。
List14:基本awk處理
列印文本檔案中的指定字段是一項簡單的 awk 任務。在List 15中,sales 檔案包含每個銷售人員的姓名,後跟每月銷售數字。
可以使用 awk 指令來快速獲得每個月的銷售總額。預設情況下,awk 将每個以逗号分隔的值視為不同的字段。用 $n 操作符來通路每個字段。
List15:用awk對資料進行彙總