서버에서 로그 파일이나 임시 파일을 정리하려고 rm을 실행했는데, 현재 경로를 착각했거나 와일드카드 범위를 잘못 잡아 필요한 파일까지 삭제하는 일이 생길 수 있습니다. 이 글은 rm 명령어 사용할 때 주의할 점을 단순히 나열하는 글이 아니라, 실제 Debian/Ubuntu 계열 서버에서 삭제 전 무엇을 먼저 확인하고, 어떤 명령은 피해야 하며, 실수했을 때 어떤 순서로 상태를 점검해야 하는지 정리한 문서입니다.
이 글에서 해결할 문제
rm은 파일을 지우는 명령어라 사용법 자체는 간단합니다. 하지만 운영 서버에서는 삭제 대상이 웹 루트인지, 로그 디렉터리인지, 심볼릭 링크인지, 현재 사용자가 누구인지에 따라 결과가 크게 달라집니다.
특히 SSH로 접속해 여러 디렉터리를 오가다 보면 다음과 같은 상황이 자주 발생합니다.
- 현재 위치를 착각한 상태에서 상대경로로 삭제한다.
*.log,*같은 패턴이 예상보다 많은 파일에 적용된다.- 권한 오류가 나자 이유를 확인하지 않고 바로
sudo를 붙인다. - 디렉터리 삭제에 필요한
-r옵션을 습관적으로 사용한다. - 서비스가 사용 중인 로그 파일을 삭제했는데 디스크 용량이 바로 줄지 않는다.
서버를 운영하다 보면 명령어 자체보다 현재 사용자, 경로, 파일 소유자, 서비스 상태를 놓쳐서 문제가 생기는 경우가 많습니다. 그래서 삭제 명령을 실행하기 전에는 먼저 상태 확인을 해야 합니다.
먼저 확인할 핵심 요약
급하게 파일을 지워야 하는 상황이라도 아래 순서만 지키면 큰 실수를 많이 줄일 수 있습니다. 실제 삭제 명령은 마지막에 실행하는 것이 좋습니다.
| 순서 | 확인 내용 | 명령어 예시 |
|---|---|---|
| 1 | 현재 접속 사용자 확인 | whoami, id |
| 2 | 현재 디렉터리 확인 | pwd |
| 3 | 삭제 대상 목록 확인 | ls -al, ls -ald 경로 |
| 4 | 와일드카드 결과 미리 확인 | printf '%s\n' *.log |
| 5 | 파일인지 디렉터리인지 확인 | file, ls -ld |
| 6 | 필요하면 대화형 삭제 | rm -i 파일명 |
실제 서버 운영 중 헷갈리기 쉬운 지점
1. 현재 경로를 안다고 생각하는 경우
SSH 세션에서 cd를 여러 번 실행하다 보면 현재 위치를 착각하기 쉽습니다. 특히 /var/www/html, /var/www/example.com, /home/ubuntu/app처럼 비슷한 디렉터리를 오가는 서버에서는 상대경로 삭제가 위험합니다.
pwd
ls -al
위 두 명령은 삭제 전 습관처럼 확인하는 편이 좋습니다. 출력이 예상과 다르면 rm을 실행하지 말고 경로부터 다시 확인해야 합니다.
2. 권한 오류를 sudo로만 해결하려는 경우
Permission denied가 나오면 명령어가 틀렸다고 생각하기 쉽지만, 실제로는 현재 사용자와 파일 소유자가 맞지 않는 경우가 많습니다. 이 오류를 본 뒤에는 바로 sudo rm을 붙이기보다 현재 사용자와 파일 소유자를 먼저 확인하는 편이 안전합니다.
whoami
id
ls -al target.log
ls -ld .
sudo는 삭제 권한을 넓혀 주기 때문에, 대상 경로가 잘못되어 있으면 피해 범위도 같이 커질 수 있습니다. 운영 서버에서는 sudo를 붙이기 전에 왜 일반 사용자로 삭제가 안 되는지 확인해야 합니다.
3. 삭제한 로그 파일의 용량이 바로 줄지 않는 경우
웹서버나 애플리케이션이 로그 파일을 열고 있는 상태에서 파일을 삭제하면, 목록에서는 사라졌는데 디스크 사용량이 바로 줄지 않는 것처럼 보일 수 있습니다. 환경에 따라 다르지만, 실행 중인 프로세스가 파일 핸들을 계속 잡고 있으면 이런 상황이 생깁니다.
삭제 전에는 먼저 디스크 사용량과 서비스 상태를 확인합니다.
df -h
sudo systemctl status nginx --no-pager
sudo journalctl -u nginx -n 50 --no-pager
Node.js 앱을 PM2로 운영한다면 다음처럼 로그 상태를 먼저 확인할 수 있습니다.
pm2 list
pm2 logs --lines 50
서비스 로그를 정리할 때는 파일을 무작정 삭제하기보다 로그 로테이션 설정, 서비스 재시작 필요 여부, 해당 파일이 현재 사용 중인지까지 함께 보는 것이 좋습니다. 운영 중인 서비스 재시작은 접속 중인 사용자에게 영향을 줄 수 있으므로, 필요성과 시간을 확인한 뒤 진행해야 합니다.
처음 의심하기 쉬운 원인과 실제 원인의 차이
| 겉으로 보이는 상황 | 처음 의심하기 쉬운 원인 | 실제로 확인해야 할 부분 |
|---|---|---|
Permission denied가 나온다 |
rm 명령어 문제 | 현재 사용자, 파일 소유자, 디렉터리 권한 |
| 삭제했는데 다른 파일도 사라졌다 | rm이 이상하게 동작함 | 현재 경로, 와일드카드 확장 결과, 공백 포함 파일명 |
| 디렉터리가 삭제되지 않는다 | 권한 부족 | 대상이 파일인지 디렉터리인지, -r 필요 여부 |
| 삭제 후 서비스가 깨졌다 | 서비스 오류 | 삭제한 파일이 설정 파일, 실행 파일, 업로드 파일이었는지 확인 |
| 삭제했는데 용량이 줄지 않는다 | 삭제 실패 | 프로세스가 삭제된 파일을 계속 열고 있는지 확인 |
실제로 자주 막히는 상황
상황 1. 로그 파일만 지우려 했는데 범위가 넓어진 경우
다음처럼 현재 디렉터리를 확인하지 않고 패턴 삭제를 실행하면 예상과 다른 위치의 파일이 지워질 수 있습니다.
rm *.log
rm은 보통 성공해도 별도 메시지를 출력하지 않습니다. 그래서 명령이 조용히 끝났다고 해서 안전하게 끝났다고 볼 수는 없습니다. 먼저 어떤 파일이 패턴에 잡히는지 확인해야 합니다.
상황 2. 공백이 들어간 파일명을 잘못 처리한 경우
파일명에 공백이 있으면 명령어가 여러 인자로 나뉘어 해석될 수 있습니다. 예를 들어 old log.txt를 삭제하려면 따옴표로 감싸야 합니다.
ls -al
rm -i 'old log.txt'
파일명이 복잡할 때는 직접 입력하기보다 ls로 확인한 뒤 탭 자동완성을 사용하는 것이 안전합니다.
상황 3. 디렉터리와 파일을 착각한 경우
파일인 줄 알고 삭제했는데 실제로는 디렉터리인 경우 다음 오류가 나옵니다.
rm logs
rm: cannot remove 'logs': Is a directory
디렉터리를 삭제하려면 재귀 옵션이 필요하지만, 이 옵션은 하위 파일까지 삭제할 수 있으므로 신중해야 합니다. 먼저 디렉터리 안에 무엇이 있는지 확인합니다.
ls -ald logs
find logs -maxdepth 2 -type f -print
위 명령은 삭제하지 않고 목록만 보여줍니다. 출력 결과가 예상과 다르면 삭제 명령을 실행하지 않아야 합니다.
원인 분리: 삭제 전 확인 순서
삭제가 필요한 상황에서는 아래 순서대로 원인을 분리해 보세요. 이 순서는 운영 서버에서 실수를 줄이는 데 도움이 됩니다.
- 현재 사용자 확인: root인지 일반 사용자인지 확인합니다.
- 현재 경로 확인: 상대경로를 쓰기 전에
pwd를 봅니다. - 삭제 대상 확인:
ls -al또는find로 실제 대상을 출력합니다. - 파일 종류 확인: 일반 파일, 디렉터리, 심볼릭 링크인지 확인합니다.
- 서비스 사용 여부 확인: 로그나 설정 파일이면 서비스 상태와 로그를 봅니다.
- 삭제 대신 보관 가능성 확인: 바로 삭제하지 않고 임시 보관 디렉터리로 이동할 수 있는지 판단합니다.
잘못된 예시
아래 예시는 운영 서버에서 피해야 할 가능성이 높은 방식입니다. 특히 경로 확인 없이 넓은 패턴을 쓰는 것이 문제입니다.
cd /var/www
rm *.log
이 명령은 현재 디렉터리가 정확히 어디인지, 어떤 로그 파일이 잡히는지 확인하지 않습니다. 만약 작업 위치가 예상과 다르다면 원하지 않는 파일이 삭제될 수 있습니다.
다음처럼 권한 오류가 났다고 바로 관리자 권한으로 다시 실행하는 것도 위험합니다.
rm app.log
sudo rm app.log
sudo를 사용하기 전에는 파일 소유자와 디렉터리 권한을 먼저 확인해야 합니다. 관리자 권한은 잘못된 경로에도 그대로 적용될 수 있습니다.
수정 예시: 삭제 전 목록을 먼저 확인하기
로그 파일을 정리하려는 상황이라면 삭제보다 확인이 먼저입니다. Debian/Ubuntu 서버에서 웹 루트 아래 로그 파일을 확인한다고 가정하면 다음 순서로 진행할 수 있습니다.
pwd
ls -al /var/www/html
ls -al /var/www/html/*.log
패턴 결과가 예상한 로그 파일만 포함하는지 확인합니다. 결과가 많거나 낯선 파일이 섞여 있으면 삭제하지 말고 패턴을 더 좁혀야 합니다.
확인 후에도 삭제가 필요하다면 처음에는 대화형 옵션을 사용하는 편이 안전합니다.
rm -i /var/www/html/app.log
rm: remove regular file '/var/www/html/app.log'? y
-i 옵션은 파일마다 확인 질문을 표시합니다. 파일 수가 많은 경우에는 번거롭지만, 초보자나 운영 서버 작업에서는 실수를 줄이는 데 도움이 됩니다.
수정 예시: 바로 삭제하지 않고 임시 보관하기
삭제 대상이 맞는지 확신이 없을 때는 바로 지우지 않고 별도 디렉터리로 이동해 며칠 보관하는 방법도 있습니다. 단, 애플리케이션이 해당 파일을 계속 필요로 하는 경우 이동만으로도 문제가 생길 수 있으므로 서비스 영향 여부를 먼저 확인해야 합니다.
mkdir -p ~/delete-review
ls -al /var/www/html/app.log
mv /var/www/html/app.log ~/delete-review/
이 방식은 파일을 즉시 제거하지 않기 때문에, 잘못 판단했을 때 원래 위치로 되돌릴 가능성이 있습니다. 다만 설정 파일, 업로드 파일, 실행 파일은 이동만 해도 서비스가 실패할 수 있으므로 운영 환경에서는 신중하게 판단해야 합니다.
수정 예시: 오래된 로그만 찾고 나서 삭제하기
특정 기간이 지난 로그만 정리하려면 find를 사용할 수 있습니다. 하지만 find도 삭제 옵션을 붙이면 영향 범위가 넓어질 수 있으므로, 먼저 출력만 확인합니다.
find /var/log -type f -name '*.log' -mtime +14 -print
위 명령은 /var/log 아래에서 14일보다 오래된 .log 파일을 출력합니다. 실제 서버마다 로그 위치와 정책이 다르므로, 결과를 보고 삭제 대상이 맞는지 판단해야 합니다.
목록이 정확하다고 확인한 뒤에만 삭제를 검토합니다.
find /var/log/myapp -type f -name '*.log' -mtime +14 -print
삭제 실행은 서비스 로그 정책과 백업 여부를 확인한 뒤 진행해야 합니다. 시스템 로그나 패키지 관리 로그는 배포판과 설정에 따라 중요할 수 있으므로 임의로 지우지 않는 편이 안전합니다.
수정 후 확인 방법
삭제 또는 이동 후에는 원하는 파일만 처리되었는지 확인해야 합니다. rm은 성공해도 출력이 없는 경우가 많기 때문에 후속 확인이 중요합니다.
ls -al /var/www/html
ls -al ~/delete-review
df -h
웹서버나 애플리케이션 관련 파일을 정리했다면 서비스 상태와 로그도 확인합니다.
sudo systemctl status nginx --no-pager
sudo journalctl -u nginx -n 50 --no-pager
Nginx 설정 파일이나 웹 루트 파일을 건드린 경우에는 브라우저 화면만 보지 말고 서버 로그를 함께 확인하는 것이 좋습니다. 화면에는 403, 404, 502처럼 단순하게 보이지만 실제 원인은 파일 위치, 권한, 프록시 대상 포트 등 다른 곳에 있을 수 있습니다.
rm 사용 시 옵션별 주의점
| 옵션 | 의미 | 주의할 점 |
|---|---|---|
rm 파일 |
일반 파일 삭제 | 성공해도 출력이 없을 수 있으므로 삭제 전후 목록 확인이 필요합니다. |
rm -i 파일 |
삭제 전 확인 질문 표시 | 운영 서버에서 처음 삭제할 때 유용하지만, 많은 파일에는 시간이 걸릴 수 있습니다. |
rm -r 디렉터리 |
디렉터리와 하위 항목 삭제 | 하위 파일까지 삭제되므로 실행 전 find나 ls로 목록을 확인해야 합니다. |
rm -f 파일 |
확인 없이 강제 삭제 | 오류나 확인 질문을 줄이지만 실수도 감추기 쉬워 운영 서버에서는 신중해야 합니다. |
rm -rf 경로 |
재귀 삭제와 강제 삭제를 함께 수행 | 피해 범위가 커질 수 있으므로 습관적으로 사용하지 말아야 합니다. 실행 전 경로와 대상 목록 확인이 필요합니다. |
재발 방지 체크리스트
- 삭제 전
whoami로 현재 사용자를 확인했는가? pwd로 현재 작업 디렉터리를 확인했는가?- 상대경로보다 절대경로를 사용할 수 있는 상황인가?
ls -al또는find ... -print로 삭제 대상을 먼저 출력했는가?- 와일드카드가 예상한 파일만 포함하는지 확인했는가?
- 권한 오류가 났을 때 바로
sudo를 붙이지 않고 소유자와 권한을 확인했는가? - 디렉터리 삭제 전 하위 파일 목록을 확인했는가?
- 서비스가 사용 중인 로그나 설정 파일인지 확인했는가?
- 중요 파일이라면 삭제 대신 임시 보관으로 처리할 수 있는가?
- 삭제 후 서비스 상태와 로그를 확인했는가?
마무리
rm 명령어는 단순하지만 운영 서버에서는 되돌리기 어려운 결과를 만들 수 있습니다. 그래서 삭제 명령을 잘 아는 것보다, 삭제 전에 현재 사용자와 경로, 대상 목록, 권한, 서비스 사용 여부를 확인하는 습관이 더 중요합니다.
처음에는 권한 문제처럼 보였지만 실제로는 경로를 잘못 잡은 경우도 있고, 삭제 실패처럼 보였지만 실행 중인 프로세스가 파일을 잡고 있는 경우도 있습니다. 서버 작업에서는 명령을 다시 치기보다 현재 상태를 먼저 확인하는 쪽이 문제를 줄이는 데 도움이 됩니다.
FAQ
Q1. rm으로 삭제한 파일을 복구할 수 있나요?
일반적으로 rm으로 삭제한 파일은 휴지통으로 가지 않습니다. 파일시스템, 백업 상태, 스냅샷 여부에 따라 복구 가능성이 달라질 수 있지만, 운영 서버에서는 복구를 전제로 작업하면 위험합니다. 중요한 파일은 삭제 전 백업이나 임시 이동을 먼저 고려하는 것이 좋습니다.
Q2. rm -i를 항상 쓰면 안전한가요?
rm -i는 삭제 전 확인 질문을 보여 주므로 실수를 줄이는 데 도움이 됩니다. 하지만 파일 수가 많으면 확인을 반복하다가 무심코 y를 누를 수 있고, 스크립트 환경에서는 의도와 다르게 동작할 수 있습니다. 가장 중요한 것은 rm -i보다 먼저 삭제 대상 목록을 확인하는 것입니다.
Q3. Permission denied가 나오면 sudo rm을 쓰면 되나요?
바로 sudo rm을 실행하는 것은 권장하지 않습니다. 먼저 whoami, id, ls -al, ls -ld로 현재 사용자와 파일 소유자, 디렉터리 권한을 확인해야 합니다. 관리자 권한은 잘못된 경로에도 적용되므로, 삭제 대상이 확실할 때만 신중하게 사용해야 합니다.