刪除 Linux 上最近 n 條命令的歷史記錄


在 Linux 中,命令歷史記錄是先前執行命令的記錄。命令歷史記錄儲存在一個名為 .bash_history 的檔案中,該檔案位於每個使用者的 home 目錄中。history 命令可用於檢視命令歷史記錄,並且 history 命令也可與其他命令(如 grep)一起使用,以搜尋歷史記錄中的特定命令。歷史記錄中的命令分配了一個編號,可用於透過在前面加上感嘆號 (!) 來快速執行先前命令。例如,輸入“!123”將執行歷史記錄中編號為 123 的命令。

還有一些選項可以更改命令歷史記錄的行為。

  • history 命令可以與 -c 選項一起使用以清除命令歷史記錄。

  • HISTFILE 環境變數可用於指定用於儲存命令歷史記錄的不同檔案。

  • HISTSIZE 和 HISTFILESIZE 環境變數可分別用於指定歷史記錄中儲存的最大命令數和歷史記錄檔案的最大大小。

  • HISTIGNORE 變數可用於忽略歷史記錄中的特定命令或命令模式。

  • set -o history 啟用預設情況下停用的 shell 的命令歷史記錄。

history 命令和 .bash_history 檔案中的命令之間的區別

history 命令是 Bash(大多數 Linux 系統上的預設 shell)中的內建命令,允許您檢視在當前 shell 會話中執行的命令。當您執行 history 命令時,它將顯示已執行命令的列表,最近的命令位於列表的頂部。每個命令都分配了一個編號,可用於透過在前面加上感嘆號 (!) 來快速執行先前命令。例如,輸入“!123”將執行歷史記錄中編號為 123 的命令。

.bash_history 檔案另一方面,是一個純文字檔案,用於儲存特定使用者的命令歷史記錄。該檔案位於使用者的 home 目錄中,並在 shell 中每次執行命令時更新。可以使用文字編輯器檢視 .bash_history 檔案的內容,並且可以透過複製和貼上到 shell 中來執行命令。

從 .bash_history 刪除最後 n 行

您可以使用 sed 命令從 .bash_history 檔案中刪除最後 n 行,sed 命令是一個用於編輯文字檔案的命令列實用程式。從 .bash_history 檔案中刪除最後 n 行的基本語法為:

sed -i -e :a -e '$d;N;2,N;ba' -e 'P;D' ~/.bash_history

此命令將刪除檔案的最後一行。要刪除最後 n 行,可以使用以下命令:

sed -i -e :a -e "1,${n}d" ~/.bash_history

這裡,n 是您要從 .bash_history 檔案中刪除的最後幾行的數量。此命令將從 .bash_history 檔案中刪除最後 n 行。

請記住,此命令將直接更改 .bash_history 檔案,並且更改將立即生效。此外,這些更改是不可逆的,因此,如果您不確定操作,建議在進行任何修改之前備份檔案。

還值得一提的是,這隻會從歷史記錄檔案中刪除命令,而不會從當前會話歷史記錄中刪除命令,因此您仍然可以使用“history”命令檢視它們,但它們不會儲存在將來的會話中。

刪除歷史記錄中的最後 n 行

要刪除當前 shell 會話歷史記錄中的最後 n 行,可以使用 history 命令,後跟 -d 選項,然後是您要刪除的命令的行號。

例如,要從歷史記錄中刪除最後 3 條命令,可以使用以下命令:

history -d $(($(history | tail -n1 | awk '{print $1}')-3)) $(($(history | tail -n1 | awk '{print $1}')-1))

此命令將從當前歷史記錄中刪除最後 3 條命令,包括用於獲取最後一條命令編號的“history”命令和用於提取它的“awk”命令。

您還可以透過指定起始和結束行號來刪除一系列命令。例如,要刪除命令 10 到 15,可以使用以下命令:

history -d 10 15

請記住,這隻會從當前會話歷史記錄中刪除命令,並且不會影響 .bash_history 檔案或任何其他會話歷史記錄。此外,這些更改是不可逆的,因此,如果您不確定操作,建議在進行任何修改之前備份歷史記錄。

Bash 5 以來歷史記錄中的更改

2019 年 1 月釋出的 Bash 5 版本中的歷史記錄功能相較於先前版本引入了多項更改和改進。一些最顯著的更改包括:

  • 時間戳 - Bash 5 現在在命令歷史記錄中包含時間戳,允許您檢視每個命令執行的時間。可以透過將 HISTTIMEFORMAT 變數設定為指定時間戳格式的值來啟用此功能。

  • 追加到歷史記錄檔案 - 在先前版本的 Bash 中,每次執行新命令時都會覆蓋歷史記錄檔案。使用 Bash 5,歷史記錄檔案現在被追加,這意味著先前會話的歷史記錄不會丟失。

  • Histignore - 新變數 HISTIGNORE 允許您忽略將特定命令或命令模式新增到歷史記錄檔案。

  • Largefile - Bash 5 現在支援大型歷史記錄檔案,允許歷史記錄檔案的大小超過先前版本中 32,768 條命令的限制。

  • 增量搜尋 - Bash 5 包括歷史記錄的增量搜尋功能,允許您透過鍵入命令的一部分並按向上箭頭來搜尋命令。

HISTSIZE 和 HISTFILESIZE 現在可以具有無限值,這意味著分別對歷史記錄中儲存的命令數量和歷史記錄檔案的最大大小沒有限制。

總的來說,這些新功能使管理和搜尋命令歷史記錄變得更加容易,並且使使用長曆史記錄檔案更加方便,這在您必須使用持續時間長的會話時特別有用。

結論

Linux 中的歷史記錄功能是一個強大的工具,允許您輕鬆檢視和執行以前的命令,以及根據需要從歷史記錄中刪除特定命令。.bash_history 檔案儲存特定使用者的命令歷史記錄,跨多個 shell 會話,可以使用 sed 等命令列工具進行編輯。history 命令允許您檢視在當前 shell 會話中執行的命令,並從當前會話歷史記錄中刪除特定命令。

更新於: 2023 年 1 月 24 日

11K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告