チュートリアル

チュートリアル

ブラウザの「履歴」機能のように、コマンド ラインの過去のアクティビティや記録をすべて確認できる方法はありますか?

背景情報: 私はコマンドラインと対話するために OSX ターミナルを使用しています。

答え1

システム管理者またはあなた自身が$HISTFILE別の設定をしていない限り、履歴は

~/.bash_history

チュートリアル

ターミナル逆i検索

ターミナル ウィンドウがアクティブな状態で を押すとControl+Rreverse-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

多くのシェルでは、 と入力するだけでコマンド履歴を表示できます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_profileOSX および~/.bashrc他のほとんどの *nix フレーバーに当てはまります):

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

    これら 2 つのコマンドは、新しいプロンプトが表示されるたびに実行されます (ターミナルが を表示するたび、最初に開いたとき、および各コマンドの実行後)。その結果、各コマンドの実行後にそのコマンドが に書き込まれ、 がディスクから読み取られる$ため、履歴はすべてのターミナル ウィンドウで共有されます。$HISTFILE$HISTFILE

  2. およびボタンUpですDownUp一度押すと、前に実行したコマンドが表示され、もう一度押すとその前のコマンドが表示されます。 ボタンは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 が含まれている場合、スペース文字で始まる行は履歴リストに保存されません。値が ignoreups の場合、前の履歴エントリに一致する行は保存されません。値が ignoreboth の場合は、ignorespace と ignoreups の省略形です。値が erasedups の場合、現在の行に一致する以前のすべての行が、その行を保存する前に履歴リストから削除されます。上記のリストにない値はすべて無視されます。HISTCONTROL が設定されていないか、有効な値が含まれていない場合、シェル パーサーによって読み取られたすべての行が、HISTIGNORE の値に従って履歴リストに保存されます。複数行の複合コマンドの 2 行目以降はテストされず、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,&' は前の履歴行と一致しません)。`&' はバックスラッシュを使用してエスケープできます。一致を試行する前にバックスラッシュは削除されます。複数行の複合コマンドの 2 行目以降はテストされず、HISTIGNORE の値に関係なく履歴に追加されます。

これらすべてをまとめると、シェル初期化ファイル ( ~/.bash_profileOSX 用~/.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;'

関連情報