什么是history
? ? 在Linux系統(tǒng)日積月累的使用中,我們會輸入很多命令。而在我們想重復(fù)上一個命令時踊赠,通過使用方向鍵向上翻就可以查看我們已經(jīng)輸入和使用過的命令肺魁。那大家有沒有想過這個命令保存在什么地方电湘,最大又會保存多少條記錄了?今天我們就來學(xué)習(xí)history命令。
? ? 從history字面意思就可以知道該命令主要用于查看用戶曾經(jīng)輸入和使用過的命令胡桨。使用該命令可以減少我們?nèi)粘V貜?fù)輸入命令的次數(shù)官帘。其常用選項如下所示:
選項 | 說明 |
---|---|
-c | 清除歷史命令 |
-d offset | 刪除指定位置的history命令 |
-a | 添加新的歷史命令記錄 |
-r | 從historyfile讀取歷史記錄做為當(dāng)前的歷史記錄 |
-w | 將當(dāng)前的歷史記錄保存并覆蓋到historyfile中 |
常用用法
重復(fù)上一次的執(zhí)行命令
? ? 在日常使用過程中,最常用的場景就是==重復(fù)執(zhí)行上一次的命令==昧谊,對于這種場景刽虹,我想大家用得最多應(yīng)當(dāng)是使用方向鍵向上或向下進行翻滾來實現(xiàn)吧。但可以實現(xiàn)這種場景共有4種方法呢诬,分別如下:
- 使用方向鍵向上或向下翻滾涌哲,按Enter鍵
- 輸入!!,按Enter鍵
- 輸入!-1尚镰,按Enter鍵
- 輸入Ctrl+P阀圾,按Enter鍵
重復(fù)執(zhí)行指定的命令
? ? 在日常使用過程,我們不僅僅希望執(zhí)行上一次的命令狗唉,而是想執(zhí)行指定的歷史命令時初烘,則有兩種方法
- 指定ID,則可以使用!HistoryID分俯,如我們想執(zhí)行historyID為1993的命令肾筐,則可以按以下形式進行輸入
[root@localhost ~]# !1993
- 指定命令進行模糊查詢,則可以使用!HistoryCmd缸剪,==這里搜索的命令從最后一條歷史記錄向前搜索吗铐,找到滿足條件的命令即執(zhí)行==,示例如下:
[root@localhost ~]# cat -n ~/.bash_history | grep du
562 du -ah --exclude="*/.*" .
564 du -ah .
565 du -ah . | more
566 du -ah --exclude="*/.*" .
567 du -h --max-depth=1 /
568 du -h --max-depth=1 / | sort -hr
[root@localhost ~]# !du
#找到離當(dāng)前最近執(zhí)行的命令
du -h --max-depth=1 / | sort -hr
搜索曾經(jīng)執(zhí)行的命令
? ? 在Window中如果大家要搜索文件常用快捷鍵Ctrl+F杏节,而Linux中搜索曾經(jīng)執(zhí)行過的命令則使用快捷鍵Ctrl+R
# 在當(dāng)前Shell中按Ctrl+R唬渗,而后輸入命令即可
(reverse-i-search)`du': cat -n ~/.bash_history | grep du
給歷史命令添加時間戳
# 預(yù)先定義一個環(huán)境變量
[root@localhost ~]# export HISTTIMEFORMAT=' %F %T '
root@localhost ~]# history
1009 2018-08-14 23:18:22 pidof sshd
1010 2018-08-14 23:18:22 pidof -o 1995
1011 2018-08-14 23:18:22 pidof sshd -o 1995
清除歷史命令
? ? 雖然歷史命令方便和減少日常需要輸入執(zhí)行命令的時間,但也會存在安全隱患奋渔。如果不小心在歷史命令輸入連接其他Linux的地址镊逝、MySQL等密碼。一旦出現(xiàn)系統(tǒng)被黑掉或被非管理員看到卒稳,則可能存在嚴(yán)重的隱患蹋半,這時候大家肯定會想到清除歷史命令。這時可以使用-c選項
[root@localhost ~]# history -c
? ? 在使用以下選項充坑,就真的把歷史命令給清空了嗎减江?答案當(dāng)然不是。在下次重新登錄后捻爷,歷史命令依然存在辈灼,這是什么原因?
-c 選項只是暫時把Linux系統(tǒng)內(nèi)存中的歷史命令給清空也榄,當(dāng)用戶退出時巡莹,就不會有歷史命令記錄追加到.bash_history中司志,當(dāng)用戶重新登錄后,系統(tǒng)會重新加文件.bash_history降宅,而歷史命令便又會重新顯示出來了骂远。
? ? 真正能完全清空歷史命令的做法如下:
- 方法一:
[root@localhost ~]# history -c ; history -w
- 方法二:清空~/.bash_history文件
[root@localhost ~]# echo "" > ~/.bash_history
history配置
- 設(shè)置歷史記錄時間:
[root@localhost ~]# export HISTTIMEFORMAT=' %F %T '
- 控制歷史命令記錄個數(shù)
#設(shè)置內(nèi)存中保存的命令記錄個數(shù)
[root@localhost ~]# export HISTSIZE=300
# 設(shè)置.bash_history中保存的命令記錄個數(shù)
[root@localhost ~]# export HISTFILESIZE=300
- 更改默認(rèn)保存文件
? ? 系統(tǒng)默認(rèn)配置會將歷史命令保存到~/.bash_history中,如果要保存到其他文件腰根,可以按以下方法進行更改
[root@localhost ~]# export HISTFILE=~/.historycmd.txt
- 其他配置
# 清除整個命令歷史記錄中的重復(fù)記錄
[root@localhost ~]# export HISTCONTROL=erasedups
# 忽略命令歷史記錄中連續(xù)重復(fù)的記錄
[root@localhost ~]# export HISTCONTROL=ignoredups
# 忽略命令歷史記錄中以空格開始的記錄
[root@localhost ~]# export HISTCONTROL=ignorespace
# 忽略命令歷史記錄的重復(fù)記錄和以空格開始的記錄
[root@localhost ~]# export HISTCONTROL=ignoreboth