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。

原創文章,作者:fighter,如若轉載,請注明出處:http://www.www58058.com/25614

(1)
fighterfighter
上一篇 2016-07-26 16:43
下一篇 2016-07-26 16:43

相關推薦

  • 作業-第二周

    1、linux常用文件管理命令 ls rm chmod touch mv cp 2、echo $? 如果返回0則成功,其他失敗 3、 mkdir /tmp/{a,b}_{c,d} mkdir -p /tmp/mylinux/bin /tmp/mylinux/boot/ /tmp/mylinux/boot/grup /tmp/mylinux/dev \ /tm…

    Linux干貨 2016-06-23
  • iptables的DNAT、SNAT配置

    DNAT:目的地址轉換。當外網主機訪問內網的某臺服務器的時候,如果直接暴露服務器的IP于公網,可能會遭受各種各樣的攻擊,而DNAT的主要作用就是在服務器前面添加一臺防火墻。將防火墻的地址公布出去,讓外網客戶端通過訪問防火墻的地址就可以訪問到本地服務器。這樣就起到了保護服務器的目的; SNAT:源地址轉換。內網主機在訪問互聯網的時候所有源地址都轉換為防火墻的外…

    2017-06-12
  • old notes

    yum update: update software guest edition ***: how to install guest edition: 1) need to root: su – 2) yum install kernel-devel 3)yum install gcc* ( when don't remember n…

    Linux干貨 2016-09-19
  • 文件系統掛載

    文件系統掛載 文件系統管理: 將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為稱之為掛載;  解除此關聯關系的過程稱之為卸載;  把設備關聯掛載點:Mount Point mount  卸載時:可使用設備,也可以使用掛載點 umount  注意:掛載點下原有文件在掛載完成后…

    Linux干貨 2015-12-16
  • linux 中條件測試判斷

    文件條件測試判斷:   -e 文件存在   -a 文件存在   這個選項的效果與-e相同. 但是它已經被"棄用"了, 并且不鼓勵使用.   -f 表示這個文件是一個一般文件(并不是目錄或者設備 文件)   -s 文件大小不為零   -d 表示這是一個目錄   -b 表示…

    Linux干貨 2017-02-02
  • N25第7周作業

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; ]# fdisk /dev/sdb #劃出一個…

    Linux干貨 2017-02-21
欧美性久久久久