빈 폴더를 나타내기 위해 rm에 -r이 필요한 이유는 무엇입니까?

빈 폴더를 나타내기 위해 rm에 -r이 필요한 이유는 무엇입니까?

뭔가 나를 괴롭히고 있습니다:

touch a
rm a

알았어 예상대로 작동하네

mkdir a
rm a

작동하려면 -r이 필요하지만 재귀가 무엇인지 이해가 안 됩니까? 폴더가 비어 있으면 재귀 작업이 수행되지 않습니다. 나는 rm a가 a를 삭제하려고 시도하고, 비어 있지 않으면 실패하고, rm -r이 a의 내용을 반복하기를 원합니다.

왜 이런 일이 발생합니까?

편집: 이 질문은 전혀 관련이 없는 질문의 중복으로 표시되었습니다. 내 질문은 다음과 같이 요약될 수 있습니다. 비재귀 작업을 수행하기 위해 왜 재귀 플래그가 필요한가요? mkdir a, rm -ra에는 재귀가 없습니다. 이것은 다른 질문과 관련이 없으므로 rm이 기본적으로 재귀적이지 않습니다.

답변1

rm디렉터리를 삭제할 의도가 전혀 없기 때문입니다 .

처음에는 rm지원되지 않습니다 -r. 사용자에게는 디렉터리의 모든 파일을 삭제한 rm다음 (현재 비어 있는) 디렉터리를 삭제하는 한 가지 옵션만 있습니다.rmdir

분명히 이것은 작동합니다매우짜증나서 -r이 문제를 해결하기 위해 구현되었습니다.

그러나 rm /some/empty/dir작동하기 시작하면 더 이상 이전 버전과 호환되지 않습니다(따라서 rm /some/empty/dir오류가 발생하면 이전 코드가 깨질 수 있습니다). 이 동작 은 -r정의되지 않았기 때문에 문제가 되지 않습니다( -r옵션이 아직 존재하지 않기 때문에).

답변2

에서 man rm:

기본적으로 rm은 디렉터리를 삭제하지 않습니다. --recursive(-r 또는 -R) 옵션을 사용하여 나열된 각 디렉터리와 해당 내용을 모두 제거할 수도 있습니다.

여기서 추측하겠습니다. 이것은 보안 기능이므로 파일이 들어 있는 디렉터리를 자신도 모르게 삭제할 수는 없습니다. 나는 rm디렉토리에 내용이 있는지 (비교하여) 먼저 확인하지 않는다고 가정합니다 rmdir.


편집: 파일을 재귀적으로 삭제하지 않으면 이름과 inode가 디렉터리에 저장되어 있기 때문에 파일을 찾는 데 문제가 있을 것이라고 가정합니다. 디렉토리를 삭제하면 inode는 있지만 파일 이름은 없는 "좀비" 파일이 생성됩니다. 이 포스팅과 비교하면외부 구조.

관련 정보