先日、私はAU Q&Aを読んでいて、bashコマンドを使用しました:
inxi -????
問題は今日????を構成するキャラクターを覚えていないことです。コマンドとパラメーターをドキュメントスプレッドシートに入れたい。この回答に基づいて( ターミナルで履歴をリコールする方法 )このコマンドを使用しました:
$ cat .bash_history | grep inxi
inxi -b
Sudo apt install inxi
inxi -b
しかし、私が望むコマンドは、歴史がずっと前になってもありません。古い履歴以来、ターミナルでinxi
コマンドを何度も使用しましたが、どれも表示されません。
私も試しました Ctrl+R+inxi 運もなく。常に複数のターミナルウィンドウを開くのは、履歴が特定のウィンドウに関連付けられているからですか?
grep
bash履歴ファイルに別の方法はありますか?
ターミナルコマンドの前に Space Bar 歴史から抑圧されるように。
マシンにアクセスしないと何が起こったのかわかりませんが、ここでは、履歴システムがどのように機能するかについて簡単に説明します。
開いている各ターミナルには、独自の履歴バッファがあります。これらのバッファは、端末が閉じられたときに$HISTFILE
に追加されます(バッファがいっぱいになったときもありますが、その頻度はわかりません)。履歴でコマンドを検索する方法は、単に実行することです:
history | grep command
ただし、コマンドが別のシェルで実行された場合、現在のシェルの履歴には表示されません。これを修正するには、開いているシェルをすべて閉じ、新しいターミナルウィンドウを開いて履歴を再度検索します。
それでも解決しない場合は、$HISTFILE
に保存されているコマンドのしきい値を超えている可能性があります。 $HISTFILE
の動作はさまざまな環境変数によって制御されます(完全なリストについてはman bash
を参照してください)が、関連するものは次のとおりです。
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.
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.
これらの値を高く設定するほど、$HISTFILE
に保持するコマンドが増えます。たとえば、私は使用します:
HISTSIZE=999999
HISTFILESIZE=999999
あるシェルから別のシェルに履歴をインポートする場合は、history
コマンドを使用できます。
$ help history | grep -E -- '-a|-r'
-a append history lines from this session to the history file
-r read the history file and append the contents to the history
したがって、history -a
を実行して1つの端末から履歴を書き込み、次にhistory -w
を実行して別の端末から履歴を読み取ります。これで、history
を実行すると、両方のシェルの履歴が表示されます。
最後に、これらの行を~/.bashrc
に追加することで、すべての端末に同じ履歴を共有させることができます。
## 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'
これを追加することもお勧めします。
## Make Bash append rather than overwrite the history on disk:
shopt -s histappend
あなたのコマンドは私のために働いた...
$ cat .bash_history | grep inxi
inxi -b
Sudo apt install inxi
inxi -b
inxi -Fxz -c 0 > inxi_list.txt
inxi -Fxz
inxi -Fxz
Sudo inxi -Fxz
また、定期的に履歴をファイルにコピーして保存します。
history > history_$(date '+%Y-%m-%d_%H:%M:%S')_$(hostname).txt