history的命令詳解

  銘記歷史,圓夢中華。在Linux操作系統中,對於管理員操作的命令進行查詢也是非常重要,而且熟練掌握調用命令歷史能提高管理員管理系統的效率。

  history的命令緩存數目是由一個在/etc/profile文件名爲HISTSIZE的變量決定,可以通過env命令查看當前設定的數目,也可以通過修改HISTSIZE的數值來決定緩存多少條命令。建議修改添加至自己家目錄下面的.bash_profile,不要修改全局的變量。以下所有變量我均是添加在自己的家目錄下面的.bash_profile,若有需要請自行在/etc/profile修改

  常用選項

n 列出當前的n條命令

-a 清除緩存中的所有命令

-c 清除當前shell中緩存的命令

-r :將 histfiles 的內容讀到目前這個 shell 的 history 記憶中

-w :將目前的 history 記憶內容寫入 histfiles。Linux系統當你在shell(控制檯)中輸入並執行命令時,shell會自動把你的命令記錄到歷史列表中,一般保存在用戶目錄下的.bash_history文件中。默認保存1000條,你也可以更改這個值。如果你鍵入 history, history會向你顯示你所使用的前1000個歷史命令,並且給它們編了號,你會看到一個用數字編號的列表快速從屏幕上捲過。你可能不需要查看1000個命令中的所有項目, 當然你也可以加入數字來列出最近的 n 筆命令列表。linux中history命令不僅僅讓我們可以查詢歷史命令而已. 我們還可以利用相關的功能來幫我們執行命令。運行特定的歷史命令history會列出bash保存的所有歷史命令,並且給它們編了號,我們可以使用“歎號接編號”的方式運行特定的歷史命令.

  常用用法:

    !NUMBER 執行第NUMBER條命令

!! 和crtl+p 都是執行上一條命令

! COMMAND e.g !c  執行最近的以c開頭的命令,切記是從後往前最近的一條以C開頭的命令。   常用案例

1、查看history命令使用的時間

由於history列出的命令很多,我們可以通過管道命令將history命令送給less命令方便查看,e.g history |less ;

同時我們可以設置history的環境變量HISTTIMEFORMAT讓其顯示每條命令執行時間,方便查看和了解當前系統何時執行過什麼命令.

export HISTTIMEFORMAT='%F %T '

若要是想永久讓history命令顯示時間,將上面這條命令追加至當前用戶的家目錄下面.bash_profile裏面。

2、用Ctrl + R搜索歷史命令

我非常確信這應該是你最常使用的history特性,當你執行了一串相當長的命令之後,你只要用關鍵字搜索一下歷史命令然後重新執行這條命令而不需要將整條命令再輸一遍。方法是:按下Ctrl +R然後輸入關鍵字。 在以下示例中,我搜索“sys”,則顯示以前的命令中含有”sys”的命令“cat/etc/system-release”。

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

   (reverse-i-search)`sys`: cat/etc/system-release

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

   cat /etc/system-release

  而有的時候你需要在執行一條歷史命令之前編輯它.比如,你可以像下面那樣搜索“sys”,終端顯示歷史命令“cat /etc/system-release”,選擇它把"system"改爲“centos”然後執行它

  [注: 在命令提示符下按 Ctrl+R , 將會顯示提示符‖reverse-i-search‖]

   (reverse-i-search)`sys`:cat /etc/system-release 

  [注: 看到你想要的命令後按下左鍵或者右鍵,就可以在執行這條命令之前編輯它了]

cat /etc/centos-release

   3、使用HISTFILE改變歷史文件名

   默認情況下,命令歷史被儲存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,重新登錄shell,則.commandline_warrior文件將取代.bash_history文件用來儲存歷史命令。你可以使用這個命令來追蹤不同終端中執行的命令,屆時只需要將不同終端中所執行的命令保存在不同的歷史文件中即可。這樣就能知道系統出問題到底是誰在操作導致的。

   vim ~/.bash_profile

   HISTFILE=/root/.commandline_warrior

4、使用HISTCONTROL來消除命令歷史中的連續重複條目;

cat /etc/profile

if [ "$HISTCONTROL" = "ignorespace" ] ; then

    export HISTCONTROL=ignoreboth

else

    export HISTCONTROL=ignoredups

fi

這個HISTCONTROL變量就是控制是否顯示連續的重複條目,連續敲三次ls, 這三次ls就叫做連續重複命令;假若敲一次ls,一次cd,再一次ls,這不叫做連續重複命令;

ignoreups就是ignoredups去除連續重複的命令,只能剔除連續的重複條目;要清除整個命令歷史中的重複條目,可以將 HISTCONTROL 設置成 erasedups;

ignorespce 是以空格開頭的命令在history中不顯示,e.g [spcace] ls ,再去history就不能發現ls這個命令,但是我們能看到這個命令是執行了的。

ignoreboth 就是同時帶着上面兩種選項的結果。

5、將上一個命令的參數傳遞給當前命令。

!!:$將上一個命令的參數傳遞給當前命令

e.g cat /etc/profile

   vim !!:$ 這個打開還是/etc/profile 這個文件

!^ 將上一個命令中的第一個參數傳遞給當前命令

cp /etc/profile /tmp

vim !^ 打開的文件就是 /etc/profile

6、替換特定命令的特定參數

   在下例中,!cp:2 在命令歷史中查找以cp開頭的命令,並將其第二個參數做爲當前命令(ls -l)的參數。

   cp /etc/profile /tmp

   ls -l !cp:2

   ls -l /tmp

   在下面的例子中“!cp:$”尋找先前以cp爲開頭的命令,並把該條指令的最後一個參數(在這個例子中依舊是第二個參數)替換到“ls –l”中。

   ls -l !cp:$

   ls -l /tmp

同理,ls -l !cp:^ 就是需要以cp開頭命令,並把該條命令的第一個參數替換到“ls -l”中

ls -l !cp:^

ls-l /etc/profile

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

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

   注意在HISTIGNORE中添加“ls”,只忽略“ls”不忽略“ls –l”。一定要準確的寫出要忽略的的指令。

   #export HISTIGNORE=“pwd:ls:”

同理這條命令可以追加進家目錄下的.bash_profile。


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