garbage
많은 파일과 디렉터리가 포함된 디렉터리를 생각해 보세요 . 을 실행했지만 그 rm -rf garbage
안의 파일이나 디렉터리 중 일부가 garbage
OS/NFS/etc에서 사용되고 있으면 rm -rf
실패합니다. 나머지는 삭제되나요? 아니면 첫 번째 실패 시 삭제가 중지되나요? 현재 운영체제는 우분투 20.04인데, 흥미로운 점은 이 동작이 표준인지, 운영체제(버전)에 따라 달라지는지이다.
답변1
rm
행동자세한 조항은 POSIX에 제공됩니다.(당신은 또한 볼 수 있습니다매우 큰 폴더에서 rm -Rf를 수행하는 동안 실제 단계 순서는 무엇입니까?전체 시퀀스를 재현합니다). 현재 파일을 삭제할 수 없거나 파일이 존재하지 않는 모든 경우에는
나머지 파일을 계속 처리합니다.
이는 오류가 발생하더라도 가능한 경우 파일을 계속 삭제한다는 의미입니다. 이는 인수로 지정된 파일 rm -rf
과 디렉터리를 처리할 때 발견된 파일 모두에 적용됩니다.
어떤 경우에는 작업 결과를 영원히 기다릴 수도 있습니다(예를 들어NFS 마운트에서 파일을 삭제하려고 하면(서버가 응답하지 않음) 결국 논스톱 절전 모드(상태 D
)로 전환되지만 해당 상태가 해결되면 계속해서 파일을 삭제합니다. 실제로는 결코멈추다삭제할 파일이 부족해질 때까지 삭제하세요.
답변2
rm -r
기본적으로 파일, 디렉터리, 심볼릭 링크 등인지 여부에 관계없이(예: 사용 unlinkat
) "파일" 항목의 링크를 해제하고, 먼저 발견된 디렉터리를 반복하여(예: 사용 getdents
) rm
발견한 파일을 열거나 읽거나 쓰려고 시도하는 경우는 전혀 없습니다 . 즉, 중단 없이 대기 상태인 디렉터리에서 I/O 대기를 rm
트리거하려고 하면 계속하기 전에 대기가 해결될 때까지 기다립니다.getdents
rm
즉, rm
완료할 수 없는 경우 unlinkat
에는 사례별로 예외를 처리합니다. 예를 들어 unlinkat
파일 누락으로 인해 실패 하면 rm
계속 진행되지만 보고 ENOENT
( No such file or directory
)됩니다.