Linux / 명령어 / du - 파일과 디렉터리 용량 확인

du는 지정한 파일과 디렉터리가 파일시스템에서 사용하는 공간을 계산해 보여 주는 명령어입니다. 현재 디렉터리의 하위 항목별 크기를 사람이 읽기 쉬운 단위로 확인하려면 du -h --max-depth=1 ., 전체 합계만 보려면 du -sh .를 사용합니다.

du -h --max-depth=1 .
du -sh .

du의 기본값은 파일 내용의 겉보기 크기가 아니라 파일시스템에서 실제로 할당된 블록을 기준으로 합니다. 희소 파일, 압축 파일시스템, 하드 링크, Copy-on-Write 환경에서는 다른 도구의 숫자와 차이가 날 수 있습니다.

du 명령어는 무엇을 계산하나요?

du는 disk usage의 약자로, 파일과 디렉터리 트리를 순회하며 디스크 사용량을 합산합니다. 파일 내용뿐 아니라 파일시스템 블록 할당 방식의 영향을 받으므로 ls -l이 보여 주는 파일 크기와 항상 같지는 않습니다.

옵션과 계산상의 제한은 GNU Coreutils du 공식 문서에서 확인할 수 있습니다.

가장 자주 사용하는 기본 명령

현재 디렉터리 전체 크기 확인

du -sh .

-s는 합계만, -h는 KiB·MiB·GiB처럼 읽기 쉬운 단위로 표시합니다. 숨김 파일과 숨김 디렉터리도 현재 디렉터리 합계에 포함됩니다.

바로 아래 항목별 크기 확인

du -h --max-depth=1 .

--max-depth=1은 시작점에서 한 단계 아래까지 표시합니다. GNU du에서는 짧게 -d 1로 쓸 수도 있지만, 다른 Unix 계열에서는 지원 여부가 다를 수 있습니다.

큰 항목을 정렬해서 찾기

du -h --max-depth=1 /var | sort -h

sort -h는 사람이 읽기 쉬운 단위를 고려해 정렬합니다. 큰 항목을 위에 표시하려면 sort -hr를 사용합니다.

du -h --max-depth=1 /var | sort -hr

권한이 없는 디렉터리에서는 오류가 발생하고 합계가 불완전할 수 있습니다. 필요한 범위에만 적절한 권한으로 실행하며, 단순히 오류를 숨기고 결과를 완전한 값처럼 해석하지 마세요.

주요 옵션 정리

옵션 기능 사용 예
-h 읽기 쉬운 단위로 표시 du -h /var/log
-s 각 인수의 합계만 표시 du -sh /var/log
-a 디렉터리뿐 아니라 파일도 표시 du -ah ./data
-c 마지막에 전체 합계 추가 du -ch file1 file2
-d N 표시할 최대 디렉터리 깊이 지정 du -h -d 2 .
-x 다른 파일시스템으로 넘어가지 않음 du -xhd1 /
--exclude 패턴에 맞는 경로 제외 du -sh --exclude='*.log' .
--apparent-size 할당량 대신 겉보기 크기 표시 du -sh --apparent-size file

파일과 디렉터리를 세밀하게 찾기

모든 파일까지 표시하기

du -ah ./data | sort -hr | head -n 20

작은 디렉터리에서 빠르게 상위 항목을 찾는 데 유용합니다. 대규모 파일시스템에서는 모든 경로를 순회하고 정렬하므로 디스크 I/O와 메모리를 많이 사용할 수 있습니다.

최소 크기 이상의 항목만 표시하기

du -h --threshold=1G ./data

GNU du의 --threshold는 지정 크기 이상인 항목만 출력합니다. 배포판이나 다른 Unix 구현에서는 지원하지 않을 수 있으므로 이식성이 필요하면 du --help를 확인하세요.

특정 파일이나 디렉터리 제외하기

du -sh --exclude='*.log' --exclude='cache' .

--exclude의 패턴은 셸이 먼저 확장하지 않도록 작은따옴표로 감싸는 것이 안전합니다. 제외 규칙이 많다면 한 줄에 하나씩 적은 파일을 만들고 --exclude-from을 사용할 수 있습니다.

du -sh --exclude-from=du-exclude.txt .

실제 사용량과 apparent size의 차이

기본 디스크 사용량

기본 du는 파일시스템이 파일에 할당한 블록을 합산합니다. 아주 작은 파일도 최소 블록 크기만큼 공간을 사용할 수 있고, 파일의 메타데이터나 파일시스템 내부 구조는 결과에 완전히 반영되지 않을 수 있습니다.

겉보기 크기

--apparent-size는 일반 파일에서 파일 내용의 논리적인 길이에 가까운 값을 보여 줍니다.

du -h sample.img
du -h --apparent-size sample.img

희소 파일은 논리적 크기가 매우 커도 실제 블록을 거의 사용하지 않을 수 있습니다. 반대로 파일시스템 압축, 중복 제거, 스냅샷, Copy-on-Write 공유 블록이 있는 환경에서는 기본 du도 물리 장치의 실제 소비량과 다르게 보일 수 있습니다.

하드 링크

여러 경로가 같은 inode를 가리키는 하드 링크라면 GNU du는 기본적으로 같은 파일의 공간을 한 번만 셉니다. 여러 인수를 전달하는 순서에 따라 어느 경로에 사용량이 귀속되는지가 달라질 수 있습니다. 각 링크를 따로 계산하는 옵션을 사용하면 합계가 실제 고유 블록보다 커질 수 있습니다.

파일시스템 경계를 제한하기

다른 마운트 지점 건너뛰기

루트 파일시스템을 조사할 때 -x 또는 --one-file-system을 사용하면 다른 파일시스템으로 내려가지 않습니다.

du -xhd1 /

이 옵션은 네트워크 파일시스템, 별도 데이터 볼륨, 가상 파일시스템을 의도치 않게 순회하는 일을 줄입니다. 다만 별도 마운트 지점의 사용량은 결과에서 제외되므로 조사 목적과 일치하는지 확인해야 합니다.

심볼릭 링크 처리

du는 기본적으로 명령행 인수나 디렉터리 안의 심볼릭 링크가 가리키는 대상을 모두 따라가지 않습니다. 링크를 따라가도록 하는 옵션은 다른 디렉터리나 파일시스템을 대량으로 순회할 수 있으므로 대상 구조를 확인한 뒤 사용하세요.

du와 df 결과가 다른 이유

계산 대상이 다릅니다

du는 접근할 수 있는 디렉터리 트리의 파일을 합산하지만, df는 파일시스템 전체 블록 사용 현황을 보고합니다. 파일시스템 메타데이터, 예약 블록, 스냅샷, 권한으로 읽지 못한 경로 등 때문에 차이가 생길 수 있습니다.

삭제됐지만 열린 파일

프로세스가 파일을 열어 둔 상태에서 경로만 삭제되면 du는 그 파일을 찾지 못하지만, 프로세스가 파일을 닫기 전까지 블록은 해제되지 않아 df에는 계속 사용 중으로 나타납니다. 다음과 같이 삭제된 열린 파일을 확인할 수 있습니다.

lsof +L1

대상 프로세스를 무조건 강제 종료하지 말고 서비스의 정상 재시작·로그 재열기 절차를 확인하세요. 삭제된 파일의 파일 디스크립터를 임의로 조작하면 데이터 손실이나 서비스 장애가 발생할 수 있습니다.

안전하고 정확하게 사용하는 방법

  • 먼저 df -h로 가득 찬 파일시스템을 확인한 뒤 해당 마운트 지점 안에서 du를 실행합니다.
  • 루트에서 조사할 때는 -x로 다른 파일시스템을 제외할지 결정합니다.
  • 대규모 디렉터리에서는 업무 부하가 낮은 시간에 깊이를 제한해 단계적으로 조사합니다.
  • 권한 오류가 있으면 결과가 불완전하다는 사실을 기록하고, 필요한 최소 권한만 사용합니다.
  • 파일을 삭제하기 전 소유 프로세스, 백업, 보관 정책과 복구 가능 여부를 확인합니다.
  • 파일명에는 줄바꿈 같은 특수 문자가 포함될 수 있으므로 자동화에서는 NUL 구분 옵션을 지원하는 도구 조합을 고려합니다.

자주 묻는 질문

숨김 파일도 du 결과에 포함되나요?

du -sh .처럼 디렉터리 자체를 지정하면 숨김 파일도 합계에 포함됩니다. 그러나 셸의 *는 기본적으로 숨김 항목과 일치하지 않으므로 du -sh * 결과에는 빠질 수 있습니다.

가장 큰 디렉터리만 빠르게 찾으려면 어떻게 하나요?

du -h --max-depth=1 대상 | sort -hr로 한 단계씩 확인하세요. 전체 트리의 모든 파일을 한꺼번에 정렬하는 것보다 부하와 출력량을 줄일 수 있습니다.

du -sh와 ls -lh의 크기가 다른 이유는 무엇인가요?

ls -lh는 주로 파일의 논리적 길이를, 기본 du는 할당된 파일시스템 블록을 보여 줍니다. 희소 파일, 작은 파일과 블록 크기 때문에 차이가 날 수 있습니다.

Permission denied 오류를 숨겨도 되나요?

화면을 간결하게 만들 수는 있지만 결과가 불완전하다는 사실도 사라집니다. 용량 조사에서는 먼저 오류가 난 경로를 확인하고, 권한이 필요한 이유와 범위를 검토하는 편이 안전합니다.

정리

du -sh 경로는 합계를, du -h --max-depth=1 경로는 바로 아래 항목별 사용량을 보여 줍니다. 큰 항목을 찾을 때는 sort -hr와 조합하고, 다른 파일시스템을 제외하려면 -x를 사용하세요.

du 값은 파일시스템 구조와 할당 방식의 영향을 받는 추정치입니다. df와 차이가 나면 삭제된 열린 파일, 예약 블록, 스냅샷과 권한 문제까지 확인해야 합니다.

같은 카테고리의 다른 글
Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux last 명령어로 사용자 로그인·로그아웃, 재부팅과 실패한 로그인 이력을 확인하는 방법을 설명합니다. wtmp·btmp, 기간 필터, 상태 해석과 보안 조사 시 한계를 함께 정리합니다.

Linux / 명령어 / apropos - 설명 키워드로 명령어 검색

Linux / 명령어 / apropos - 설명 키워드로 명령어 검색

apropos 명령어로 이름을 모르는 리눅스 명령과 매뉴얼을 기능 키워드로 찾는 방법을 설명합니다. 정규 표현식, 모든 키워드 일치, 섹션 제한과 검색 결과가 없을 때의 해결 방법을 다룹니다.

Linux / 명령어 / rsync - 파일·디렉터리의 변경분 동기화

Linux / 명령어 / rsync - 파일·디렉터리의 변경분 동기화

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

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

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

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

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

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

Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux xz 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / reboot - 시스템 안전하게 재시작

Linux / 명령어 / reboot - 시스템 안전하게 재시작

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

Linux / 명령어 / file - 파일 종류와 형식 확인

Linux / 명령어 / file - 파일 종류와 형식 확인

Linux file 명령어로 확장자와 관계없이 실제 파일 형식, MIME 유형과 문자 인코딩을 확인하는 방법을 설명합니다. 심볼릭 링크, 압축 파일, 여러 파일 검사와 스크립트 활용법도 정리합니다.

Linux / 명령어 / rmdir - 빈 디렉터리 삭제

Linux / 명령어 / rmdir - 빈 디렉터리 삭제

Linux rmdir 명령어로 빈 디렉터리와 비어 있는 상위 경로를 안전하게 삭제하는 방법을 설명합니다. rm -r과의 차이, 실패 원인과 스크립트 사용법도 알아봅니다.

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

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