실수은 rm -f를 실행하는 방법을 복원하는?

머리말

우리는 프로덕션 서버 환경에서 rm 명령을 실행할 때마다 항상 긴장, 실수로 실행 실수로 삭제하기 때문에, 다음 결국, 사람들이 기계되지 않습니다 기계 또한, 허, 허 버그가 말할 것도없고, 도망 준비.

당신은 데이터베이스와 같은 당신이 정말로 삭제 안되는 파일을 삭제하면 로그인하거나 파일을 실행, 당신은 어떻게해야? 장례식,주의 깊게이 블로그를 참조하십시오 방법에 대한 정보.

시뮬레이션 시나리오

 

1, 삭제

실수로 거미에서 서버 디렉토리 / 루트 / 셀레늄 / MySql.Data.dll 파일을 삭제 :

> rm -f /root/selenium/Spider/MySql.Data.dll
> ll /root/selenium/Spider/MySql.Data.dll
ls: cannot access /root/selenium/Spider/MySql.Data.dll: No such file or directory

 

2 복구

(1) lsof의 명령을 사용하여 현재의 프로세스 오픈 /root/selenium/Spider/MySql.Data.dll 파일 여부를 확인한다 :

> lsof | grep /root/selenium/Spider/MySql.Data.dll

 

위의에서 볼 수 있듯이 삭제 된 파일의 현재 상태 (삭제).

데이터 복구가있는 경우 (2) 볼 :

/ proc 디렉토리 / / FD 13067 : 공정 작업의 파일 기술자 디렉토리.
86 : 파일 설명.

> cat /proc/13067/fd/86

 

(3) 상기 I / O 리다이렉션 파일 복구를 사용하여

> cat /proc/23778/fd/86 > /root/selenium/Spider/MySql.Data.dll
> ls -l /root/selenium/Spider/MySql.Data.dll
-rw-r--r-- 1 root root 702464 Feb 10 12:03 /root/selenium/Spider/MySql.Data.dll

프로그램을 다시 실행 :

파일 복구 지침 아무 문제.

 

호기심

파일을 복구하는 전체 과정을 보여 이전의 시뮬레이션 시나리오를 통해 그 원리는 어떤 상황에서, 파일을 복구 할 수 있습니다, 무엇인지.

리눅스 시스템에서 실행중인 각 프로그램을 위해, 서로 격리 된 호스트 프로세스가 / proc 디렉토리 / 프로세스 ID 예를 들어, (리눅스의 성격이 파일 시스템은에) 반영을 : 에 -l / proc 디렉토리 / 13067은 LS  PID를 같은 과정을 볼 수 프로세스 정보의 13067 우리는 실행할 때 프로그램이 실행되는 경우, 운영 체제가 파일에 의존하는데 사용하는 현재의 프로세스에 사용할 수있는 메모리의 특정 영역을 열 것이다, 파일 기술자를 발표 할 예정이다 운영 시스템은 파일을 읽고 쓸 수 있습니다  RM은 -f를  당신이 파일을 삭제하면, 사실, 그냥 파일 시스템에 대한 파일의 디렉토리 inode가 표시되지 제거,하지만 여전히 읽고 이전에 발행 된 파일 기술자를 사용하여 파일을 쓸 수는 여전히 볼 수있는 프로세스에 대한 개방, 이러한 원칙의 사용이다 그래서 우리는 I O 리디렉션 모드 /를 사용하여 파일을 복원 할 수 있습니다.

개요

如果不小心误删了文件,不要着急,首先使用 lsof 查看打开该文件的进程,然后再使用 cat /proc/进程号/fd/文件描述符 查看恢复数据,最后使用I/O重定向的方式来恢复文件。

추천

출처www.cnblogs.com/lylsr/p/11228447.html