"忘記歷史的Linux用戶注定要輸入很多信息。”
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的卓尼網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!這也讓強(qiáng)有力的歷史命令(包括Bash shell的歷史變體)不僅在援引之前執(zhí)行命令而不需重新輸入它們時(shí)有用,在調(diào)用其它很少用到的命令時(shí)也有用,這省去了必須重新使用它們的麻煩。該命令按時(shí)間順序列出了之前執(zhí)行命令的清單。
該命令的輸出示例如下:
$ 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
與每條命令相關(guān)的順序號(hào)服務(wù)于重要目的,允許用戶通過(guò)提供直接跟著感嘆號(hào)的順序號(hào)來(lái)重新執(zhí)行相關(guān)命令,如下:
$ !10000 sudo /etc/init.d/apache2 start * Starting web server apache2
但這并不是全部。Linux歷史命令能做到更多,本文后續(xù)部分也將提及。
掌控歷史擴(kuò)展
敲擊向上箭頭鍵會(huì)顯示之前執(zhí)行的命令,敲擊Enter鍵會(huì)再次執(zhí)行該命令。但是還可以使用另一個(gè)可能更快的包括歷史擴(kuò)展功能的選擇:
$ !!
如果你重復(fù)執(zhí)行同樣兩條或三條命令的不同排列組合,你還可以選擇通過(guò)識(shí)別其位移負(fù)指數(shù)來(lái)執(zhí)行出現(xiàn)在上一命令出現(xiàn)處的命令。例如,執(zhí)行之前命令的前一命令(回退兩條命令),運(yùn)用以下序列:
$ !-2
執(zhí)行早期命令的另一方式是輸入緊跟著感嘆號(hào)的命令序列號(hào)的開頭。符合字符對(duì)象的第一條命令會(huì)執(zhí)行。舉例來(lái)說(shuō),假設(shè)最后三條命令如下:
$ history ... 9876 build-book /home/wjgilmore/easy_php 9877 mkdir chapter05 9878 cd chapter05 9879 touch chapter05.md
你可以只通過(guò)運(yùn)行以下命令來(lái)再次執(zhí)行構(gòu)書腳本:
$ !b
用兩步過(guò)程創(chuàng)建一個(gè)確認(rèn)它的新目錄和導(dǎo)航和以運(yùn)用歷史擴(kuò)展縮短。在本例中,我創(chuàng)建了一個(gè)叫做easy_bash的新目錄,位置在/home/wjgilmore/books。要確認(rèn)該目錄,運(yùn)用!$來(lái)獲得在前一命令中發(fā)現(xiàn)在最后“字符”:
$ mkdir /home/wjgilmore/books/easy_bash $ cd !$
搜索命令歷史
雖然可以翻閱命令歷史(或使用grep命令),但在使用Ctrl+R開放選擇搜索它之后也可以調(diào)用該命令的片段,提示的命令行將如下所示:
(reverse-i-search)`\':
開始輸入命令片段,命令行會(huì)實(shí)時(shí)更新反映出最符合的一條。輸入apa后會(huì)出現(xiàn)類似于這樣的命令:
(reverse-i-search)`apa\': sudo /etc/init.d/apache2 start
當(dāng)你看到想要的命令,敲擊Enter執(zhí)行它,或者敲擊向上箭頭鍵在重新執(zhí)行前修改它。
調(diào)整歷史行為
你可以做很多有趣的設(shè)置更改來(lái)控制命令歷史的行為方式。例如,Bash shell設(shè)置的默認(rèn)歷史大小是500條記錄,這個(gè)限制很快就達(dá)到了,即使是很小的命令行相互作用。你可以通過(guò)設(shè)置在Bash配置文件(.bashrc,位于主目錄中)上發(fā)現(xiàn)的HISTSIZE變量提高限制數(shù)。
HISTSIZE=10000
你在命名為HISTCONTROL的.bashrc中通常還會(huì)遇到另一個(gè)與歷史有關(guān)的變量。該變量幫助明確規(guī)定歷史文件中的存放內(nèi)容(位于.bash_history,也可見于主目錄中)。例如,你也許在檢查最新的日志文件附件時(shí)重復(fù)執(zhí)行了尾命令,就在運(yùn)行tail的幾分鐘里。通過(guò)重復(fù)來(lái)集群歷史文件不太實(shí)際,通過(guò)設(shè)置它為ignoredups來(lái)讓HISTCONTROL變量忽視復(fù)制行。
HISTCONTROL=ignoredups
可疑效用的另一個(gè)HISTCONTROL設(shè)置是忽略空格。該HISTCONTROL設(shè)置的結(jié)果是所有前面有空格的執(zhí)行命令都從歷史文件中刪除。這對(duì)于不跟蹤每條命令似乎起了反作用,但是如果你除了ignoredups之外還想實(shí)現(xiàn)該功能,你可以將兩者設(shè)置成:
HISTCONTROL=ignoreboth
我最后要談及的一個(gè)功能是命令替換。假設(shè)你想基于一個(gè)虛擬主機(jī)配置文件模板快速配置一群虛擬主機(jī)。這些命令序列可能非常長(zhǎng),就像下面所示:
$ 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
通常你執(zhí)行該一列命令的方法會(huì)是首先輸入和執(zhí)行,接著向上滾動(dòng)、刪除尾行片段(dev.example.com),然后輸入下一片段(forum.example.com),然后重新執(zhí)行。另一種方法,你可以運(yùn)用命令替換來(lái)快速地用一行字符串替換另一相關(guān)字符串,如下所示:
$ !!:s/dev/forum
該命令行在指向-點(diǎn)擊界面中已為用戶帶來(lái)了大量好處,讓任務(wù)執(zhí)行和操作系統(tǒng)導(dǎo)航可以快速且優(yōu)雅地完成。程度上地利用歷史命令只能增加這些功能,促進(jìn)生產(chǎn)力會(huì)走得更遠(yuǎn)。