Linux中history歷史命令使用方法詳解
當你在玩Linux的時候,如果你經常使用命令行來控制你的Linux系統(tǒng),那么有效地使用命令歷史機制將會使效率獲得極大提升。事實上,一旦你掌握了我在下面給出的15個有關Linux history歷史命令的例子,你就會發(fā)現使用history歷史命令行將更有樂趣。
1、使用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'
2、用Ctrl + R搜索歷史命令
我非常確信這應該是你最常使用的history特性,當你執(zhí)行了一串相當長的命令之后,你只要用關鍵字搜索一下歷史命令然后重新執(zhí)行這條命令而不需要將整條命令再輸一遍。方法是:按下Ctrl +R然后輸入關鍵字。 在以下示例中,我搜索“red”,則顯示以前的命令中含有”red”的命令“cat/etc/redhat-release”。
[注:在命令行提示符下按下Ctrl+R,終端將顯示如下提示―reverse-i-search‖]
(reverse-i-search)`red`: cat/etc/redhat-release
[注:當看到你要的命令后按回車鍵,就可以重新執(zhí)行這條命令了]
#cat /etc/redhat-release
Fedora release 9 (Sulphur)
而有的時候你需要在執(zhí)行一條歷史命令之前編輯它.比如,你可以像下面那樣搜索“httpd”,終端顯示歷史命令“service httpd stop”,選擇它把“stop”改為“start”然后執(zhí)行它
[注: 在命令提示符下按 Ctrl+R , 將會顯示提示符‖reverse-i-search‖]
(reverse-i-search)`httpd`: service httpdstop
[注: 看到你想要的命令后按下左鍵或者右鍵,就可以在執(zhí)行這條命令之前編輯它了]
# service httpd start
3、四種不同的方法快速執(zhí)行之前的命令
有時出于某些原因你需要執(zhí)行之前的命令,下面的四種方法可以用來重復最后執(zhí)行的命令:
1.用向上鍵(up arrow )查看上條命令,按回車執(zhí)行。
2.在命令行中輸入!!并按回車。
3.在命令行中輸入!-1并按回車。
4.按Ctrl+P顯示上條命令,按回車執(zhí)行。
4、執(zhí)行歷史命令中的特定命令
在下面的例子中,如果你想再次執(zhí)行第四條命令,執(zhí)行!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)
5、執(zhí)行以特定字開頭的歷史命令
輸入!和你要重新執(zhí)行的命令的前幾個字母。在下面的例子中,輸入!ps,回車,執(zhí)行歷史命令中以“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
6、用HISTSIZE控制歷史命令的總數
把下面的兩行添加到.bash_profile然后重新登錄bash(譯者注:用source .bash_profile即可)查看有什么變化,在這個例子中,bash命令歷史記錄中只能儲存450條命令。
#vi ~/.bash_profile
HISTSIZE=450
HISTFLESIZE=450
7、使用HISTFILE改變歷史文件名
默認情況下,命令歷史被儲存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,重新登錄shell,則.commandline_warrior文件將取代.bash_history文件用來儲存歷史命令。你可以使用這個命令來追蹤不同終端中執(zhí)行的命令,屆時只需要將不同終端中所執(zhí)行的命令保存在不同的歷史文件中即可。
#vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior
8、使用HISTCONTROL來消除命令歷史中的連續(xù)重復條目
在下面的例子中pwd被輸入了三次,當你使用history的時候,你會看到這三條命令連續(xù)出現。設置HISTCONTROL為ignoredups,來消除重復命令:
#pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd
47 history | tail -4
[注: 上面pwd被執(zhí)行了三次之后,歷史中有三條pwd命令]
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd 58 history | tail -4
[注:即使上面pwd被執(zhí)行了三次,歷史中也只有一條pwd命令]
9、使用HISTCONTROL在整個歷史中去除重復命令
上面的ignoredups去除連續(xù)重復的命令,要消除整個命令歷史中的重復命令,把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命令被除去了]
10、使用HISTCONTROL強制history忽略某條特定命令
在執(zhí)行一條命令時,你可以將HISTCONTROL設置為ignorespace并在該命令前加上一個空格來指示history忽略這條命令??梢灶A見的是,很多初級系統(tǒng)管理員將為他們能從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
11、使用c選項清除所有的歷史命令
有時候你或許想要清除之前的歷史命令。而你又想讓history繼續(xù)工作:
#history –c
12、替換命令歷史中的內容
當你搜索歷史命令時,你可能希望執(zhí)行一個與剛剛查找到的歷史命令具有相同的參數的命令。 在本例中,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
13、替換特定命令的特定參數
在下例中,!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
14、用HISTSIZE禁用history
如果你想禁用history,又不讓bashshell記錄你的命令,像下面那樣把HISTSIZE設為0即可。
#export HISTSIZE=0
# history
# [注: 執(zhí)行history后沒有顯示任何信息]
15、用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]
【編輯推薦】