天天看點

history

Linux中history曆史指令使用方法詳解

2012-05-10 10:53 青藤園 字号:T | T

history

當你在玩Linux的時候,如果你經常使用指令行來控制你的Linux系統,那麼有效地使用指令曆史機制将會使效率獲得極大提升。事實上,一旦你掌握了我在下面給出的15個有關Linux history曆史指令的例子,你就會發現使用history曆史指令行将更有樂趣。

AD:WOT2015 網際網路運維與開發者大會 熱銷搶票

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特性,當你執行了一串相當長的指令之後,你隻要用關鍵字搜尋一下曆史指令然後重新執行這條指令而不需要将整條指令再輸一遍。方法是:按下Ctrl +R然後輸入關鍵字。 在以下示例中,我搜尋“red”,則顯示以前的指令中含有”red”的指令“cat/etc/redhat-release”。

[注:在指令行提示符下按下Ctrl+R,終端将顯示如下提示―reverse-i-search‖]

 (reverse-i-search)`red`: cat/etc/redhat-release 

[注:當看到你要的指令後按Enter鍵,就可以重新執行這條指令了] 

#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

3、四種不同的方法快速執行之前的指令

有時出于某些原因你需要執行之前的指令,下面的四種方法可以用來重複最後執行的指令:

1.用向上鍵(up arrow )檢視上條指令,按回車執行。 

2.在指令行中輸入!!并按回車。 

3.在指令行中輸入!-1并按回車。 

4.按Ctrl+P顯示上條指令,按回車執行。

4、執行曆史指令中的特定指令

在下面的例子中,如果你想再次執行第四條指令,執行!4即可

#history | more 

1 service network restart 

2 exit 

3 id 

4 cat /etc/redhat-release 

# !4 cat /etc/redhat-release 

5、執行以特定字開頭的曆史指令

輸入!和你要重新執行的指令的前幾個字母。在下面的例子中,輸入!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

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檔案用來儲存曆史指令。你可以使用這個指令來追蹤不同終端中執行的指令,屆時隻需要将不同終端中所執行的指令儲存在不同的曆史檔案中即可。

HISTFILE=/root/.commandline_warrior

8、使用HISTCONTROL來消除指令曆史中的連續重複條目

在下面的例子中pwd被輸入了三次,當你使用history的時候,你會看到這三條指令連續出現。設定HISTCONTROL為ignoredups,來消除重複指令:

#pwd 

# pwd 

# history | tail -4 

44 pwd 

45 pwd 

46 pwd 

47 history | tail -4 

[注: 上面pwd被執行了三次之後,曆史中有三條pwd指令]

# export HISTCONTROL=ignoredups 

# history | tail -3 

56 export HISTCONTROL=ignoredups 

57 pwd 58 history | tail -4 

[注:即使上面pwd被執行了三次,曆史中也隻有一條pwd指令]

9、使用HISTCONTROL在整個曆史中去除重複指令

上面的ignoredups去除連續重複的指令,要消除整個指令曆史中的重複指令,把HISTCONTROL設定成erasedups

#export HISTCONTROL=erasedups 

# 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 

40 history | tail -6 

[注: 之前在pwd後面的servicehttpd stop指令被除去了]

10、使用HISTCONTROL強制history忽略某條特定指令

在執行一條指令時,你可以将HISTCONTROL設定為ignorespace并在該指令前加上一個空格來訓示history忽略這條指令。可以預見的是,很多初級系統管理者将為他們能從history中成功隐藏某條指令而振奮。

了解ignorespace的工作方式是很好。不過,實踐中最好不要從history中去掩蓋任何指令。

#export HISTCONTROL=ignorespace 

# ls –ltr 

[注: 在service的前面加上一個空格,以便在指令曆史中忽略它]

67 ls –ltr 

68 pwd 

69 history | tail -3

11、使用c選項清除所有的曆史指令

有時候你或許想要清除之前的曆史指令。而你又想讓history繼續工作:

#history –c

12、替換指令曆史中的内容

當你搜尋曆史指令時,你可能希望執行一個與剛剛查找到的曆史指令具有相同的參數的指令。 在本例中,vi之後的"!!:$" 可以将前一個指令的參數做為目前指令的參數。

#ls anaconda-ks.cfg 

anaconda-ks.cfg 

# vi !!:$ 

vi anaconda-ks.cfg

在下面的例子中,緊跟在vi後的參數“!^”把上一個指令的第一個參數傳遞給目前指令。

#cp anaconda-ks.cfg anaconda-ks.cfg.bak 

# vi !^ 

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:$ 

14、用HISTSIZE禁用history

如果你想禁用history,又不讓bashshell記錄你的指令,像下面那樣把HISTSIZE設為0即可。

#export HISTSIZE=0 

# history 

# [注: 執行history後沒有顯示任何資訊]

15、用HISTIGNORE讓history在存儲時忽略某些指令

有時你不想在記錄裡看到諸如“pwd”,“ls”之類的基本指令,可以用HISTIGNORE忽略這些指令。

上一篇: history
下一篇: history對象