갈루아의 반서재

ls 명령어를 이용하여 디렉토리 콘텐츠를 리스팅하는 경우, 디렉토리의 크기가 항상 4096 bytes (4 KB) 임을 확인할 수 있다. 아래를 보자.

/var$ ls -al
total 56
drwxr-xr-x 14 root root   4096 Oct 27 05:19 .
drwxr-xr-x 25 root root   4096 Apr  4 06:37 ..
drwxr-xr-x  2 root root   4096 Apr  4 07:36 backups
drwxr-xr-x 13 root root   4096 Nov  9 07:00 cache
drwxrwxrwt  2 root root   4096 Nov 18 06:25 crash
drwxr-xr-x 47 root root   4096 Jan 19 09:10 lib
drwxrwsr-x  2 root staff  4096 Apr 24  2018 local
lrwxrwxrwx  1 root root      9 Oct  3  2018 lock -> /run/lock
drwxrwxr-x 14 root syslog 4096 Apr  4 06:25 log
drwxrwsr-x  2 root mail   4096 Oct  3  2018 mail
drwxr-xr-x  2 root root   4096 Oct  3  2018 opt
lrwxrwxrwx  1 root root      4 Oct  3  2018 run -> /run
drwxr-xr-x  4 root root   4096 Oct 22 09:29 snap
drwxr-xr-x  4 root root   4096 Oct  3  2018 spool
drwxrwxrwt  4 root root   4096 Apr  4 08:39 tmp
drwxr-xr-x  3 root root   4096 Oct 27 05:19 www

이는 실제 그 디렉토리가 차지하는 크기가 아니라 해당 디렉토리의 메타 정보를 담는데 사용되는 공간의 크기이다. 

실제 디렉토리의 크기를 확인할 수 있는 명령은 "disk usage"의 약자인 du 이다. 그럼 du 명령을 어떻게 활용하는지 살펴보자.

du 명령은 특정 파일이나 디렉토리에 의해 사용되고 있는 파일 공간의 크기를 보여준다. 그 특정 경로가 디렉토리라면, du는 해당 디렉토리에 포함된 각각의 파일과 서브디렉토리의 디스크 사용량을 요약해서 보여준다. 경로가 정의되어 있지 않는 경우에는 현재 작업 디렉토리의 디스크 사용량을 리포팅해준다.

예를 들어 /var 디렉토리의 전체 사이즈를 알고 싶다면, 다음과 같은 명령으로 가능하다. 

$ sudo du -sh /var
1.7G    /var

명령어와 그 인수에 대해 하나씩 살펴보자. /var 디렉토리의 대부분의 파일과 디렉토리는 root 사용자의 소유이므로 sudo 로 시작한다. 일반 사용자로는 확인할 수 없다. sudo 를 제외하고 실행하면, 다음과 같은 에러메시지가 출력된다. 

$ du -sh /var
du: cannot read directory '/var/lib/nginx/uwsgi': Permission denied
du: cannot read directory '/var/lib/nginx/proxy': Permission denied
du: cannot read directory '/var/lib/nginx/fastcgi': Permission denied

s - 특정 디렉토리의 전체 크기를 보여준다. s 를 빼면 서브디렉토리를 하나씩 리스팅해서 보여주게 된다.

h - 읽기 좋은 포맷으로 출력해준다. 만약 h 를 빼고 실행하면 다음과 같이 표시된다. 

$ sudo du -s /var
1767932 /var

1 단계 서브디렉토리의 디스크 사용량을 표시하고 싶다면, 2가지 방법이 있다. 하나는 * 심볼을 이용하는 것이다. 아래의 c 스위치는 각 크기의 총합을 표시하게 해준다. 

$ sudo du -shc /var/*
2.5M    /var/backups
78M     /var/cache
4.0K    /var/crash
1.1G    /var/lib
4.0K    /var/local
0       /var/lock
204M    /var/log
4.0K    /var/mail
4.0K    /var/opt
0       /var/run
44K     /var/snap
28K     /var/spool
32K     /var/tmp
347M    /var/www
1.7G    total

다른 방법으로는 서브디렉토리의 레벨을 특정하는 --max-depth 스위치를 사용할 수도 있다. 

$ sudo du -h --max-depth=1 /var
1.1G    /var/lib
4.0K    /var/opt
204M    /var/log
28K     /var/spool
4.0K    /var/crash
32K     /var/tmp
347M    /var/www
4.0K    /var/local
78M     /var/cache
44K     /var/snap
2.5M    /var/backups
4.0K    /var/mail
1.7G    /var

du 명령어는 다른 명령어와 결합해서 사용할 수 있다. 예를 들면 크기가 큰 디렉토리 5개를 다음과 같이 나열할 수 있다.

$ sudo du -h /var/ | sort -rh | head -5
1.7G    /var/
1.1G    /var/lib
639M    /var/lib/snapd
443M    /var/lib/snapd/snaps
347M    /var/www/html