du 명령어란?
du 명령어는 디스크 사용량을 확인하는 데 사용되는 명령어입니다. “Disk Usage”의 약자로, 파일 및 디렉토리의 디스크 공간 사용을 보고합니다. 주로 디스크 용량을 확인하거나 어떤 디렉토리 또는 파일이 가장 많은 공간을 차지하는지 확인할 때 유용합니다.
기본적으로 심볼릭 링크는 무시하며, 파일 자체와 실제 데이터 블록 크기만 계산합니다.
du 계산되지 않는 항목
삭제된 파일 (Deleted but Open Files)
삭제된 파일이 여전히 열려 있는 경우, 해당 파일은 du의 결과에 포함되지 않습니다.
이는 파일이 삭제되더라도 데이터 블록이 해제되지 않아 디스크 공간을 차지할 수 있기 때문입니다.
접근 권한이 없는 파일
현재 사용자에게 읽기 권한이 없는 파일이나 디렉터리는 무시됩니다.
심볼릭 링크
기본적으로 du는 심볼릭 링크를 무시하며, 심볼릭 링크 파일 자체의 크기만 계산합니다.
심볼릭 링크 대상의 크기를 포함하려면 -L 옵션을 사용합니다.
메타데이터
파일 시스템에서 사용되는 메타데이터(예: 저널링 데이터, inode 테이블)는 du 계산에 포함되지 않습니다.
예: ext4 파일 시스템의 예약된 블록은 일반 사용량에 포함되지 않습니다.
스냅샷 데이터
Btrfs, ZFS, LVM 등 스냅샷을 지원하는 파일 시스템에서는 스냅샷이 디스크 공간을 차지하지만, du는 이를 무시합니다.
삭제된 소켓 및 파이프
소켓 파일과 네임드 파이프는 데이터 블록을 차지하지 않으므로 디스크 사용량 계산에서 제외됩니다.
하드 링크 (Hard Links)
하드 링크된 파일은 같은 데이터 블록을 공유하므로 du는 중복 계산하지 않습니다.
하드 링크를 포함한 파일은 하나로 계산됩니다.
du 옵션
옵션 | 설명 | 예시 |
-h 또는 –human-readable | 사람이 읽기 쉬운 형식으로 결과를 표시합니다. 파일 크기를 자동으로 크기 단위(KB, MB, GB 등)로 변환합니다. | du -h |
-s 또는 –summarize | 각 디렉토리의 하위 디렉토리를 합산하지 않고, 전체 크기만을 표시합니다. | du -s |
-c 또는 –total | 모든 디렉토리의 크기를 합산하여 마지막에 표시합니다. | du -c |
-a 또는 –all | 모든 파일과 디렉토리의 디스크 사용량을 표시합니다. | du -a |
–max-depth=N | 디렉토리 구조를 최대 N 레벨만큼만 확인합니다. | du –max-depth=1 |
-k 또는 –kilobytes | 결과를 킬로바이트(KB) 단위로 표시합니다. | du -k |
-m 또는 –megabytes | 결과를 메가바이트(MB) 단위로 표시합니다. | du -m |
–exclude=PATTERN | 특정 패턴과 일치하는 파일이나 디렉토리를 제외하고 결과를 표시합니다. | du –exclude=*.log |
du 사용방법과 예시
-h 또는 –human-readable 옵션사용
사람이 읽기 쉬운 형식으로 결과를 표시합니다. 파일 크기를 자동으로 크기 단위(KB, MB, GB 등)로 변환합니다.
[root@localhost ~]# du -h
12K ./file1.txt
32K ./directory1
56K ./directory2
-s 또는 –summarize
각 디렉토리의 하위 디렉토리를 합산하지 않고, 전체 크기만을 표시합니다.
[root@localhost ~]# du -s
100K .
-c 또는 –total
모든 디렉토리의 크기를 합산하여 마지막에 표시합니다.
[root@localhost ~]# du -c
12K ./file1.txt
32K ./directory1
56K ./directory2
100K total
-k 또는 –kilobytes
결과를 킬로바이트(KB) 단위로 표시합니다.
[root@localhost ~]# du -k
12 ./file1.txt
32 ./directory1
56 ./directory2
-m 또는 –megabytes
결과를 메가바이트(MB) 단위로 표시합니다.
[root@localhost ~]# du -m
0 ./file1.txt
1 ./directory1
1 ./directory2
–exclude=PATTERN
특정 패턴과 일치하는 파일이나 디렉토리를 제외하고 결과를 표시합니다.
[root@localhost ~]# du --exclude=*.log
12K ./file1.txt
32K ./directory1
56K ./directory2
가장 많이 쓰는 조합 du -h –max-depth=1
du -h –max-depth=1 명령어는 현재 디렉토리의 하위 디렉토리의 크기를 휴먼 리더블 형식으로 표시하며, 최대 1 레벨의 하위 디렉토리만 표시합니다.
[root@localhost ~]# du -h --max-depth=1
32K ./directory1
56K ./directory2
12K ./file1.txt
100K .
du가 무시한 데이터를 찾는 방법
# 삭제된 파일
lsof | grep '(deleted)'
# 접근 권한 문제
sudo du -sh /path/to/directory
# 파일 시스템 메타데이터
sudo tune2fs -l /dev/sdX | grep "Reserved block count"
# 스냡샷
btrfs subvolume list /mount/point
du와 쿼터의 차이점
du: 접근 가능한 데이터 블록만 계산하고 쿼터는 파일 시스템의 모든 데이터 블록을 추적하며, 삭제된 파일과 메타데이터, 스냅샷 등을 포함.