zshを実行している2つの端末を開きました。私の現在の履歴オプションセットは次のとおりです。
export HISTFILE=~/.histfile
export HISTSIZE=10000
export SAVEHIST=10000
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_EXPIRE_DUPS_FIRST
setopt HIST_SAVE_NO_DUPS
setopt APPEND_HISTORY
setopt EXTENDED_HISTORY
history
を入力するか、端末にを入力すると、fc -l
最後の16個のコマンド(番号が付いています)が表示されます。これらの履歴は両方のシェルで異なり、両方とも私が内部で見たものとは異なりました.histfile
。
man zshoptions
ページからわかる限り、これはシェルを終了した後にそのコマンドが履歴に追加されると予想されます。
この場合、その時点までの各端末の個人履歴はどこに保存されますか?
答え1
このINC_APPEND_HISTORY
オプションを設定すると、履歴項目はすぐに記録されます。また、SHARE_HISTORY
この値を設定すると、新しいシェルが履歴から削除したいのと同じように聞こえる項目を選択できます。即時記録の書き換えは、これらのオプションによって異なります。シェルの特定のインスタンスで他のコマンドに興味がないように設定を解除し、INC_APPEND_HISTORY
次を使用してそのシェルの履歴を削除しますfc -R
。
% echo super secret password
super secret password
% echo whoopsie
whoopsie
% history -2
18030 echo super secret password
18031 echo whoopsie
% fc -R $HISTFILE
% history -3
36060 vim ~/.zshrc
36061 man readpassphrase
36062 mutt
%
次に、$EDITOR $HISTFILE
超パスワードが履歴ファイルにないことを確認します(また、!機能(または機能の配列)がある可能性があります。zshaddhistory
その場合、その機能(またはその機能)が実際に実行していることを確認する必要があります)。を使用すると、アイテムがINC_APPEND_HISTORY
にある可能性があるため、履歴ファイルを編集して誤った$HISTFILE
アイテムを削除し、履歴ファイルとシェルからそのアイテムを消去する必要がfc -R $HISTFILE
あります。新しいシェルが間違った履歴エントリをキャプチャしたと思われる場合は、すべてのシェルでアクションを実行するか、すべて閉じて、間違った行が履歴ファイルに書き戻されないことをINC_APPEND_HISTORY
確認する必要があります。SHARE_HISTORY
fc -R