上書きされた .zshrc を実行中の zsh で回復する

上書きされた .zshrc を実行中の zsh で回復する

誤って実行されたコマンドの後に、数百行の設定を含むファイルを誤って上書きしてしまいました.zshrc。しかし、この事件の前にzshを開いていた端末が5つ残っており、結果としてそれらは影響を受けません。しかし、新しいシェルを開くとzsh の設定全体が失われ、バックアップもありません。

これら5つの端末を使い続けることもできますが、メモリからzshrcを抽出するどうやら、zsh は実行時にファイルをメモリにロードし、強制終了されるまでそこに保存するようです。私はこれを試しました:

sudo dd if=/dev/mem bs=1M count=256|hexdump -C > ramfile

しかし、私が得たのは zshrc とは無関係なデータだけです。

どのような解決策でもいただければ幸いです。

答え1

ディレクトリの使用を提案しました/proc/PID/fd/が、zsh は解析後にその構成を指すファイル記述子を閉じます。このことから、元の形式のファイルは消えてしまったのではないかと推測します。

ただし、zsh の現在の構成をダンプする方法があり、それを使用して再構築できる場合があります。この他の質問の答えが思い浮かびます:

すべてのキーバインディング:

for m ($keymaps) bindkey -LM $m

すべてのZLEユーザーウィジェット

zle -lL

すべてのzstyles:

zstyle -L

ロードされたモジュール:

zmodload -L

すべての変数:

typeset -p +H -m '*'

モジュールがロードされるとzsh/parameters、エイリアス、オプション、関数なども含まれます...

答え2

自己回答

上書きされた zsh を回復したときに発見した他のいくつかのこと:

zshrcのコピーがまだ存在するかどうかを確認します

これは私の場合は起こりませんでしたが、もし偶然どこかにバージョンがある場合.zshrc(特に、選択したコードエディタが特定の場所にファイルを自動保存する場合)、小さいまだどこかに存在している可能性があります。それを見つけるには、次のコマンドを実行します。

sudo find . -name ".zshrc"

以下の特定の場所を調べてください:

  • Vim/Vi ユーザー向け (設定により異なります - /var/tmp~/.vim/sessionsまたは が含まれる場合があります~/.local/share/nvim/swap)
  • Atomユーザーの場合 -~/.atom/recovery
  • ~/.zshrc~Emacsユーザーの場合 - デフォルトでは、 availableというファイルが存在する可能性があります
  • 一般的な -/tmp

手動で追加されたパスの回復

このスクリプトは、追加されたすべてのディレクトリを出力します$PATH:

import subprocess
paths = subprocess.check_output("echo $PATH", shell=True, text=True)
list = paths.split(":")
for item in list:
    print("export PATH=" + item + ":$PATH")

特定のパラメータを回復する

を使用しsetてすべてのパラメータをリストし、次にデフォルトのエディタ( )やページャー()grepなどの必要なものを選択します。EDITORPAGER

答え3

私も同じ問題を抱えていました。幸いにも、~/.zshrc.backup ファイルには .zshrc ファイルの以前の内容が含まれていました。その内容をコピーして復元しました。以前の .zshrc を実行した状態でタブを閉じていない場合は、~/.zshrc.backup を確認することをお勧めします。(macOS)

答え4

私も同じ問題を抱えていましたが、ファイル内の正確な文字列を覚えていました。以下を使用して内容を検索し、回復しました。

grep -i -a -B100 -A100 'text in the deleted file' /dev/sda1

参考文献: https://unix.stackexchange.com/a/150423/503193

関連情報