rm 명령어 사용법

파일이나 디렉터리를 삭제하는 명령어입니다.

파일·디렉터리 관리연결 실습 문제 2개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

rm [옵션] 파일...

rm은 파일과 디렉터리를 삭제하는 GNU coreutils 명령어입니다. 기본 동작은 파일만 지우는 것이며, 디렉터리를 지우려면 -r 옵션으로 재귀 삭제를 지정해야 합니다. 삭제하면 파일 이름과 inode의 연결(링크)이 끊어지므로 일반적인 방법으로는 복구할 수 없습니다.

실무에서는 로그 로테이션 후 원본 정리, 오래된 백업 회수, 임시 파일 청소처럼 디스크 공간을 확보하는 작업에 주로 쓰입니다. 단독으로 쓰기보다 find의 -exec rm이나 xargs와 조합해 조건에 맞는 파일만 골라 지우는 형태가 일반적입니다.

리눅스마스터·LPIC·RHCSA 시험에서는 -r, -f, -i의 차이, '-'로 시작하는 파일명 처리, 그리고 파일 삭제 권한이 파일 자체가 아니라 상위 디렉터리의 쓰기 권한에 달려 있다는 점이 자주 다뤄집니다.

자주 쓰는 옵션

옵션의미
-r, -R, --recursive디렉터리와 그 안의 내용을 재귀적으로 삭제합니다.rm -r /tmp/demo/olddir
-f, --force존재하지 않는 파일은 무시하고, 확인 질문도 하지 않습니다. 대상이 없어도 오류를 내지 않으므로 종료 코드가 0이 됩니다.rm -f /tmp/demo/nofile.log
-i삭제할 때마다 확인 질문을 표시합니다.rm -i /tmp/demo/a.log
-I파일을 3개 넘게 지우거나 재귀 삭제할 때만 한 번 확인합니다.rm -I /tmp/demo/*.log
-v, --verbose삭제한 대상을 한 줄씩 출력합니다.rm -v /tmp/demo/a.log
-d, --dir빈 디렉터리를 삭제합니다. 내용이 있으면 삭제하지 않고 오류를 냅니다.rm -d /tmp/demo/empty
--interactive=WHEN확인 시점을 never, once, always 중에서 지정합니다. never로 지정하면 확인은 생략하지만, -f와 달리 존재하지 않는 파일에 대한 오류 메시지와 종료 코드는 그대로 유지됩니다.rm --interactive=never /tmp/demo/a.log
--one-file-system재귀 삭제 시 명령행 인자와 다른 파일시스템에 있는 디렉터리는 건너뜁니다.rm -r --one-file-system /tmp/demo/mnt

실무 예시

파일 하나 삭제하기

준비: mkdir -p /tmp/demo; touch /tmp/demo/a.log /tmp/demo/b.log

$ rm -v /tmp/demo/a.log
removed '/tmp/demo/a.log'

-v를 붙이면 실제로 어떤 경로가 지워졌는지 확인할 수 있습니다.

없는 파일 무시하기

준비: mkdir -p /tmp/demo

$ rm -f /tmp/demo/nofile.log; echo "exit=$?"
exit=0

-f는 대상이 없어도 오류 메시지를 내지 않고 종료 코드 0을 반환합니다. 스크립트에서 파일 존재 여부와 무관하게 정리할 때 씁니다.

디렉터리 재귀 삭제

준비: mkdir -p /tmp/demo/old/sub; touch /tmp/demo/old/1.log /tmp/demo/old/sub/2.log

$ rm -rv /tmp/demo/old
removed '/tmp/demo/old/sub/2.log'
removed directory '/tmp/demo/old/sub'
removed '/tmp/demo/old/1.log'
removed directory '/tmp/demo/old'

디렉터리는 -r 없이는 지워지지 않습니다. 하위 항목을 먼저 지우고 마지막에 상위 디렉터리를 지우지만, 같은 디렉터리 안에서 항목을 읽는 순서는 파일시스템에 따라 달라지므로 출력 순서는 아래와 다를 수 있습니다.

7일 초과 로그만 삭제

준비: mkdir -p /tmp/demo/logs; touch -d '10 days ago' /tmp/demo/logs/old1.log /tmp/demo/logs/old2.log; touch /tmp/demo/logs/current.log

$ find /tmp/demo/logs -type f -name '*.log' -mtime +7 -exec rm -v {} \;
removed '/tmp/demo/logs/old1.log'
removed '/tmp/demo/logs/old2.log'

find로 조건을 걸러 rm에 넘기면 current.log처럼 최근 파일은 남기고 오래된 로그만 지울 수 있습니다. 지우기 전에 rm 대신 -print로 먼저 대상 목록을 확인하고, 필요하면 gzip으로 백업한 뒤 원본을 지우는 순서로 쓰면 안전합니다.

백업 최신 3개만 남기기

준비: mkdir -p /tmp/demo/rotate; for i in 1 2 3 4 5; do touch -d "$i days ago" /tmp/demo/rotate/backup_$i.tar.gz; done

$ ls -1t /tmp/demo/rotate/backup_*.tar.gz | tail -n +4 | xargs -r rm -v
removed '/tmp/demo/rotate/backup_4.tar.gz'
removed '/tmp/demo/rotate/backup_5.tar.gz'

수정 시각 내림차순 목록에서 4번째 줄부터 골라 삭제하므로 최신 3개가 남습니다. xargs -r는 목록이 비면 rm을 실행하지 않습니다. 다만 ls 출력을 파이프로 넘기는 방식은 이름에 공백이나 개행이 있으면 오작동하므로, 파일명을 통제할 수 없는 환경에서는 find -printf '%T@ %p\0' 와 xargs -0 조합을 쓰는 편이 안전합니다.

주의할 점

  • rm -rf는 확인 없이 즉시 지웁니다. 경로 뒤의 공백이나 오타 하나로 의도치 않은 디렉터리가 통째로 사라질 수 있으므로, 변수 경로는 "$DIR"처럼 따옴표로 감싸고 비어 있지 않은지 먼저 검사하세요.
  • '-foo'처럼 '-'로 시작하는 파일명은 옵션으로 해석됩니다. rm -- -foo 또는 rm ./-foo 형태로 지정하세요.
  • 파일 삭제 권한은 파일 자체가 아니라 상위 디렉터리의 쓰기·실행 권한에 달려 있습니다. 읽기 전용 파일도 상위 디렉터리에 쓰기 권한이 있으면 지워집니다. 반대로 상위 디렉터리에 sticky bit(예: /tmp)가 걸려 있으면 소유자만 지울 수 있습니다.
  • 와일드카드는 실행 전에 같은 패턴으로 ls를 돌려 대상을 먼저 확인하는 습관이 안전합니다. xargs와 함께 쓸 때는 -r로 빈 목록 실행을 막으세요.
  • 삭제 실패를 감추려고 스크립트 전반에 -f를 붙이면 권한 문제나 경로 오류를 놓치게 됩니다. 필요한 위치에만 사용하세요.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.