아직 실행 중인 zsh를 사용하여 덮어쓴 .zshrc를 복원합니다.

아직 실행 중인 zsh를 사용하여 덮어쓴 .zshrc를 복원합니다.

명령을 잘못 실행한 후 .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

모든 z 스타일:

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
  • Emacs 사용자의 경우 - 기본적으로 ~/.zshrc~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. 예: 기본 편집기( EDITOR) 및 호출기( PAGER)

답변3

나는 같은 문제에 직면했습니다. 다행히 ~/.zshrc.backup 파일에는 내 .zshrc 파일의 이전 내용이 포함되어 있습니다. 복원할 내용을 복사했습니다. 이전에 실행 중인 .zshrc의 탭을 닫지 않은 경우 ~/.zshrc.backup을 확인하는 것이 좋습니다. (애플 시스템)

답변4

저도 같은 문제가 있었고 파일의 정확한 문자열을 기억할 수 있었습니다. 콘텐츠를 찾아 복원하려면 다음 방법을 사용합니다.

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

인용하다: https://unix.stackexchange.com/a/150423/503193

관련 정보