Linux 基礎教程 44-history命令

Surpassme發表於2018-08-31

什麼是history

    在Linux系統日積月累的使用中,我們會輸入很多命令。而在我們想重複上一個命令時,通過使用方向鍵向上翻就可以檢視我們已經輸入和使用過的命令。那大家有沒有想過這個命令儲存在什麼地方,最大又會儲存多少條記錄了?今天我們就來學習history命令。
    從history字面意思就可以知道該命令主要用於檢視使用者曾經輸入和使用過的命令。使用該命令可以減少我們日常重複輸入命令的次數。其常用選項如下所示:

選項 說明
-c 清除歷史命令
-d offset 刪除指定位置的history命令
-a 新增新的歷史命令記錄
-r 從historyfile讀取歷史記錄做為當前的歷史記錄
-w 將當前的歷史記錄儲存並覆蓋到historyfile中

常用用法

重複上一次的執行命令

    在日常使用過程中,最常用的場景就是==重複執行上一次的命令==,對於這種場景,我想大家用得最多應當是使用方向鍵向上或向下進行翻滾來實現吧。但可以實現這種場景共有4種方法,分別如下:

  • 使用方向鍵向上或向下翻滾,按Enter鍵
  • 輸入!!,按Enter鍵
  • 輸入!-1,按Enter鍵
  • 輸入Ctrl+P,按Enter鍵

重複執行指定的命令

    在日常使用過程,我們不僅僅希望執行上一次的命令,而是想執行指定的歷史命令時,則有兩種方法

  • 指定ID,則可以使用!HistoryID,如我們想執行historyID為1993的命令,則可以按以下形式進行輸入
[root@localhost ~]# !1993
  • 指定命令進行模糊查詢,則可以使用!HistoryCmd,==這裡搜尋的命令從最後一條歷史記錄向前搜尋,找到滿足條件的命令即執行==,示例如下:
[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
#找到離當前最近執行的命令
du -h --max-depth=1 / | sort -hr

搜尋曾經執行的命令

    在Window中如果大家要搜尋檔案常用快捷鍵Ctrl+F,而Linux中搜尋曾經執行過的命令則使用快捷鍵Ctrl+R

# 在當前Shell中按Ctrl+R,而後輸入命令即可
(reverse-i-search)`du`: cat -n ~/.bash_history | grep du

給歷史命令新增時間戳

# 預先定義一個環境變數
[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

清除歷史命令

    雖然歷史命令方便和減少日常需要輸入執行命令的時間,但也會存在安全隱患。如果不小心在歷史命令輸入連線其他Linux的地址、MySQL等密碼。一旦出現系統被黑掉或被非管理員看到,則可能存在嚴重的隱患,這時候大家肯定會想到清除歷史命令。這時可以使用-c選項

[root@localhost ~]# history -c

    在使用以下選項,就真的把歷史命令給清空了嗎?答案當然不是。在下次重新登入後,歷史命令依然存在,這是什麼原因?

-c 選項只是暫時把Linux系統記憶體中的歷史命令給清空,當使用者退出時,就不會有歷史命令記錄追加到.bash_history中,當使用者重新登入後,系統會重新加檔案.bash_history,而歷史命令便又會重新顯示出來了。

    真正能完全清空歷史命令的做法如下:

  • 方法一:
[root@localhost ~]# history -c ; history -w
  • 方法二:清空~/.bash_history檔案
[root@localhost ~]# echo "" > ~/.bash_history

history配置

  • 設定歷史記錄時間:
[root@localhost ~]# export HISTTIMEFORMAT=` %F %T `
  • 控制歷史命令記錄個數
#設定記憶體中儲存的命令記錄個數
[root@localhost ~]# export HISTSIZE=300
# 設定.bash_history中儲存的命令記錄個數
[root@localhost ~]# export HISTFILESIZE=300
  • 更改預設儲存檔案
        系統預設配置會將歷史命令儲存到~/.bash_history中,如果要儲存到其他檔案,可以按以下方法進行更改
[root@localhost ~]# export HISTFILE=~/.historycmd.txt
  • 其他配置
# 清除整個命令歷史記錄中的重複記錄
[root@localhost ~]# export HISTCONTROL=erasedups
# 忽略命令歷史記錄中連續重複的記錄
[root@localhost ~]# export HISTCONTROL=ignoredups
# 忽略命令歷史記錄中以空格開始的記錄
[root@localhost ~]# export HISTCONTROL=ignorespace
# 忽略命令歷史記錄的重複記錄和以空格開始的記錄
[root@localhost ~]# export HISTCONTROL=ignoreboth

本文同步在微信訂閱號上釋出,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼新增關注:
MyQRCode.jpg

相關文章