/tmp가 어느새 가득 차서 No space left on device가 뜬 경험, 한 번쯤 있습니다. 임시 파일을 만든 프로그램이 죽거나 정리를 안 하면 찌꺼기가 계속 쌓입니다. 직접 cron을 짜기 전에, 대부분의 배포판에 이미 들어 있는 systemd-tmpfiles를 쓰면 됩니다.
진단 — 무엇이 /tmp를 채우나
먼저 오래된 파일이 실제로 쌓여 있는지 확인합니다.
du -sh /tmp # 전체 크기
find /tmp -type f -mtime +10 | head # 10일 이상 안 건드린 파일
오래된 파일이 많다면 자동 정리 대상입니다.
개념 — tmpfiles는 규칙 기반이다
systemd-tmpfiles는 설정 파일의 규칙을 읽어 파일·디렉터리를 생성하거나 오래된 것을 비웁니다. 기본 규칙은 /usr/lib/tmpfiles.d/에 있고, 사용자 규칙은 /etc/tmpfiles.d/에 둡니다. 같은 경로 규칙이 겹치면 /etc 쪽이 우선합니다.
규칙 한 줄의 형식은 타입 경로 모드 소유자 그룹 수명 입니다. 정리에서 핵심은 마지막 수명(age) 필드로, 이 시간보다 오래된 파일이 삭제 대상이 됩니다.
d /tmp 1777 root root 10d
위 줄은 "/tmp를 디렉터리로 두되, 10일 넘게 손대지 않은 내용물은 비운다"는 뜻입니다. 타입 d는 디렉터리 자체는 유지하고 안의 항목만 정리합니다.
단계 — 안전하게 적용하기
| 단계 | 명령 | 목적 |
|---|---|---|
| 1 | cat /usr/lib/tmpfiles.d/tmp.conf | 기본 규칙 확인 |
| 2 | 규칙 파일 작성 | /etc/tmpfiles.d/에 사용자 규칙 |
| 3 | systemd-tmpfiles --clean | 정리 한 번 실행 |
| 4 | 타이머 확인 | 자동 반복 동작 점검 |
-
기본값을 먼저 봅니다. 배포판이 이미
/tmp를 10일로 정리하고 있을 수 있습니다. -
수명을 바꾸려면
/etc/tmpfiles.d/tmp.conf를 만들어 덮어씁니다. 예를 들어 7일로 줄이려면d /tmp 1777 root root 7d한 줄을 넣습니다. -
즉시 적용 전에 무엇이 지워질지 확인합니다.
systemd-tmpfiles --clean --dry-run # 어떤 파일이 대상인지만 출력
systemd-tmpfiles --clean # 실제 정리 실행
- 평소에는
systemd-tmpfiles-clean.timer가 주기적으로 이 일을 합니다. 동작 중인지 확인합니다.
systemctl status systemd-tmpfiles-clean.timer
systemctl list-timers | grep tmpfiles
타이머가 비활성이면 systemctl enable --now systemd-tmpfiles-clean.timer로 켭니다.
체크리스트
du -sh /tmp # 현재 크기
systemd-tmpfiles --clean --dry-run # 삭제 대상 미리보기 (필수)
systemd-tmpfiles --clean # 한 번 정리
systemctl list-timers | grep tmpfiles # 자동 타이머 동작 확인
주의할 점: 수명 필드를 너무 짧게 잡으면 빌드 중인 임시 파일이나 세션 데이터까지 지워질 수 있습니다. --dry-run으로 반드시 먼저 확인하세요.
systemd 유닛·타이머와 파일시스템 운영 감각을 명령어로 직접 익히고 싶다면 리눅스 트랙에서 회원가입 없이 무료로 실습할 수 있습니다.