強有力的Linux歷史命令 你還記得幾個

"忘記歷史的Linux用戶註定要輸入很多信息。”

這也讓強有力的歷史命令(包括Bash shell的歷史變體)不僅在援引之前執行命令而不需重新輸入它們時有用,在調用其它很少用到的命令時也有用,這省去了必須重新使用它們的麻煩。該命令按時間順序列出了之前執行命令的清單。

該命令的輸出示例如下:

$ history
...
62 rm 092210.sql
63 mysqldump
64 mysqldump -u root -p dev_gamenomad_com > 092210.sql
65 more 092210.sql
66 rm 092210.sql
...
9991 mkdir chapter05
9992 cd chapter05
9993 dir
9994 npm install websocket-server
9995 node hello.js
9996 exit
9997 history

與每條命令相關的順序號服務於重要目的,允許用戶通過提供直接跟着感嘆號的順序號來重新執行相關命令,如下:

$ !10000
sudo /etc/init.d/apache2 start
* Starting web server apache2

但這並不是全部。Linux歷史命令能做到更多,本文後續部分也將提及。

掌控歷史擴展

敲擊向上箭頭鍵會顯示之前執行的命令,敲擊Enter鍵會再次執行該命令。但是還可以使用另一個可能更快的包括歷史擴展功能的選擇:

$ !!

如果你重複執行同樣兩條或三條命令的不同排列組合,你還可以選擇通過識別其位移負指數來執行出現在上一命令出現處的命令。例如,執行之前命令的前一命令(回退兩條命令),運用以下序列:

$ !-2

執行早期命令的另一方式是輸入緊跟着感嘆號的命令序列號的開頭。符合字符對象的第一條命令會執行。舉例來說,假設最後三條命令如下:

$ history
...
9876 build-book /home/wjgilmore/easy_php
9877 mkdir chapter05
9878 cd chapter05
9879 touch chapter05.md

你可以只通過運行以下命令來再次執行構書腳本:

$ !b

用兩步過程創建一個確認它的新目錄和導航和以運用歷史擴展縮短。在本例中,我創建了一個叫做easy_bash的新目錄,位置在/home/wjgilmore/books。要確認該目錄,運用!$來獲得在前一命令中發現在最後“字符”:

$ mkdir /home/wjgilmore/books/easy_bash
$ cd !$

搜索命令歷史

雖然可以翻閱命令歷史(或使用grep命令),但在使用Ctrl+R開放選擇搜索它之後也可以調用該命令的片段,提示的命令行將如下所示:

(reverse-i-search)`':

開始輸入命令片段,命令行會實時更新反映出最符合的一條。輸入apa後會出現類似於這樣的命令:

(reverse-i-search)`apa': sudo /etc/init.d/apache2 start

當你看到想要的命令,敲擊Enter執行它,或者敲擊向上箭頭鍵在重新執行前修改它。

調整歷史行爲

你可以做很多有趣的設置更改來控制命令歷史的行爲方式。例如,Bash shell設置的默認歷史大小是500條記錄,這個限制很快就達到了,即使是很小的命令行相互作用。你可以通過設置在Bash配置文件(.bashrc,位於主目錄中)上發現的HISTSIZE變量提高限制數。

HISTSIZE=10000

你在命名爲HISTCONTROL的.bashrc中通常還會遇到另一個與歷史有關的變量。該變量幫助明確規定歷史文件中的存放內容(位於.bash_history,也可見於主目錄中)。例如,你也許在檢查最新的日誌文件附件時重複執行了尾命令,就在運行tail的幾分鐘裏。通過重複來集羣歷史文件不太實際,通過設置它爲ignoredups來讓HISTCONTROL變量忽視複製行。

HISTCONTROL=ignoredups

可疑效用的另一個HISTCONTROL設置是忽略空格。該HISTCONTROL設置的結果是所有前面有空格的執行命令都從歷史文件中刪除。這對於不跟蹤每條命令似乎起了反作用,但是如果你除了ignoredups之外還想實現該功能,你可以將兩者設置成:

HISTCONTROL=ignoreboth

我最後要談及的一個功能是命令替換。假設你想基於一個虛擬主機配置文件模板快速配置一羣虛擬主機。這些命令序列可能非常長,就像下面所示:

$ cp vhost.template /etc/apache2/sites-available/dev.example.com
$ cp vhost.template /etc/apache2/sites-available/forum.example.com
$ cp vhost.template /etc/apache2/sites-available/staging.example.com

通常你執行該一列命令的方法會是首先輸入和執行,接着向上滾動、刪除尾行片段(dev.example.com),然後輸入下一片段(forum.example.com),然後重新執行。另一種方法,你可以運用命令替換來快速地用一行字符串替換另一相關字符串,如下所示:

$ !!:s/dev/forum

該命令行在指向-點擊界面中已爲用戶帶來了大量好處,讓任務執行和操作系統導航可以快速且優雅地完成。最大程度上地利用歷史命令只能增加這些功能,促進生產力會走得更遠。

原文:http://www.searchsv.com.cn/showcontent_49775.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章