Linux / 명령어 / rm - 파일과 디렉터리 삭제

rm은 파일이나 디렉터리를 파일 시스템에서 제거하는 명령입니다. 일반적인 데스크톱 휴지통을 거치지 않으며, 특히 -r과 -f를 함께 사용하면 대량의 데이터를 확인 없이 삭제할 수 있으므로 대상 경로 검증이 가장 중요합니다.

이 글에서는 기본 삭제, 빈 디렉터리와 재귀 삭제, 확인 옵션, 셸 글로브와 변수 사용 시 위험, 자동화에서 삭제 범위를 제한하는 방법을 설명합니다.

rm 명령어란?

rm은 지정한 디렉터리 엔트리를 제거합니다. 파일의 링크 수가 0이 되고 어떤 프로세스도 열고 있지 않으면 저장 공간이 나중에 재사용될 수 있습니다. 기본적으로 디렉터리는 삭제하지 않으며, 디렉터리 트리를 지우려면 재귀 옵션을 명시해야 합니다.

기본 문법

rm [옵션] 파일 ...

파일명이나 경로에 공백이 있으면 따옴표로 감싸고, 하이픈으로 시작하는 이름은 가능한 경우 -- 뒤에 지정합니다. 지원 옵션은 배포판과 GNU Coreutils 버전에 따라 다를 수 있으므로 rm --help와 man rm으로 현재 시스템의 설명을 확인하세요.

rm 기본 사용법

파일 하나 삭제하기

삭제할 정확한 경로를 지정합니다. 하이픈으로 시작하는 파일명은 -- 뒤에 둡니다.

rm old-report.txt
rm -- -temporary.txt

여러 파일 삭제하기

여러 경로 또는 셸 글로브를 사용할 수 있지만, 실행 전에 확장 결과를 확인하는 것이 안전합니다.

printf '%s\n' *.tmp
rm -- *.tmp

디렉터리 트리 삭제하기

-r은 하위 내용을 재귀적으로 제거합니다. 먼저 find나 ls로 대상을 확인하고 가능한 한 구체적인 경로를 사용하세요.

find build-cache -maxdepth 2 -print
rm -r -- build-cache

삭제 명령이 조용히 끝났을 때

rm는 성공해도 대개 아무것도 출력하지 않습니다. 다음은 직접 만든 설명용 파일에만 적용하는 안전한 확인 예제입니다.

printf 'demo\n' > disposable-demo.txt
rm -- disposable-demo.txt
test ! -e disposable-demo.txt
echo $?

예시 출력 0은 해당 경로가 더는 존재하지 않는다는 뜻입니다. 파일을 복구할 수 있다는 보장은 아니며, rm -r이나 rm -f를 실제 경로에 쓰기 전에는 삭제 대상을 목록으로 확인하세요.

주요 옵션

옵션 설명
-r, -R 디렉터리와 하위 내용을 재귀적으로 삭제합니다.
-i 모든 삭제 전에 개별 확인을 요청합니다.
-I 많은 파일 또는 재귀 삭제에서 한 번 확인합니다.
-f, --force 없는 파일을 무시하고 일반적인 확인을 생략합니다.
-d, --dir 빈 디렉터리를 제거할 수 있게 합니다.
-v 제거한 항목을 출력합니다.
--one-file-system 재귀 삭제 중 다른 파일 시스템으로 내려가지 않습니다.
--preserve-root[=all] 루트 또는 추가 파일 시스템 루트를 재귀 삭제하는 실수를 방지합니다.

긴 옵션은 의미를 파악하기 쉽고 스크립트 검토에도 도움이 됩니다. 다만 이식성이 중요한 스크립트에서는 대상 시스템이 해당 GNU 확장 옵션을 지원하는지 먼저 확인하세요.

실전 활용 예제

삭제 대상 미리 확인하기

셸이 *를 확장한 결과와 변수의 실제 값을 먼저 출력합니다. 줄바꿈·공백이 있는 파일명을 다룰 때는 find -print0와 호환 옵션을 검토하세요.

printf 'target=%s\n' "$target"
find "$target" -maxdepth 2 -print

대화형 확인 사용하기

몇 개의 중요한 파일을 직접 지울 때는 -i, 많은 파일이나 재귀 작업에서 최소 한 번 확인하려면 -I가 유용합니다. 자동화에서는 대화형 옵션 대신 사전 조건을 코드로 검증해야 합니다.

rm -i important.conf
rm -Ir old-release/

다른 마운트 지점 보존하기

백업이나 시스템 트리 안에 별도 파일 시스템이 마운트되어 있을 수 있습니다. 재귀 삭제가 그 경계를 넘지 않아야 한다면 --one-file-system을 검토하고 마운트 상태를 먼저 확인하세요.

findmnt --target /srv/chroot
rm -r --one-file-system -- /srv/chroot

rm와 관련 명령 비교

명령·방법 주요 역할 적합한 상황
rm 파일과 재귀 디렉터리 삭제 정확히 지정한 항목을 영구적으로 제거할 때
rmdir 빈 디렉터리만 삭제 내용이 남으면 보존해야 할 때
데스크톱 휴지통 도구 복원 가능한 위치로 이동 대화형 환경에서 실수 복구가 필요할 때
shred 파일 데이터 덮어쓰기 시도 지원 조건과 한계를 이해하고 흔적 감소가 필요할 때

사용할 때 주의할 점

rm -rf를 습관적으로 사용하지 않는다

-r은 범위를 넓히고 -f는 경고를 줄입니다. 필요한 옵션만 사용하고 변수로 만든 경로는 비어 있지 않은지, 예상 루트 아래인지 검증하세요.

별칭을 안전장치로만 믿지 않는다

alias rm='rm -i'는 비대화형 셸이나 다른 시스템에서 적용되지 않을 수 있습니다. 스크립트의 안전성은 별칭이 아니라 경로 검증과 권한 분리에 기반해야 합니다.

삭제 후 복구를 전제로 하지 않는다

삭제된 데이터는 파일 시스템과 저장 장치 상태에 따라 복구가 매우 어렵거나 불가능합니다. 중요한 데이터는 삭제 전에 별도의 검증된 백업이 있어야 합니다.

FAQ

rm으로 삭제하면 휴지통에 들어가나요?

일반적으로 아닙니다. 명령줄의 rm은 데스크톱 휴지통을 거치지 않으므로 즉시 복원할 수 있다고 가정하면 안 됩니다.

디렉터리를 삭제하려면 어떤 옵션이 필요한가요?

내용이 있는 디렉터리는 -r이 필요합니다. 빈 디렉터리라면 rmdir가 더 제한적이고 안전한 선택입니다.

rm -i와 rm -I의 차이는 무엇인가요?

-i는 항목마다 묻고, -I는 많은 파일이나 재귀 삭제에서 한 번 확인해 과도한 질문을 줄입니다.

실수로 삭제한 파일을 바로 복구할 수 있나요?

보장할 수 없습니다. 즉시 쓰기 작업을 줄이고 파일 시스템과 백업 정책에 맞는 복구 절차를 검토해야 합니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / su - 사용자 계정 전환

Linux / 명령어 / su - 사용자 계정 전환

Linux su 명령어로 다른 사용자 권한의 셸과 단일 명령을 실행하는 방법을 설명합니다. su와 su --login 차이, 환경 변수, PAM 인증, sudo·runuser 선택 기준과 보안 주의사항을 정리합니다.

Linux / 명령어 / lsblk - 디스크·파티션 구조와 마운트 지점 확인

Linux / 명령어 / lsblk - 디스크·파티션 구조와 마운트 지점 확인

Linux lsblk 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / nohup - 로그아웃 후에도 명령 계속 실행

Linux / 명령어 / nohup - 로그아웃 후에도 명령 계속 실행

Linux nohup 명령어로 로그아웃 후에도 작업을 계속 실행하는 방법을 설명합니다. 백그라운드 실행, 입출력 리디렉션, PID 확인과 종료, 로그 관리 및 systemd·tmux와의 차이를 정리합니다.

Linux / 명령어 / timedatectl - 시간대와 시간 동기화 상태 관리

Linux / 명령어 / timedatectl - 시간대와 시간 동기화 상태 관리

Linux timedatectl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / info - GNU 문서 확인

Linux / 명령어 / info - GNU 문서 확인

info 명령어로 GNU 설명서를 탐색하는 방법을 설명합니다. 노드와 메뉴 이동, 본문·색인 검색, 특정 문서 위치 지정, 텍스트 출력과 문서가 없을 때의 해결 방법을 정리합니다.

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux passwd 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

Linux / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

Linux hostnamectl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / history - 명령어 실행 기록 확인

Linux / 명령어 / history - 명령어 실행 기록 확인

Bash history 명령어로 이전 명령을 조회·검색·재실행·삭제하는 방법을 설명합니다. ~/.bash_history, HISTCONTROL, HISTTIMEFORMAT, histappend와 여러 터미널 기록 동기화 방법도 함께 정리합니다.

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

diff와 cmp로 두 파일의 차이를 확인하고 unified diff를 읽는 법을 익힙니다. 내용이 다른 경우와 명령 실행 오류의 종료 상태도 구별합니다.

Linux 강좌 / 표준 입력·출력, 리디렉션과 파이프 이해하기

Linux 강좌 / 표준 입력·출력, 리디렉션과 파이프 이해하기

표준 입력·출력·오류의 차이를 이해하고 파일 리디렉션과 파이프를 실습합니다. 덮어쓰기 위험과 리디렉션 순서도 함께 설명합니다.