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 옵션 출력값을 바르게 정렬할 수 있습니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 파일처리 - 047 바이너리 파일에 포함된 문자열 열기 (0) | 2021.03.26 |
---|---|
[Linux 셸 스크립트] 파일처리 - 046 작업 파일을 만들 때 내용을 읽지 못하도록 보안 대책 세우기 (0) | 2021.03.26 |
[Linux 셸 스크립트] 파일처리 - 044 두 디렉터리를 비교해서 한 쪽에만 있는 파일 표시하기 (0) | 2021.03.26 |
[Linux 셸 스크립트] 파일처리 - 043 두 파일을 비교해서 오래된 파일 삭제하기 (0) | 2021.03.25 |
[Linux 셸 스크립트] 파일처리 - 042 처리 시작 전에 실행 권한을 확인해서 정상 동작이 가능한지 확인 후 실행하기 (0) | 2021.03.25 |
댓글