使用history
能夠查看當前用戶最近執行的HISTSIZE
條命令,這些記錄被存儲在HISTFILE
文件中,在bash
啓動時會自動加載到歷史記錄緩衝隊列,其簡單使用方法以下:shell
> history # 顯示所有歷史記錄 1 ip a 2 exit 3 ls -la 4 history > history 2 # 顯示最後兩條歷史記錄 4 history 5 history 2
使用Ctrl + R
快捷鍵能夠進入歷史記錄搜索模式,根據用戶輸入的字符按照最近最類似原則將搜索結果打印到命令提示符後面,輸入回車能夠直接執行這條結果。另外一種方式是使用grep
配合管道進行批量搜索:安全
> history | grep ffmpeg | grep gif | grep yuv444p 119 ffmpeg -y -f gif -i 79557166.gif -c:v libx264 -vf format=yuv444p yuv444p.mp4 120 ffmpeg -y -f gif -i 79557166.gif -c:v libx264 -vf format=yuv444p yuv444p.mkv
使用!!
可以當即執行歷史記錄中的最後一條命令,也就是重複上一條命令;使用![number]
可以根據number
執行對應編號的歷史命令;使用![string]
可以根據string
按照最近最類似原則執行歷史命令。這類命令最人性化的是會在執行前打印要執行的命令(讓你知道系統是怎麼掛的)。bash
> date Sun 23 Feb 2020 06:18:16 PM CST > !! # 不安全 date Sun 23 Feb 2020 06:18:18 PM CST > !907 # 危險 make make: \*\*\* No targets specified and no makefile found. Stop. > !shut # 很是危險 shutdown now
經過!
開頭的命令直接執行對應的歷史記錄是十分危險的,尤爲是在高權限用戶環境下,所以建議在執行以前經過如下方式查看對應的命令:服務器
> !!:p #查看記錄中最後一條命令 > !123:p #查看記錄中第123條命令 > !sys:p #查看記錄中sys開頭的最近一條命令
使用history -d <hist_num>
能夠刪除指定序號的歷史記錄,該模式只接收一個參數,其餘參數會被忽略,利用這一特性能夠實如今bash中執行不被記錄的命令。session
> echo "secret command";history -d $(history 1) secret command
若是你想徹底清除當前會話內的使用痕跡,能夠使用history -c
清空歷史記錄緩衝隊列,值得注意的是這個命令不會清空歷史記錄文件。app
[warning]
注意:除了上述方法外,用戶還能夠經過
unset HISTFILE
直接取消歷史記錄功能,這對服務器的平常維護來講是十分危險的。
在退出終端時bash會自動將當前會話中執行過的命令寫入歷史記錄文件中,默認寫入方式爲覆蓋。你也能夠經過-w
和-a
模式將當前會話中的命令手動寫入文件中:spa
> history -w # 緩衝隊列覆蓋寫入文件 > history -a # 當前會話的命令追加寫入文件
以Ubuntu 20.04 LTS
爲例,默認狀況下歷史記錄相關的環境變量被定義在~/.bashrc
文件中。code
經過修改HISTTIMEFORMAT
變量能夠對歷史記錄添加時間戳,%F
表明日期,%T
表明時間。orm
> export HISTTIMEFORMAT='%F %T ' > echo 'history with time' > history 1 1032 2020-02-23 17:01:26 history
經過修改HISTCONTROL
變量能夠控制history
的記錄策略,以下表所示:隊列
可選值 | 記錄策略 |
---|---|
ignoredups | 默認,不記錄連續的相同命令 |
ignorespace | 不記錄空格開頭的命令 |
ignoreboth | ignoredups 和 ignorespace 的組合 |
erasedups | 不記錄重複的命令 |
咱們還能夠經過設置HISTIGNORE
變量指定要忽略的命令,命令之間用:
分隔:
> echo 'export HISTIGNORE="ls:cd"' >> ~/.bashrc > source ~/.bashrc
當前用戶的歷史記錄默認存儲到~/.bash_history
文件中,能夠經過修改HISTFILE
變量改變歷史記錄存儲的位置。
> echo 'export HISTFILE="<new_histfile_path>"' >> ~/.bashrc > source ~/.bashrc
變量HISTSIZE
決定了使用history
時顯示的記錄數量,其默認值爲1000
。
> echo $HISTSIZE 1000 > HISTSIZE=200 # 僅針對當前會話生效 > sed -i 's/^HISTSIZE=1000/HISTSIZE=200/' ~/.bashrc # 永久生效 > echo $HISTSIZE 200
變量HISTFILESIZE
定義了存儲在文件中的歷史命令總數,默認值爲2000
。歷史記錄的存儲方式相似於隊列,bash
初始化時會將HISTFILE
文件中存儲的全部歷史記錄加載到內存中,以隊列的形式存儲,用戶在使用過程當中產生的命令也會被添加到隊列中,每次用戶調用history
都會顯示最近的HISTSIZE
條記錄。
在終端退出時會將當前會話(session)中產生的記錄寫入到文件中,爲了防止同時開啓多個終端致使歷史記錄丟失,建議在~/.bashrc
文件中添加shopt -s histappend
,讓終端在退出時將當前會話產生的歷史記錄追加寫入到HISTFILE
文件中。
[warning] 注意:默認狀況下的歷史記錄寫入方式爲覆蓋,例如:開啓終端A -> 開啓終端B -> 關閉終端A -> 關閉終端B,這個操做序列會致使終端A在運行過程當中產生的歷史記錄所有丟失。
斷電、非法關機等特殊狀況會讓bash
沒法正常結束,進而致使當前會話的歷史記錄丟失。能夠在~/.bashrc
文件中添加如下內容實現自動追加寫入每條命令:
PROMPT_COMMAND=」history -a」
在bash
的配置文件中,若是設置了PROMPT_COMMAND
環境變量,則在每次顯示命令提示符(例如:remilia@CT7GK:~$
)以前,該變量的值將被做爲命令執行,這裏咱們設置爲自動執行執行history -a
,將歷史記錄追加寫入到文件中。