対話型シェルから取得したファイルの内容を読み取ることはできますか?

対話型シェルから取得したファイルの内容を読み取ることはできますか?

zsh私のシェルで選択したファイルを誤って削除しました:~/.shrc

3ヶ月前のバックアップを復元できました。ただし、過去数週間にファイルに含めた一部の構成が欠落している可能性があります。

ファイルを削除したシェルはまだ開いています。そのため、次のようにエイリアス、環境変数、関数をダンプしました。

alias >~/backup_alias
env   >~/backup_env
function >~/backup_function

この情報と以前のバックアップを使用すると、ほとんどのファイルを復元できます。コメントだけを除いて。私は私の機能、エイリアス、環境変数の設定について頻繁に言及し、頻繁に変更します。

シェルの起動時にファイルを取得し、シェルがまだ開いているので、後者でコマンドを実行してファイルの内容やコメントを含むファイルの一部をダンプできますか?

私が使用しているzshバージョンは5.3.1

答え1

通常、シェルが実行のためにシェルソースコードを解析するとき、解析されたファイルテキストがメモリに完全に格納される可能性はほとんどありません。

シェルがスクリプト全体をそのままメモリバッファに読み込んでいても、スクリプトの実行が完了した後にバッファが中断される可能性はほとんどありません。

最善の方法は、現在行っていることを行うことです。最近のファイルのバックアップから始めて、現在アクティブなシェルからエイリアス、機能、および環境をダンプします。その後、ファイルはこれらのフラグメントから再構成されます。

答え2

シェルはそこから読み取ったデータを読み込み、削除します。ただし、メモリの割り当てと割り当て解除の方法によっては、データまたはその一部がプロセスメモリに存在する可能性が低くなります。

gcore(提供された)シェルプロセスのpidで実行を試み、gdbそこからファイルの内容を見つけることができることを確認してください(例:grep -az 'a text you know to be in that file' core.pidGNUを使用してgrep)。

これを行う前に、メモリ領域を上書きしない可能性を最大にするために、できるだけ少ないシェルを使用してください。

フォームにテキストを入力している間に誤ってキーを押すと、^Wこのトリックが時々使用されます。firefox

関連情報