rm -rf로 중간에 삭제가 안되면 계속 삭제되나요?

rm -rf로 중간에 삭제가 안되면 계속 삭제되나요?

garbage많은 파일과 디렉터리가 포함된 디렉터리를 생각해 보세요 . 을 실행했지만 그 rm -rf garbage안의 파일이나 디렉터리 중 일부가 garbageOS/NFS/etc에서 사용되고 있으면 rm -rf실패합니다. 나머지는 삭제되나요? 아니면 첫 번째 실패 시 삭제가 중지되나요? 현재 운영체제는 우분투 20.04인데, 흥미로운 점은 이 동작이 표준인지, 운영체제(버전)에 따라 달라지는지이다.

답변1

rm행동자세한 조항은 POSIX에 제공됩니다.(당신은 또한 볼 수 있습니다매우 큰 폴더에서 rm -Rf를 수행하는 동안 실제 단계 순서는 무엇입니까?전체 시퀀스를 재현합니다). 현재 파일을 삭제할 수 없거나 파일이 존재하지 않는 모든 경우에는

나머지 파일을 계속 처리합니다.

이는 오류가 발생하더라도 가능한 경우 파일을 계속 삭제한다는 의미입니다. 이는 인수로 지정된 파일 rm -rf과 디렉터리를 처리할 때 발견된 파일 모두에 적용됩니다.

어떤 경우에는 작업 결과를 영원히 기다릴 수도 있습니다(예를 들어NFS 마운트에서 파일을 삭제하려고 하면(서버가 응답하지 않음) 결국 논스톱 절전 모드(상태 D)로 전환되지만 해당 상태가 해결되면 계속해서 파일을 삭제합니다. 실제로는 결코멈추다삭제할 파일이 부족해질 때까지 삭제하세요.

답변2

rm -r기본적으로 파일, 디렉터리, 심볼릭 링크 등인지 여부에 관계없이(예: 사용 unlinkat) "파일" 항목의 링크를 해제하고, 먼저 발견된 디렉터리를 반복하여(예: 사용 getdents) rm발견한 파일을 열거나 읽거나 쓰려고 시도하는 경우는 전혀 없습니다 . 즉, 중단 없이 대기 상태인 디렉터리에서 I/O 대기를 rm트리거하려고 하면 계속하기 전에 대기가 해결될 때까지 기다립니다.getdentsrm

즉, rm완료할 수 없는 경우 unlinkat에는 사례별로 예외를 처리합니다. 예를 들어 unlinkat파일 누락으로 인해 실패 하면 rm계속 진행되지만 보고 ENOENT( No such file or directory)됩니다.

관련 정보