溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

history的命令詳解

發(fā)布時間:2020-06-24 13:22:46 來源:網絡 閱讀:517 作者:hello大釗 欄目:安全技術

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

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

  常用選項

n 列出當前的n條命令

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

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

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

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

  常用用法:

    !NUMBER 執(zhí)行第NUMBER條命令

!! 和crtl+p 都是執(zhí)行上一條命令

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

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

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

同時我們可以設置history的環(huán)境變量HISTTIMEFORMAT讓其顯示每條命令執(zhí)行時間,方便查看和了解當前系統(tǒng)何時執(zhí)行過什么命令.

export HISTTIMEFORMAT='%F %T '

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

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

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

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

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

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

   cat /etc/system-release

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

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

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

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

cat /etc/centos-release

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

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

   vim ~/.bash_profile

   HISTFILE=/root/.commandline_warrior

4、使用HISTCONTROL來消除命令歷史中的連續(xù)重復條目;

cat /etc/profile

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

    export HISTCONTROL=ignoreboth

else

    export HISTCONTROL=ignoredups

fi

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

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

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

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

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

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

e.g cat /etc/profile

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

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

cp /etc/profile /tmp

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

6、替換特定命令的特定參數(shù)

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

   cp /etc/profile /tmp

   ls -l !cp:2

   ls -l /tmp

   在下面的例子中“!cp:$”尋找先前以cp為開頭的命令,并把該條指令的最后一個參數(shù)(在這個例子中依舊是第二個參數(shù))替換到“l(fā)s –l”中。

   ls -l !cp:$

   ls -l /tmp

同理,ls -l !cp:^ 就是需要以cp開頭命令,并把該條命令的第一個參數(shù)替換到“l(fā)s -l”中

ls -l !cp:^

ls-l /etc/profile

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

   有時你不想在記錄里看到諸如“pwd”,“l(fā)s”之類的基本指令,可以用HISTIGNORE忽略這些指令。

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

   #export HISTIGNORE=“pwd:ls:”

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


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI