Linux中history歷史命令使用方法詳解

當你在玩Linux的時候,若是你常用命令行來控制你的Linux系統,那麼有效地使用命令歷史機制將會使效率得到極大提高。事實上,一旦你掌 握了我在下面給出的15個有關Linux history歷史命令的例子,你就會發現使用history歷史命令行將更有樂趣。
一、使用HISTTIMEFORMAT在歷史中顯示TIMESTAMP
一般狀況下,當你在命令行中鍵入history時,終端中將顯示你剛輸入的命令及其編號。若是出於審查命令的目的,和命令一塊兒顯示時間戳將會頗有幫助,以下所示。
# export HISTTIMEFORMAT='%F %T ' 
# history | more 
1 2008-08-05 19:02:39 service network restart 
2 2008-08-05 19:02:39 exit 
3 2008-08-05 19:02:39 id 
4 2008-08-05 19:02:39 cat /etc/redhat-release
[注:你也能夠設置alias語句來查看最近的歷史命令] 
alias h1='history 10' 
alias h2='history 20' 
alias h3='history 30'
二、用Ctrl + R搜索歷史命令
我很是確信這應該是你最常使用的history特性,當你執行了一串至關長的命令以後,你只要用關鍵字搜索一下歷史命令而後從新執行這條命令而不需 要將整條命令再輸一遍。方法是:按下Ctrl +R而後輸入關鍵字。 在如下示例中,我搜索「red」,則顯示之前的命令中含有」red」的命令「cat/etc/redhat-release」。
[注:在命令行提示符下按下Ctrl+R,終端將顯示以下提示―reverse-i-search‖]
 (reverse-i-search)`red`: cat/etc/redhat-release 
[注:當看到你要的命令後按回車鍵,就能夠從新執行這條命令了] 
#cat /etc/redhat-release 
Fedora release 9 (Sulphur)
而有的時候你須要在執行一條歷史命令以前編輯它.好比,你能夠像下面那樣搜索「httpd」,終端顯示歷史命令「service httpd stop」,選擇它把「stop」改成「start」而後執行它
[注: 在命令提示符下按 Ctrl+R , 將會顯示提示符‖reverse-i-search‖]
 (reverse-i-search)`httpd`: service httpdstop
[注: 看到你想要的命令後按下左鍵或者右鍵,就能夠在執行這條命令以前編輯它了] 
# service httpd start
三、四種不一樣的方法快速執行以前的命令
有時出於某些緣由你須要執行以前的命令,下面的四種方法能夠用來重複最後執行的命令:
1.用向上鍵(up arrow )查看上條命令,按回車執行。 
2.在命令行中輸入!!並按回車。 
3.在命令行中輸入!-1並按回車。 
4.按Ctrl+P顯示上條命令,按回車執行。
四、執行歷史命令中的特定命令
在下面的例子中,若是你想再次執行第四條命令,執行!4便可
#history | more 
1 service network restart 
2 exit 
3 id 
4 cat /etc/redhat-release 
# !4 cat /etc/redhat-release 
Fedora release 9 (Sulphur)
五、執行以特定字開頭的歷史命令
輸入!和你要從新執行的命令的前幾個字母。在下面的例子中,輸入!ps,回車,執行歷史命令中以「ps」開頭的「psaux | grep yp」
#!ps 
psaux | grep yp 
root 16947 0.0 0.0 36516 1264 ? Sl 13:10 0:00 ypbind 
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
六、用HISTSIZE控制歷史命令的總數
把下面的兩行添加到.bash_profile而後從新登陸bash(譯者注:用source .bash_profile便可)查看有什麼變化,在這個例子中,bash命令歷史記錄中只能儲存450條命令。
#vi ~/.bash_profile 
HISTSIZE=450
HISTFLESIZE=450
七、使用HISTFILE改變歷史文件名
默認狀況下,命令歷史被儲存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,從新登陸shell, 則.commandline_warrior文件將取代.bash_history文件用來儲存歷史命令。你可使用這個命令來追蹤不一樣終端中執行的命 令,屆時只須要將不一樣終端中所執行的命令保存在不一樣的歷史文件中便可。
#vi ~/.bash_profile 
HISTFILE=/root/.commandline_warrior
八、使用HISTCONTROL來消除命令歷史中的連續重複條目
在下面的例子中pwd被輸入了三次,當你使用history的時候,你會看到這三條命令連續出現。設置HISTCONTROL爲ignoredups,來消除重複命令:
#pwd 
# pwd 
# pwd 
# history | tail -4 
44 pwd 
45 pwd 
46 pwd 
47 history | tail -4 
[注: 上面pwd被執行了三次以後,歷史中有三條pwd命令]
# export HISTCONTROL=ignoredups 
# pwd 
# pwd 
# pwd 
# history | tail -3 
56 export HISTCONTROL=ignoredups 
57 pwd 58 history | tail -4 
[注:即便上面pwd被執行了三次,歷史中也只有一條pwd命令]
九、使用HISTCONTROL在整個歷史中去除重複命令
上面的ignoredups去除連續重複的命令,要消除整個命令歷史中的重複命令,把HISTCONTROL設置成erasedups
#export HISTCONTROL=erasedups 
# pwd 
# service httpd stop
#history | tail -3 
38 pwd 
39 service httpd stop 
40 history | tail -3 
# ls -ltr 
# service httpd stop 
# history | tail -6 
35 export HISTCONTROL=erasedups 
36 pwd 
37 history | tail -3 
38 ls –ltr 
39 service httpd stop 
40 history | tail -6 
[注: 以前在pwd後面的servicehttpd stop命令被除去了]
十、使用HISTCONTROL強制history忽略某條特定命令
在執行一條命令時,你能夠將HISTCONTROL設置爲ignorespace並在該命令前加上一個空格來指示history忽略這條命令。能夠預見的是,不少初級系統管理員將爲他們能從history中成功隱藏某條命令而振奮。
瞭解ignorespace的工做方式是很好。不過,實踐中最好不要從history中去掩蓋任何命令。
#export HISTCONTROL=ignorespace 
# ls –ltr 
# pwd 
# service httpd stop 
[注: 在service的前面加上一個空格,以便在命令歷史中忽略它]
# history | tail -3 
67 ls –ltr 
68 pwd 
69 history | tail -3
十一、使用c選項清除全部的歷史命令
有時候你或許想要清除以前的歷史命令。而你又想讓history繼續工做:
#history –c
十二、替換命令歷史中的內容
當你搜索歷史命令時,你可能但願執行一個與剛剛查找到的歷史命令具備相同的參數的命令。 在本例中,vi以後的"!!:$" 能夠將前一個命令的參數作爲當前命令的參數。
#ls anaconda-ks.cfg 
anaconda-ks.cfg 
# vi !!:$ 
vi anaconda-ks.cfg
在下面的例子中,緊跟在vi後的參數「!^」把上一個命令的第一個參數傳遞給當前命令。
#cp anaconda-ks.cfg anaconda-ks.cfg.bak 
anaconda-ks.cfg 
# vi !^ 
vi anaconda-ks.cfg
1三、替換特定命令的特定參數
在下例中,!cp:2 在命令歷史中查找以cp開頭的命令,並將其第二個參數作爲當前命令(ls -l)的參數。
#cp ~/longname.txt /really/a/very/long/path/long-filename.txt 
# ls -l !cp:2 
ls -l /really/a/very/long/path/long-filename.txt
在下面的例子中「!cp:$」尋找先前以cp爲開頭的命令,並把該條指令的最後一個參數(在這個例子中依舊是第二個參數)替換到「ls –l」中。
#ls -l !cp:$ 
ls -l /really/a/very/long/path/long-filename.txt
1四、用HISTSIZE禁用history
若是你想禁用history,又不讓bashshell記錄你的命令,像下面那樣把HISTSIZE設爲0便可。
#export HISTSIZE=0 
# history 
# [注: 執行history後沒有顯示任何信息]
1五、用HISTIGNORE讓history在存儲時忽略某些指令
有時你不想在記錄裏看到諸如「pwd」,「ls」之類的基本指令,能夠用HISTIGNORE忽略這些指令。
注意在HISTIGNORE中添加「ls」,只忽略「ls」不忽略「ls –l」。必定要準確的寫出要忽略的的指令。
#export HISTIGNORE=「pwd:ls:ls –ltr: 」
#pwd 
# ls 
# ls –ltr 
# service httpd stop 
# history | tail -3 
79 export HISTIGNORE=「pwd:ls:ls -ltr: 」 
80 service httpd stop 
81 history 
[注: history命令不顯示pwd和ls]


history -d 11   刪除指定的行 
相關文章
相關標籤/搜索