利用HISTFILESIZE和HISTSIZE在ubunutu中调整命令行History的Size
每個用戶的家目錄中都有一個文件來保存會話中的命令行歷史(默認為~/.bash_history,但由HISTFILE控制),當一個會話結束之后,就會根據命令行history的Size把該會話中的命令保存在命令行歷史文件中。
那么如何控制它的大小?
有兩個變量在控制命令行歷史的大小:
- HISTFILESIZE
HISTFILESIZE The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines by removing the oldest entries. The history file is also truncated to this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. The shell sets the default value to the value of HISTSIZE after reading any startup files.
HISTFILESIZE 歷史文件中包含的最大行數。 當這個變量被賦值時,如果需要,歷史文件被截斷,通過刪除最舊的條目來包含不超過該數量的行。 當 shell 退出時,歷史文件在寫入后也會被截斷為這個大小。 如果值為 0,則歷史文件被截斷為零大小。 非數值和小于零的數值禁止截斷。 shell 在讀取任何啟動文件后將默認值設置為 HISTSIZE 的值。
- HISTSIZE
HISTSIZE The number of commands to remember in the command history (see HISTORY below). If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files.
HISTSIZE 命令歷史記錄中要記住的命令數量(請參閱下面的歷史記錄)。 如果值為 0,則命令不保存在歷史列表中。 小于零的數值會導致每個命令都保存在歷史列表中(沒有限制)。 讀取任何啟動文件后,shell 將默認值設置為 500。
這兩個變量允許您控制歷史記錄的行為。 基本上,HISTSIZE 是當前會話期間保存的命令數,HISTFILESIZE 是跨會話記住的命令數。 因此,例如:
$ echo $HISTSIZE 10 $ echo $HISTFILESIZE 5 $ history | wc10 29 173在上面的示例中,因為 HISTSIZE 設置為 10,所以 history 返回一個包含 10 個命令的列表。 然而,如果你注銷然后重新登錄,history 將只返回 5 個命令,因為 HISTFILESIZE 設置為 5。這是因為,一旦你退出會話,你的歷史記錄的 HISTFILESIZE 行將保存到 你的歷史文件(默認為~/.bash_history,但由HISTFILE控制)。 換句話說,命令被添加到 HISTFILE 直到達到 $HISTFILESIZE 行,在該點,每個后續行添加意味著文件的第一個命令將被刪除。
你可以在你的~/.profile(或者~/.bash_profile,如果該文件存在的話)中設置這些變量的值。 首先不要將它們設置在你的~/.bashrc 中,因為它們沒有設置在那里,其次因為這會導致你有不同的 登錄與非登錄 shell 中的行為可能導致 其他問題。
允許您微調歷史行為的其他有用變量是:
-
HISTIGNORE : 這允許您忽略某些很少感興趣的常見命令。 例如,您可以設置:
export HISTIGNORE="pwd:df:du"這將導致任何以 pwd、df 或 du 開頭的命令被忽略并且不會保存在您的歷史記錄中。
-
HISTCONTROL : 這個讓你選擇歷史的運作方式。 就我個人而言,我將其設置為“HISTCONTROL=ignoredups”,這會導致它只保存一次重復的命令。 其他選項是 ignorespace 忽略以空格開頭的命令,以及 erasedups 導致在保存該行之前從歷史列表中刪除與當前行匹配的所有先前行。 ignoreboth 是 ignorespace 和 ignoreups 的簡寫。
-
HISTTIMEFORMAT : 這允許您設置歷史文件的時間格式(這個還是挺有用的)。
為了進一步微調,您有:
-
histappend bash 選項。 這可以通過運行 shopt -s histappend 或將該命令添加到您的 ~/.bashrc 來設置。 如果設置了此選項
當 shell 退出時,歷史列表會附加到由 HISTFILE 變量的值命名的文件中,而不是覆蓋該文件。
這非常有用,因為它允許您組合不同會話的歷史記錄(例如考慮不同的終端)。
-
history 命令有兩個有用的選項:
- history -a : 使最后一條命令自動寫入歷史文件
- history -r : 將歷史文件導入當前會話
例如,您可以將這兩個命令添加到您的 PROMPT_COMMAND 中(每次您的 shell 顯示提示時都會執行此命令,因此每當您啟動一個新的 shell 并在您在其中運行的每個命令之后):
export PROMPT_COMMAND='history -a;history -r;'結合起來,它們確保您打開的任何新終端將立即導入任何其他 shell 會話的歷史記錄。 結果是所有終端/shell會話的共同歷史。
總結
以上是生活随笔為你收集整理的利用HISTFILESIZE和HISTSIZE在ubunutu中调整命令行History的Size的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java内存模型JMM理解整理
- 下一篇: 【bzoj4152: [AMPPZ201