[Linux 셸 스크립트] 파일처리 - 045 디렉터리에 있는 서브 디렉터리들의 디스크 사용량 조사하기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 파일처리 - 045 디렉터리에 있는 서브 디렉터리들의 디스크 사용량 조사하기

by 찬찬이 아빠 2021. 3. 26.
반응형
  1. 사용 명령어

(1) du

(2) sort

 

  2. 키워드 & 사용처

(1) 키워드

디스크 사용량, 파일 크기

 

(2) 사용처

디렉터리마다 디스크 사용량을 표시하고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./du-sub.sh
29116	/home/park/myapp/data/dir1/
4716	/home/park/myapp/data/dir2/
1020	/home/park/myapp/data/dir3/

 

 

  4. 스크립트

#!/bin/sh

 

data_dir="/home/park/myapp/data"

 

# $data_dir 디렉터리의 서브 디렉터리 용량 표시

du -sk ${data_dir}/*/ | sort -rn             

 

 

  5. 해설

이 스크립트는 셸 변수 data_dir로 지정한 디렉터리에서 서브 디렉터리들의 디스크 사용량을 조사합니다. data 디렉터리에는 dir1, dir2, dir3이라는 세 디렉터리가 있고 드 안에는 많은 파일과 디렉터리가 있다고 가정합니다.

data
 |- dir1
 |- dir2
 |- dir3

 

디스크 사용량을 조사하려면 du 명령어를 사용합니다. du 명령어로 표시되는 값은 파일 크기가 아니라 파일이 디스크에서 사용하는 블록 크기입니다. 블록 크기는 환경에 따라 값이 다르므로 셸 스크립트에서 du 명령어를 사용할 때는 -k 옵션(킬로바이트 단위)이나 -m 옵션(메가바이트 단위)으로 표시하도록 지정하는 것이 좋습니다.

 

예를 들어 다음 환경에서는 블록 크기가 512바이트이므로 -k 옵션으로 1024 바이트 단위로 표시하면 표시되는 값은 반이 됩니다.

$ du
1544
$ du -k
772

 

du 명령어를 인수 없이 실행하면 현재 디렉터리 아래에 있는 디렉터리를 대상으로 각각 사용하는 디스크 사용량을 표시합니다.

$ cd /home/park/myapp/data
$ du
29116	./dir1
8	./dir3/controller
8	./dir3/agent
1020	./dir3
4716	./dir2
35856	.

 

dir3이라는 디렉터리에는 controller와 agent라는 서브 디렉터리가 있어서 결과에 표시됩니다. 하지만 일반적으로 이렇게 표시하면 보기 힘들어지므로 dir3으로 합쳐서 사용량을 표시하고 싶을때 이 예제를 사용합니다.

 

에서는 du 명령어에 -s옵션은 실제로 인수로 지정한 대상의 디스크 사용량만 표시하고, 서브 디렉터리의 사용량은 표시하지 않는 옵션입니다. 에서 -s 옵션에 /*/ 인수를 넘기므로 서브 디렉터리마다 용량을 표시합니다. 또한 -k 옵션도 함께 지정해서 킬로바이트 단위로 표시합니다.

 

그리고 du 명령어 출력 결과를 파이프를 통해 -r 옵션을 지정한 sort 명령어에 넘기면 사용량이 많은 것부터 표시할 수 있습니다. 이때 -n 옵션도 함께 써서 문자열 정렬이 아닌 숫자 정렬을 합니다. -n 옵션을 쓰지 않으면 문자열 정렬이 되므로 이런 숫자값을 내림차순으로 정렬할 때는 -rn을 자주 사용합니다.

 

du 명령어는 -h(human-readable) 옵션을 쓰면 킬로바이트(K)나 메가바이트(M) 같은 단위로 사용량을 읽기 쉽게 표시할 수 있습니다.

$ du -h
29M	./data/dir1
8.0K	./data/dir3/controller
8.0K	./datadir3/agent
1020K	./data/dir3
4.7M	./data/dir2
36M	./data
36M	.

이렇듯 -h 옵션을 쓰면 보기 좋아지지만 sort 명령어로 사용량을 정렬할 수 없게 됩니다. 따라서 셸 스크립트에서 정렬할 때는 그다지 쓰지 않습니다.

일부 리눅스 sort 명령어는 -h(--human-numeric-sort) 옵션이 있어서 2K, 1G 같은 du 명령어의 -h 옵션 출력값을 바르게 정렬할 수 있습니다.

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글