기본 문법
du [옵션] [파일 또는 디렉터리...]
du(disk usage)는 지정한 디렉터리와 그 하위 항목이 차지하는 디스크 공간을 계산해 출력하는 명령어입니다. 아무 옵션 없이 실행하면 하위 디렉터리마다 누적 용량을 한 줄씩 보여 주고, 마지막 줄에 지정한 경로의 총합이 나옵니다. 기본 단위는 1KB 블록이며, -h 로 사람이 읽기 쉬운 단위(K, M, G)로 바꿀 수 있습니다.
실무에서는 디스크가 가득 찼을 때 원인을 찾는 데 자주 사용합니다. df 로 파티션 전체의 사용률을 확인한 뒤, du 로 어느 디렉터리가 공간을 많이 쓰는지 좁혀 나가는 순서가 일반적입니다. 로그 디렉터리나 백업 디렉터리처럼 시간이 지나며 커지는 경로를 점검할 때 유용합니다.
옵션은 -sh 처럼 묶어서 쓸 수 있습니다. 이는 -s 와 -h 를 함께 지정한 것과 같으며, 별도의 옵션이 아닙니다.
리눅스마스터·LPIC 등 자격시험에서는 du 와 df 의 차이, -s(합계만)와 -h(읽기 쉬운 단위) 옵션의 의미를 묻는 문제가 나옵니다. 셸 스크립트에서 임계치를 검사할 때는 단위가 고정된 du -sm 이나 du -sk 를 써서 숫자만 뽑아 비교하는 방식이 일반적입니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-h, --human-readable | K, M, G 등 사람이 읽기 쉬운 단위로 출력 | du -h /var/log |
-s, --summarize | 하위 목록 없이 지정한 경로의 합계만 출력 | du -s /home/exercise |
-m | 1MB(1048576바이트) 단위로 출력(--block-size=1M 과 동일) | du -sm /home/exercise/storage |
-k | 1KB 단위로 출력(기본값과 동일) | du -sk /tmp |
-a, --all | 디렉터리뿐 아니라 개별 파일 용량도 모두 출력 | du -a /tmp/demo |
-c, --total | 마지막에 total 합계 줄을 추가로 출력 | du -ch /tmp/demo/a /tmp/demo/b |
-d N, --max-depth=N | N 단계 깊이까지만 출력(깊은 트리 요약에 사용) | du -h --max-depth=1 /var |
--apparent-size | 블록 할당량이 아닌 파일의 논리적 크기로 계산 | du -sh --apparent-size /tmp/demo |
--exclude=패턴 | 패턴에 맞는 파일·디렉터리를 계산에서 제외 | du -sh --exclude='*.log' /tmp/demo |
-x, --one-file-system | 다른 파일 시스템으로 넘어가지 않고 현재 파일 시스템만 계산 | du -sh -x / |
실무 예시
디렉터리 총 용량 확인
준비: mkdir -p /tmp/demo/storage; dd if=/dev/zero of=/tmp/demo/storage/big.bin bs=1M count=5 2>/dev/null
$ du -sh /tmp/demo/storage
5.0M /tmp/demo/storage
지정한 디렉터리 전체가 쓰는 용량을 한 줄 요약으로 보여 줍니다. 하위 목록이 필요 없을 때 쓰는 형태입니다.
하위 디렉터리별 용량 나열
준비: mkdir -p /tmp/demo/lab/backup /tmp/demo/lab/app /tmp/demo/lab/cache; dd if=/dev/zero of=/tmp/demo/lab/backup/b.bin bs=1M count=6 2>/dev/null; dd if=/dev/zero of=/tmp/demo/lab/app/a.bin bs=1M count=3 2>/dev/null; dd if=/dev/zero of=/tmp/demo/lab/cache/c.bin bs=1M count=1 2>/dev/null
$ du -h --max-depth=1 /tmp/demo/lab
6.0M /tmp/demo/lab/backup
3.0M /tmp/demo/lab/app
1.0M /tmp/demo/lab/cache
10M /tmp/demo/lab
바로 아래 단계 디렉터리별 용량과 지정 경로의 합계를 확인합니다. 어느 디렉터리가 공간을 많이 쓰는지 좁혀 갈 때 씁니다.
크기순으로 정렬해 보기
준비: 앞 예시에서 만든 /tmp/demo/lab 구조를 그대로 사용합니다.
$ du -sm /tmp/demo/lab/backup /tmp/demo/lab/app /tmp/demo/lab/cache | sort -rn
bash: line 1: $'\354\225\236': command not found
6 /tmp/demo/lab/backup
3 /tmp/demo/lab/app
1 /tmp/demo/lab/cache
단위를 MB로 고정하면 숫자가 한 가지 단위로 나오므로 sort -rn 으로 큰 것부터 정렬할 수 있습니다. 러닉스 158번 문제와 같은 형태입니다.
개별 파일 용량까지 보기
준비: 앞 예시에서 만든 /tmp/demo/lab 구조를 그대로 사용합니다.
$ du -ah /tmp/demo/lab
bash: line 1: $'\354\225\236': command not found
6.0M /tmp/demo/lab/backup/b.bin
6.0M /tmp/demo/lab/backup
3.0M /tmp/demo/lab/app/a.bin
3.0M /tmp/demo/lab/app
1.0M /tmp/demo/lab/cache/c.bin
1.0M /tmp/demo/lab/cache
10M /tmp/demo/lab
-a 를 붙이면 디렉터리뿐 아니라 파일 하나하나의 용량도 출력됩니다. 어떤 파일이 용량을 차지하는지 확인할 때 유용합니다.
임계치 초과 여부 검사
준비: 앞 예시에서 만든 /tmp/demo/lab 구조를 그대로 사용합니다.
$ SIZE=$(du -sm /tmp/demo/lab | cut -f1); [ "$SIZE" -gt 5 ] && echo "WARN: ${SIZE}MB" || echo "OK: ${SIZE}MB"
bash: line 1: $'\354\225\236': command not found
WARN: 10MB
du -sm 의 첫 필드만 잘라내 숫자로 비교합니다. 디스크 사용량 경고 스크립트(러닉스 226번)의 기본 골격입니다.
주의할 점
- du 는 실제 할당된 블록 수를 세므로 ls -l 로 본 파일 크기 합계와 다를 수 있습니다. 논리 크기는 --apparent-size 를 씁니다.
- -h 출력은 K/M/G 가 섞여 있어 sort -rn 으로 정렬하면 틀립니다. 정렬에는 sort -h 를 쓰거나, 비교·계산에는 -sm, -sk 로 단위를 고정하세요.
- 일반 사용자로 /var 등을 훑으면 권한 없는 디렉터리에서 오류가 나고 합계가 실제보다 작게 나옵니다.
- 삭제된 파일을 프로세스가 붙잡고 있으면 du 합계와 df 사용량이 어긋납니다. 파티션 전체 사용률은 df 로 확인하세요.
- du 결과를 근거로 파일을 지울 때는 먼저 경로와 대상을 확인하고, 삭제 전 목록을 출력해 검토하세요. 시스템 디렉터리나 서비스가 사용 중인 파일을 임의로 지우면 복구가 어려울 수 있습니다.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
