這些技巧讓 Bash 命令歷史更加有用
告訴 Bash 你想要它記住什么,甚至刪除不需要的記錄重寫歷史。
運行 Bash 的 Linux 終端有內(nèi)置的歷史記錄,你可以用來跟蹤最近的操作。要查看你的 Bash 會話的歷史記錄,請使用內(nèi)置命令 history:
- $ echo "foo"
- foo
- $ echo "bar"
- bar
- $ history
- 1 echo "foo"
- 2 echo "bar"
- 3 history
與大多數(shù)命令不一樣,history 命令不是文件系統(tǒng)上的可執(zhí)行文件,而是 Bash 的功能。你可以使用 type 命令來驗證:
- $ type history
- history is a shell builtin
歷史控制
shell 歷史記錄的行數(shù)上限由 HISTSIZE 變量定義。你可以在 .bashrc 文件中設(shè)置此變量。以下將你的歷史記錄設(shè)置為 3,000 行,之后將最早的行刪除以為最新命令騰出空間,該命令位于列表的底部:
- export HISTSIZE=3000
還有其他與歷史相關(guān)的變量。 HISTCONTROL 變量控制哪些歷史被記錄。你可以在 .bashrc 中寫入下面的行來強制 Bash 排除以空格開頭的命令:
- export HISTCONTROL=$HISTCONTROL:ignorespace
現(xiàn)在,如果你輸入以空格開頭的命令,那么它將不會記錄在歷史記錄中:
- $ echo "hello"
- $ mysql -u bogus -h badpassword123 mydatabase
- $ echo "world"
- $ history
- 1 echo "hello"
- 2 echo "world"
- 3 history
你也可以避免重復(fù)的條目:
- export HISTCONTROL=$HISTCONTROL:ignoredups
現(xiàn)在,如果你一個接著一個輸入兩個命令,歷史記錄中只會顯示一個:
- $ ls
- $ ls
- $ ls
- $ history
- 1 ls
- 2 history
如果你喜歡這兩個忽略功能,那么可以使用 ignoreboth:
- export HISTCONTROL=$HISTCONTROL:ignoreboth
從歷史記錄中刪除命令
有時你會犯一個錯誤,在 shell 中輸入了一些敏感內(nèi)容,或者你只是想清理歷史記錄,以便它更準(zhǔn)確地表示讓某件事正常工作所采取的步驟。如果要從 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 環(huán)境變量中有 ignorespace,就可以在命令前添加空格:
- $ history | tail
- 535 echo "foo"
- 536 echo "bar"
- $ history -d 536
- $ history | tail
- 535 echo "foo"
你可以使用 -c 選項清除所有會話歷史記錄:
- $ history -c
- $ history
- $
history 命令的經(jīng)驗教訓(xùn)
操縱歷史通常沒有聽起來那么危險,尤其是當(dāng)你有目標(biāo)地管理它時。例如,如果你要記錄一個復(fù)雜的問題,通常最好使用會話歷史來記錄命令,因為通過將命令插入歷史記錄,你能運行它們并從而測試過程。很多時候,不執(zhí)行歷史命令會導(dǎo)致忽略小的步驟或?qū)戝e小細節(jié)。
按需使用歷史會話,并明智地控制歷史記錄。享受歷史修改吧!