지난 밤에 실수로 실수로 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.