教學

教學

有沒有一種方法可以讓您查看命令列的所有過去的活動/記錄,例如瀏覽器中的「歷史記錄」功能?

一些背景知識我正在使用 OSX 終端與命令列互動。

答案1

除非您的系統管理員或您自己進行了$HISTFILE其他設置,否則您的歷史記錄將儲存在

~/.bash_history

教學

終端反向搜尋

當終端機視窗處於活動狀態時,按Control+R將會reverse-i-search出現提示。現在,只需開始輸入先前使用的命令的前幾個字元 - 整個命令就會顯示出來。這對我們這些記憶力短、命令長的人來說是無價的。

增加終端歷史記錄的大小

如果您喜歡終端提醒您先前的命令的想法,那麼您可能希望增加終端歷史記錄檔案的大小 - 以獲得更多歷史記錄儲存。

如果您有 .bash_profile

  1. 在您選擇的文字編輯器中開啟 .bash_profile

  2. 添加這個:

    HISTFILESIZE=1000000000 HISTSIZE=1000000

  3. 儲存並退出

如果您沒有 .bash_profile

  1. 啟動終端

  2. 輸入以下命令導航至主資料夾:

    cd ~/

  3. 輸入以下內容來建立 .bash_profile:

    touch .bash_profile

  4. 現在,在您喜歡的文字編輯器中編輯 .bash_profile 或在終端機視窗中鍵入以下內容以在預設 TextEdit 中自動開啟該檔案:

    open -e .bash_profile

  5. 最後,將其新增至 .bash_profile 檔案:

    HISTFILESIZE=1000000000 HISTSIZE=1000000

  6. 儲存並退出

這個很棒的教程的學分屬於類乳糖酶

答案2

在許多 shell 中,您只需輸入 即可查看命令歷史記錄history

答案3

Bash 有很多選項可以處理你的歷史記錄。首先,您的歷史記錄會保存在文字檔案中。這通常是正常的,但可以透過將變數設為其他值來~/.bash_history變更。$HISTFILE

存取歷史記錄的最簡單方法是

  1. 命令history。如果沒有選項,它只會列印您的$HISTFILE.然而,它有許多選項來操作歷史列表。您可以使用 來查看所有這些內容help history。我發現特別有用的是

    -a  append history lines from this session to the history file
    -r  read the history file and append the contents to the history list
    

    我的 bash 初始化檔案中有這一行(這是~/bash_profile在 OSX 上和~/.bashrc大多數其他 *nix 風格上):

    export PROMPT_COMMAND='history -a;history -r;'
    

    每次我收到新提示時(每次終端顯示$、首次開啟時以及每個命令運行後),都會執行這兩個命令。結果是我的歷史記錄在所有終端視窗之間共享,因為每個命令運行後,該命令都會被寫入$HISTFILE,然後$HISTFILE從磁碟讀取。

  2. Up按鈕Down。點擊Up一次將顯示您正在執行的上一個命令,再次點擊將顯示先前的命令,依此類推。該Down按鈕將使您向另一個方向移動。

    在大多數現代系統(例如 OSX)中預設啟用此功能,但如果未啟用此行為,您可以透過將這些行新增至名為的檔案中來啟用此行為~/.inputrc

     "\e[A": history-search-backward
     "\e[B": history-search-forward
    

Bash 還提供了相當多的選項和變數來控制歷史行為(其中許多在 @Chris 的非常好的答案中提到,我會提到一些他沒有提到的):

  • histappend

    If  set,  the history list is appended to the file named by the 
    value of the HISTFILE variable when the shell exits, rather than
    overwriting the file.
    

    同樣,這應該是預設值。如果您發現歷史記錄在終端機會話中沒有保留,請將此行新增至您的~/.bash_profile

    shopt -s histappend
    
  • 變數HISTCONTROL

    以冒號分隔的值列表,控制指令如何保存在歷史列表中。如果值清單包含ignorespace,則以空格字元開頭的行不會儲存在歷史清單中。 ignoredups 值會導致不儲存與先前歷史記錄條目相符的行。 ignoreboth 值是ignorespace 和ignoredups 的簡寫。 erasedups 值會導致在儲存該行之前從歷史清單中刪除與目前行相符的所有先前行。任何不在上面列表中的值都將被忽略。如果 HISTCONTROL 未設置,或不包含有效值,則 shell 解析器讀取的所有行都會保存在歷史列表中,具體取決於 HISTIGNORE 的值。多行複合指令的第二行和後續行不進行測試,無論 HISTCONTROL 的值為何,都會加入到歷史記錄中。

  • 變數HISTIGNORE

    以冒號分隔的模式列表,用於決定哪些命令列應保存在歷史列表中。每個模式都錨定在行的開頭,並且必須匹配完整的行(沒有隱式的*' is appended). Each pattern is tested against the line after the checks specified by HISTCONTROL are applied. In addition to the normal shell pattern match‐ ing characters,&' 與前一個歷史行匹配。`&' 可以使用反斜線進行轉義;在嘗試匹配之前會刪除反斜線。

將所有這些放在一起,我的 shell 初始化檔案中有以下幾行(~/.bash_profile對於 OSX~/.bashrc對於大多數其他檔案):

export HISTCONTROL=ignoredups
export HISTSIZE=10000
export HISTIGNORE="pwd:df:du:ls"

## Make Bash append rather than overwrite the history on disk:
shopt -s histappend

## history -a causes the last command to be written to the
## history file automatically and history -r imports the history
export PROMPT_COMMAND='history -a;history -r;'

相關內容