[linux] 디렉토리 삭제하기

리눅스에서 디렉토리를 삭제하는 커맨드는 "rmdir"과 "rm" 입니다.

rmdir 커맨드는 기능이 단순하며 비어있는 디렉토리만 삭제할 수 있습니다. 부모 디렉토리까지 함께 삭제할 수 있는 기능이 있지만 빈 디렉토리를 삭제하는 단순한 커맨드입니다.

"rm" 커맨드는 파일, 또는 디렉토리를 삭제할 수 있으며, 비어있지 않은 디렉토리와 하위 디렉토리까지 삭제할 수 있습니다. 기능이 강력한 만큼 위험한 커맨드이기도 합니다. 실수로 잘못 삭제하면 삭제한 파일을 다시 복구할 수 없으며, 파티션 전체를 삭제할 수도 있으므로 주의해야 합니다.

디렉토리를 삭제할 때는 신중하게 확인한 후 커맨드를 사용해야 합니다.

대부분의 리눅스 운영체제에서 rm과 rmdir 커맨드로 삭제하는 디렉토리는 쓰기 권한을 필요로 합니다. 해당 디렉토리에 대한 쓰기 권한이 없으면 디렉토리를 삭제할 수 없습니다.

공백이 있는 디렉토리 이름

디렉토리 이름에 공백이 있으면 역슬래시(\)로 공백을 이스케이프 해야 삭제할 수 있습니다. 물론 그전에 공백이 포함된 디렉토리 이름을 사용하는 것은 좋지 않은 사용 방법입니다.

그리고 대부분의 리눅스 운영체제가 유니코드를 지원하기 때문에 한글 디렉토리 이름을 사용할 수 있으며, 삭제 또한 문제 없이 됩니다.

rmdir로 디렉토리 삭제

rmdir directory1

디렉토리가 비어있지 않으면 삭제 커맨드로 삭제할 수 없으며 에러 메시지를 표시합니다.

$ rmdir doc
rmdir: failed to remove 'doc': Directory not empty

"-p" 옵션을 사용하면 계층으로 표시한 부모 디렉토리까지 모두 삭제합니다. 마찬가지로 비어있지 않은 디렉토리를 삭제할 수 없습니다.

다음 rmdir 커맨드는 doc, backup, 2023 디렉토리를 모두 삭제합니다. 부모 디렉토리로 순대로 올라오면서 디렉토리를 삭제하다 비어있지 않은 디렉토리가 있으면 삭제를 멈춥니다.

rmdir -p doc/backup/2023

rm으로 디렉토리 삭제

디렉토리 삭제는 다음처럼 실행합니다.

rm directory1

-r 옵션(recursive)을 사용하면 하위 디렉토리와 내용(파일)까지 모두 삭제합니다. 강력한 기능인만큼 주의해서 사용해야 합니다.

rmdir의 -p 옵션이 가장 하위 디렉토리까지 경로를 표시해서 경로에 표시된 디렉토리를 밑에서부터 올라오면서 삭제하는 방식이라면, "rm -r"은 삭제할 최상위 디렉토리만 표시하고 그 밑으로 있는 모든 디렉토리와 파일을 삭제합니다.

디렉토리 구조를 모두 삭제하고 싶으면 다음처럼 커맨드를 실행합니다. 디렉토리 안에 파일이 있으면 파일까지 모두 삭제하며, 하위 디렉토리가 여러 개면 하위 디렉토리들도 모두 삭제합니다.

rm -r directory1

디렉토리나 파일에 쓰기 권한이 없으면 삭제할지를 확인하는 프롬프트가 표시됩니다. "y"를 누르면 쓰기 권한이 없는 디렉토리나 파일도 삭제됩니다.

$ rm -r doc
rm: remove write-protected directory 'doc/backup'?

쓰기 권한이 없는 파일이나 디렉토리가 많아서 삭제 확인 프롬프트 없이 일괄로 강제 삭제하려면 -f 옵션(force)을 사용합니다. -f옵션을 사용하면 확인 프롬프트 없이 삭제됩니다.

rm -rf directory1

-rf 옵션을 사용할 때는 신중해야 합니다. 특히 루트 권한을 가진 계정으로 일괄 삭제 작업을 할 때는 -i 옵션을 추가로 사용해서 삭제하는 디렉토리나 파일을 삭제할지를 확인하는 프롬프트가 표시되도록 해야 합니다.

$ rm -rfi doc
rm: remove directory 'doc'?

루트 계정으로 파티션 루트에서 "rm -rf *"를 해버리면 파티션을 포맷한 것과 같아집니다.