linux history歷史記錄命令詳解

一、什麼是history
在bash功能中,它能記憶使用過的命令,這個功能最大的好處就是可以查詢曾經做過的舉動!
從而可以知道你的運行步驟,那麼就可以追蹤你曾下達過的命令,以作爲除錯的工具!

二、History的保存
那麼命令記錄在哪裏呢?在家目錄內的 .bash_history 裏! 不過,需要留意的是,~/.bash_history 記錄的是前一次登陸以前所運行過的命令,而至於這一次登陸所運行的命令都被緩存在內存中,當你成功的註銷系統後,該命令記憶纔會記錄到 .bash_history 當中!


查看當前用戶所有歷史記錄命令

history
查看當前用戶最近n條歷史記錄命令

history n

清除linux歷史記錄命令

history -c 清除所有的歷史命令

可能還需要清除下~/.absh_history文件

history -d 5 清除命令號爲5的記錄

history -a將目前新增的 history 命令新增入 histfiles 中,若沒有加 histfiles , 則默認寫入 ~/.bash_history

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

-w 將目前的 history 記憶內容寫入 histfiles 中!

快速查找需要的歷史命令

!!:重複執行上一個命令

!+數字,!101 調出歷史的第101條命令並執行

!+字母:調出最近一次以此字母開頭的命令並執行

使用Ctrl+R快捷鍵快速搜索歷史命令

限制linux記錄歷史命令的數量

HISTSIZE=10

HISTFILESIZE=10

提示;以上命令行設置僅會臨時生效,要設備永久生效需要配置到/etc/profile  或~/.bash_profile

  

強制linux不記錄敏感歷史命令    隱藏執行的命令前面加空格

HISTCONTROL=ignorespace


使用HISTTIMEFORMAT在歷史中顯示TIMESTAMP

export HISTTIMEFORMAT='%F %T '

[root@localhost ~]# history |more

    1  2016-10-19 11:09:10 ifconfig 

    2  2016-10-19 11:09:10 vim /etc/sysconfig/network-scripts/ifcfg-eth0 

    3  2016-10-19 11:09:10 iptables -L

    4  2016-10-19 11:09:10 iptables -F

    5  2016-10-19 11:09:10 service iptables stop

    6  2016-10-19 11:09:10 vim /etc/resolv.conf 

    7  2016-10-19 11:09:10 service network restart

    8  2016-10-19 11:09:10 ifconfig 

    9  2016-10-19 11:09:10 ping www.baidu.com

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 
[注:當看到你要的命令後按回車鍵,就可以重新執行這條命令了] 
#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 
Fedora release 9 (Sulphur)

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文件用來儲存歷史命令。你可以使用這個命令來追蹤不同終端中執行的命令,屆時只需要將不同終端中所執行的命令保存在不同的歷史文件中即可。

#vi ~/.bash_profile 
HISTFILE=/root/.commandline_warrior

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

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

#pwd 
# pwd 
# pwd 
# history | tail -4 
44 pwd 
45 pwd 
46 pwd 
47 history | tail -4 
[注: 上面pwd被執行了三次之後,歷史中有三條pwd命令]
# export HISTCONTROL=ignoredups 
# pwd 
# pwd 
# pwd 
# history | tail -3 
56 export HISTCONTROL=ignoredups 
57 pwd 58 history | tail -4 
[注:即使上面pwd被執行了三次,歷史中也只有一條pwd命令]

9、使用HISTCONTROL在整個歷史中去除重複命令

上面的ignoredups去除連續重複的命令,要消除整個命令歷史中的重複命令,把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忽略某條特定命令

在執行一條命令時,你可以將HISTCONTROL設置爲ignorespace並在該命令前加上一個空格來指示history忽略這條命令。可以預見的是,很多初級系統管理員將爲他們能從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繼續工作:

#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 
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 
# [注: 執行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]






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