지난 밤에 실수로 실수로 File-Server의 1800GB가 삭제되었습니다.


27

어제이 명령을 실행했는데 테스트 시스템에서 생각했지만 SSH를 통해 연결된 파일 서버였습니다.

sudo rm -rf /tmp/* !(lost+found)

내 터미널 에뮬레이터는 Konsole입니다. 내 시스템은 데비안 7입니다.

의문:

이 명령은 / tmp에있는 파일 이외의 파일을 삭제 했습니까?


/ home 파일 시스템이 마운트되지 않았을 수 있습니까?
— Emmanuel

@ Emmanuel 파일이 손실되었음을 확인했습니다.
— something 무언가

1
기록에 삭제 오류가 표시되지 않습니다. "kill $ (lsof / usr ...)"을 수행하는 동안 많은 운영 체제 프로세스를 종료했습니다. 파일 시스템 공유 데몬이 영향을 받았을 수 있습니다. 서비스를 다시 시작하거나 파일러를 재부팅하려고 했습니까?
— Emmanuel

1
@somethingSomething Konsole은 쉘이 아니며 KDE의 기본 터미널 에뮬레이터입니다. 터미널에 일부 문자를 dsgsadfsf입력하고 Enter 키를 누르십시오. 결과를보십시오. 만약 그렇다면 bash: dsgsadfsf: command not found, 쉘은 bash입니다.
— Gabor Farkas

5
좋은 백업이 되시기 바랍니다. 복구를 시도하려는 경우 실험 할 드라이브의 바이트 레벨 사본을 작성할 수있을 때까지 해당 시스템 사용을 중지하십시오. 해당 파일 시스템에 쓰면 손상이 악화됩니다.
— CVn

답변:


43

bash의 올바른 구문은 다음과 같습니다.

rm /tmp/!(lost+found)

@goldilocks 가 주석에 썼 듯이 원래 명령은 쿼리를 확장합니다 ( /tmp폴더의 모든 파일을 삭제 한 다음 계속 진행하고 현재 작업 폴더의 모든 파일을 삭제 home합니다).

일부 데이터를 복구 할 수 있는지 확인할 수 있습니다. 리눅스 데이터 복구에 관한 질문이 있습니다 .


28
아, 그것은 유명한 "내 모든 데이터를 파괴 내 명령 줄에서 누락 된 공간"본질적으로 다른 경우, 그래서 - 그냥 등에 rm -rf / tmp^^
— 마틴 폰 WITTICH

8
나는 시스템 관리자 편집증이 원인이 될 수 없다고 충분히 강조 할 수 없다. :) 루트로만 쓸 수있는 장소에 항상 가장 중요한 데이터를 백업하십시오.
— Gabor Farkas

9
오히려 정상적인 상황에서는 루트로 쓸 수없는 별도의 하드 디스크 또는 서버에 백업하고 싶습니다. OP가 사용 sudo되었으므로 루트에만 쓸 수있는 일반 폴더는 반드시 도움이되지 않았습니다.
— Martin von Wittich

좋은 점은 OP에 충분히주의를 기울이지 않았습니다. 서버는 비용이 많이 들지만 별도의 디스크는 충분합니다. 기본적으로 마운트 해제 된 별도의 파티션을 사용했습니다. 간단하고 더럽지 만 효과적입니다.
— Gabor Farkas

1
@simonzack 그것은 결과적으로 그것을 설치하여 사고의 가능성을 줄일 수 있습니다, 그것은 나를 위해 충분합니다 :)
— Gabor Farkas

26

는 !(lost+found)당신의 rm명령 아마도 치명적인 실수를했다 :

1978  rm -rf /tmp/* !(lost+found)
1979  sudo rm -rf /tmp/* !(lost+found)

나는 정확히 무엇 bash을하고 있는지 알지 못하지만 아래 명령은 내 /tmp/모든 디렉토리와 현재 디렉토리 (현재 ~) 를 모두 인쇄합니다 .

echo /tmp/* !(lost+found)

는 !(folder)제외한 모든 삭제 실행 된 한 번 명령 I의 일부입니다 folder.
— something 무언가

3
zsh에서 작동하는 것 같습니다. bash 나는 그렇게 생각하지 않습니다. 내가 얻을 !lost+found: event not found로 !역사에서 명령을 검색하는 데 사용됩니다.
— wurtel

9
이케! "나는 정확히 bash가 그 일을하고 있는지 모른다" -> 그것은 확장을 수행하고 있습니다. "이것을 제외한 모든 것"이 무엇인지 맞춰보세요? cd /; echo !(lost+found)> _ <
— goldilocks

13
옵션이 설정된 !(foo)경우에만 bash에서 "foo를 제외한 모두"로 작동 한다는 점 을 명심하십시오 extglob. 또한 OP는 자신이 사용하는 쉘을 지정하지 않았으므로 실제로 rm !(lost+found)그의 명령이 무엇을했는지 추측하기가 어렵습니다 .
— jimmij

5
OP는 bash기본 쉘로 데비안 7을 사용하고 있다고 말했지만 큰 주목을 받았습니다 . 그는 이것을 바꾸지 않았을 것입니다. 또한 데비안 7에서는 extglob옵션이 true기본적으로 설정되어 있습니다 (방금 확인했습니다).
— Gabor Farkas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.