예기치 않게 rm -rf
현재 디렉터리가 아닌 내 루트 디렉터리에서 명령이 실행되었습니다. Ctrl+를 눌러 파일을 삭제 했는데 C일부 파일이 삭제되었습니다. 영향을 받는 응용 프로그램을 가져오기 위해 시스템에서 최근 삭제된 모든 파일을 나열할 수 있는 LINUX 명령이 있습니까?
운영 체제: CentOS 6.3
답변1
*nix 시스템에는 일반적으로 locate
유틸리티가 설치되어 있습니다. 여기에는 시스템에 있는 (거의) 모든 파일의 이름이 포함된 데이터베이스가 있으며 일반적으로 밤마다 업데이트됩니다. 빨리 달려:
locate /path/to/dir/of/interest
마지막 데이터베이스 업데이트 당시 디렉터리에 있는 파일 목록이 표시되어야 합니다. 현재 목록과 비교할 수 있습니다.
새 버전이 자동으로 덮어쓰므로 이제 데이터베이스의 백업 복사본을 만들 수 있습니다. Debian에 영향을 받는 시스템에서는 /var/lib/mlocate/mlocate.db
.
손실된 파일을 표시하는 방법
이전 데이터베이스를 백업합니다.
cp /var/lib/mlocate/mlocate.db ~/old.db
데이터베이스를 업데이트하십시오. 이를 수행하는 명령은 다를 수 있습니다. 데비안과 같은 시스템에서는 다음을 시도해 보세요:
sudo /etc/cron.daily/mlocate
디렉터리의 이전 파일과 새 파일 목록을 가져옵니다.
locate -d ~/old.db /your/dir | sort >~/old.list locate /your/dir | sort >~/new.list
모든 새 파일과 누락된 파일 목록을 가져옵니다.
diff ~/old.list ~/new.list
보충 설명
모든 파일이 위치 찾기 데이터베이스에 나열되는 것은 아닙니다. 구성 파일은 일반적으로
/etc/updatedb.conf
제외되는 파일과 디렉터리를 결정합니다.locate
나는 과거에 기본적으로 아직 존재하는 파일만 나열하는 버전을 사용했습니다 . 이러한 경우에는locate
이 기능을 꺼야 합니다.
답변2
아치의 경우, xargs rm -rf 명령 형식으로 잘못된 파일을 실수로 많이 삭제한 것이 걱정됩니다. John1024 조언 감사드립니다.
모든 것을 단순화하기 위해(내 웹 디렉터리 /srv/http의 경우) 모든 것을 한 줄로 실행합니다.
sudo cp /var/lib/mlocate/mlocate.db ~/old.db; sudo updatedb; sudo locate -d ~/old.db /srv/http | sort >~/old.list; sudo locate /srv/http | sort >~/new.list; sudo diff ~/old.list ~/new.list;
/srv/http를 관심 있는 디렉터리로 바꾸십시오.
그러면 변경된 파일이 표시됩니다. 다시 한 번 감사드립니다!