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.pid
GNU를 사용하여 grep
).
이 작업을 수행하기 전에 메모리 영역을 덮어쓰지 않을 가능성을 최대화하기 위해 쉘을 가능한 한 적게 사용하십시오.
양식에 텍스트를 입력하는 동안 실수로 키를 누를 때 ^W
가끔 이 트릭을 사용합니다 .firefox