history是一條非常實用的shell命令,可以顯示出之前在shell中運行的命令,配合last顯示之前登錄的用戶,就可以追溯是哪個用戶執行了某些命令。以下詳細說明history使用中常見的命令或技巧,在實際系統管理中,應用得當,可以讓工作事半功倍。
使用HISTTIMEFORMAT在歷史中顯示TIMESTAMP
默認情況下,history並不記錄命令的執行時間,分析起來很困難。
# 這時候可以配置HISTTIMEFORMAT環境變量,給history記錄添加上時間戳
export HISTTIMEFORMAT="%F %T "
把上面的export命令加入到~/.bashrc中即可在登錄后自動開啟history時間戳了。
其實HISTTIMEFORMAT的格式就是 strftime函數的格式,比如上面的"%F %T ",%F表示顯示出Y-M-D格式的日期,%T表示顯示出H-M-S這樣格式的時間。更多的格式,可以參考 man strftime。
用Ctrl + R搜索歷史命令
本人最常使用的history特性,當你執行了一串相當長的命令之后,你只要用關鍵字搜索一下歷史命令然后重新執行這條命令而不需要將整條命令再輸一遍。方法是:按下Ctrl+R然后輸入關鍵字。在以下示例中,我搜索”cat”,則顯示以前的命令中含有”cat”的命令“cat anaconda-ks.cfg”。按回車,就可以重新執行這條命令了,而按左箭頭鍵或右箭頭鍵則可以直接修改,改完之后按回車執行,非常方便!
【注:在命令行提示符下按下Ctrl+R,終端將顯示如下提示reverse-i-search】
用HISTSIZE控制歷史命令的總數
# 內存中的history條數,退出登陸之后會寫到~/.bash_history文件里
export HISTSIZE=450
# 文件中存儲的最大history條數,文件:~/.bash_history
export HISTFILESIZE=450
# 如果你想禁用history,不讓shell記錄命令,把HISTSIZE設為0即可
export HISTSIZE=0
使用HISTFILE改變歷史文件名
默認情況下,命令歷史被儲存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,重新登錄shell,則新文件將取代.bash_history文件用來儲存歷史命令。你可以使用這個命令來追蹤不同終端中執行的命令,屆時只需要將不同終端中所執行的命令保存在不同的歷史文件中即可。
[root@rocket ~]# vim ./.bashrc
HISTFILE=/root/my_history
重新登陸可以看到新history file已經生效
使用HISTCONTROL來消除命令歷史中的連續重復條目
export HISTCONTROL=ignoredups
使用HISTCONTROL在整個歷史中去除重復命令
export HISTCONTROL=erasedups
使用c選項清除所有的歷史命令
#清除之前的歷史命令
history -c
用HISTIGNORE讓history在存儲時忽略某些指令
有時你不想在記錄里看到諸如“pwd”,ls”之類的基本指令,可以用HISTIGNORE忽略這些指令。
注意在HISTIGNORE中添加“ls”,只忽略“ls”不忽略“ls –l”。一定要准確的寫出要忽略的指令。
export HISTIGNORE=”pwd:ls:history”
顯示命令執行時間
linux shell 具有history 功能,即會記錄已經執行過的命令,但是默認是不顯示命令的執行時間,命令的執行時間,history 已經記錄,只是沒有顯示。現在我們看看如何將執行時間顯示出來。很簡單:在/home/$USER/.bashrc中添加 HISTTIMEFORMAT環境變量即可。具体如下:
添加完成后,執行source .bashrc 讓其生效。這個時候,你再執行history就會發現已經顯示了時間。如下:
清空history 歷史
為了不留執行命令的痕跡,可以history –c即可清理歷史命令。 如下圖:
history –c會清理自己及其以前執行過的命令。
修改history 歷史保留的條目
有時我們會覺得history保留的歷史命令條目保存太少,想多保存,可以直接修改history 配置,在.bashrc 中添加如下內容:
HISTFILESIZE=2000(默認是1000)
history命令的常見用法
history n 列出最近執行過的n條命令
! Number 運行制定的編號的history 命令,編號與嘆號之間沒有空格哦
!! 重復執行上一次命令
列出最近N條歷史命令
執行指定編號的命令
重復執行上一次的命令
...