告訴 Bash 你想要它記住什麼,甚至删除不需要的記錄重寫曆史。
- 來源:https://linux.cn/article-12381-1.html
- 作者:Seth Kenlon
- 譯者:geekpi
(本文字數:2239,閱讀時長大約:2 分鐘)
運作 Bash 的 Linux 終端有内置的曆史記錄,你可以用來跟蹤最近的操作。要檢視你的 Bash 會話的曆史記錄,請使用内置指令 history:
$ echo "foo"foo$ echo "bar"bar$ history 1 echo "foo" 2 echo "bar" 3 history
與大多數指令不一樣,history 指令不是檔案系統上的可執行檔案,而是 Bash 的功能。你可以使用 type 指令來驗證:
$ type historyhistory is a shell builtin
曆史控制
shell 曆史記錄的行數上限由 HISTSIZE 變量定義。你可以在 .bashrc 檔案中設定此變量。以下将你的曆史記錄設定為 3,000 行,之後将最早的行删除以為最新指令騰出空間,該指令位于清單的底部:
export HISTSIZE=3000
還有其他與曆史相關的變量。 HISTCONTROL 變量控制哪些曆史被記錄。你可以在 .bashrc 中寫入下面的行來強制 Bash 排除以空格開頭的指令:
export HISTCONTROL=$HISTCONTROL:ignorespace
現在,如果你輸入以空格開頭的指令,那麼它将不會記錄在曆史記錄中:
$ echo "hello"$ mysql -u bogus -h badpassword123 mydatabase$ echo "world"$ history 1 echo "hello" 2 echo "world" 3 history
你也可以避免重複的條目:
export HISTCONTROL=$HISTCONTROL:ignoredups
現在,如果你一個接着一個輸入兩個指令,曆史記錄中隻會顯示一個:
$ ls$ ls$ ls$ history 1 ls 2 history
如果你喜歡這兩個忽略功能,那麼可以使用 ignoreboth:
export HISTCONTROL=$HISTCONTROL:ignoreboth
從曆史記錄中删除指令
有時你會犯一個錯誤,在 shell 中輸入了一些敏感内容,或者你隻是想清理曆史記錄,以便它更準确地表示讓某件事正常工作所采取的步驟。如果要從 Bash 的曆史記錄中删除指令,請在要删除的項目的行号上使用 -d 選項:
$ echo "foo"foo$ echo "bar"bar$ history | tail 535 echo "foo" 536 echo "bar" 537 history | tail$ history -d 536$ history | tail 535 echo "foo" 536 history | tail 537 history -d 536 538 history | tail
要停止添加 history 條目,隻要在 HISTCONTROL 環境變量中有 ignorespace,就可以在指令前添加空格:
$ history | tail 535 echo "foo" 536 echo "bar"$ history -d 536$ history | tail 535 echo "foo"
你可以使用 -c 選項清除所有會話曆史記錄:
$ history -c$ history$
history 指令的經驗教訓
操縱曆史通常沒有聽起來那麼危險,尤其是當你有目标地管理它時。例如,如果你要記錄一個複雜的問題,通常最好使用會話曆史來記錄指令,因為通過将指令插入曆史記錄,你能運作它們并進而測試過程。很多時候,不執行曆史指令會導緻忽略小的步驟或寫錯小細節。
按需使用曆史會話,并明智地控制曆史記錄。享受曆史修改吧!