Skip to Content
Infra & DevOpsdu와 sort로 큰 디렉터리 찾기
☁️ Infra & DevOps2018년 1월 26일

du와 sort로 큰 디렉터리 찾기

#linux#shell#du#sort#disk

디스크 사용량을 확인하며 남겨 둔 du와 sort 조합입니다. 파일시스템 전체의 여유 공간은 df로 보고, 어느 디렉터리가 공간을 쓰는지 더 들어가 볼 때 du를 사용합니다.

기존 명령의 흐름

원래 메모의 명령은 다음과 같았습니다.

bash
du -ks * | sort -nr | cut -f2 | xargs -d '\n' du -sh

먼저 KiB 단위의 사용량으로 정렬한 뒤 경로를 추려, 다시 읽기 쉬운 단위로 출력하는 방식입니다.

구간역할
du -ks *셸에서 펼친 각 항목의 사용량 합계
sort -nr숫자 기준 내림차순 정렬
cut -f2탭으로 구분된 경로 추출
xargs -d '\n' du -sh경로별 사용량을 읽기 쉬운 단위로 재출력

이 명령은 디렉터리를 두 번 읽고, *에 숨김 항목이 기본적으로 포함되지 않습니다. 경로에 탭이나 줄바꿈이 있으면 파이프라인의 필드 구분도 맞지 않을 수 있습니다. xargs -d 역시 모든 운영체제에서 지원하는 옵션은 아닙니다.

GNU 도구로 한 단계만 확인

GNU sort의 -h는 K·M·G 같은 단위를 해석합니다. GNU du의 --max-depth와 조합하면 다음처럼 줄일 수 있습니다.

bash
du -h --max-depth=1 -- . | sort -hr

현재 디렉터리 전체와 바로 아래 디렉터리들의 합계를 큰 순서대로 보여 줍니다. .에서 탐색하므로 숨김 디렉터리도 포함됩니다. 전체 합계인 . 행과 각 하위 디렉터리의 값을 중복해서 더하지 않아야 합니다.

같은 파일시스템 안에서만 확인하려면 -x를 추가할 수 있습니다.

bash
du -xh --max-depth=1 -- /var/log | sort -hr

권한 오류가 있으면 일부 경로를 읽지 못한 결과일 수 있습니다. 이 명령은 파일을 삭제하지 않으며, 큰 디렉터리를 찾은 뒤 그 안으로 범위를 좁혀 다시 확인할 수 있습니다.

df와 du의 차이

du는 기본적으로 파일이 차지하는 디스크 블록을 합산합니다. 희소 파일은 겉으로 보이는 파일 길이보다 실제 점유량이 작을 수 있고, 이미 삭제됐지만 프로세스가 열고 있는 파일은 경로 탐색에서 빠질 수 있습니다.

그래서 df의 사용량과 du의 합계가 항상 같지는 않습니다. 차이가 크다면 마운트 범위와 읽기 권한, 삭제 후 열린 파일 등을 구분해서 확인해야 합니다.

위의 간단한 명령은 GNU 도구 기준입니다. 다른 환경에서는 du의 깊이 옵션과 sort -h 지원 여부를 설치된 명령의 도움말에서 확인하면 됩니다.

참고 자료

Last updated on