1. 사용 명령어 |
(1) :(널 명령어)
(2) uptime
(3) sleep
2. 키워드 & 사용처 |
(1) 키워드
빈 파일, 초기화
(2) 사용처
스크립트 시작할 때 기록 파일, 임시 파일을 초기화하고 싶을 때 사용합니다.
3. 실행 예제 |
$ ./null.sh
4. 스크립트 |
#!/bin/sh
# uptime 명령어 기록 파일 정의
uptimelog="uptime.log"
# 널 명령어로 빈 파일로 초기화
: > $uptimelog ①
# 10초마다 6번, uptime 명령어 실행
for i in 1 2 3 4 5 6 ②
do
uptime >> $uptimelog ③
sleep 10
done
5. 해설 |
이 스크립트는 현재 서버 부하 상태를 확인합니다. 로드 평균치(서버 부하)를 출력하는 uptime 명령어 출력 결과를 로그 파일에 10초마다 6번, 즉 1분간 출력합니다. 스크립트 실행 후, 아래처럼 uptime.log에 부하 평균치를 기록합니다.
22:33:46 up 6 days, 23:51, 2 users, load average: 1.15, 1.48, 1.57
22:33:56 up 6 days, 23:51, 2 users, load average: 1.28, 1.50, 1.57
22:34:06 up 6 days, 23:51, 2 users, load average: 1.47, 1.53, 1.58
22:34:16 up 6 days, 23:52, 2 users, load average: 1.48, 1.53, 1.58
22:34:26 up 6 days, 23:52, 2 users, load average: 1.41, 1.51, 1.57
22:34:36 up 6 days, 23:52, 2 users, load average: 1.94, 1.63, 1.61
uptime 명령어로 출력한 부하 평균치(load average)는 왼쪽에서부터 과거 1분간, 5분간, 15분간 평균치입니다. 부하 평균치는 서버에서 대기 상태인 작업 수를 나타내는 숫자입니다. 이 값이 크면 대기 상태인 작업이 많은 즉, CPU나 디스크 등 리소스가 부족해서 서버 부하가 높은 상태라고 판단할 수 있습니다. 따라서 서버 부하 측정을 위해 예제와 같은 스크립트로 자료를 수집하는 경우가 많습니다.
스크립트 실행 중에 상태 기록이나 저장하려고 작업 파일을 이용하는 프로그램이 많습니다. 그때 주의해야 하는 것은 이전에 실행되었을 때 만든 파일이 남아 있거나, 이상 종료로작업 파일 흔적이 남은 것입니다.
그런 문제를 피하기 위해 스크립트에서는 우선 빈 작업 파일을 작성해서 환경을 초기화하는 방법을 사용합니다. 파일을 비우는 데는 이 예제처럼 아무것도 출력하지 않는 :(널 명령어)을 리다이렉트하는 방법이 간단해서 많이 사용합니다.
①은 :(널 명령어)을 이용해서 빈 파일을 작성하는 부분입니다. 여기서는 : 출력 결과를 리다이렉트합니다. :은 아무것도 출력하지 않으므로 파일이 없으면 빈 파일이 작성되고 기존 파일이면 내용을 지우고 빈 파일로 만듭니다. 따라서 로그 파일(uptime.log)이 존재하는지 신경 쓰지 않아도 됩니다.
②로 uptime 명령어를 반복하기 위해 for문을 사용합니다. 여기에서는 6번 반복하므로 "1 2 3 4 5 6" 목록을 지정합니다. 단순한 반복문 카운터이므로 6개의 인수가 있으면 되므로 값 자체는 별 의미가 없습니다. 따라서 "a b c d e f"라도 되지만 관습적으로 반복문은 숫자를 사용합니다.
③은 로그 파일에 uptime 명령어 출력 결과를 기록합니다. 여기에서는 반복마다 내용을 덮어쓰지 않도록 추가 리다이렉트 >>를 사용합니다. 이후 sleep 명령어로 10초간 기다렸다가 다시 uptime 명령어를 실행하기를 6번 반복합니다.
새로운 파일을 만들거라면 touch 명령어를 사용하면 될 것 같지만 toouch 명령어는 기존 파일이 있을 때 갱신일을 변경할 뿐이므로 빈 파일을 작성할 수 없어서 초기화에는 사용하지 않습니다.
6. 빈 파일을 만드는 다른 방법 |
:(널 명령어)을 사용하는 방법 외에도 빈 파일을 작성하는 방법이 몇 가지 더 있습니다. /dev/null을 복사하는 방법이 일반적입니다.
cp /dev/null $uptimelog
또는 /dev/null을 cat해서 출력 리다이렉트 방법도 좋습니다.
cat /dev/null > $uptimelog
/dev/null은 유닉스에서 사용하는 특별한 파일로 내용은 EOF(End Of File)입니다. 따라서 파일로 출력하면 빈 파일이 됩니다.
또는 true 명령어를 써도 같은 결과가 됩니다.
# uptime.log를 빈 파일로 초기화
true > uptime.log
true 명령어는 :(널 명령어)와 마찬가지로 아무것도 출력하지 않고 종료 스테이터스 0를 돌려줍니다. true 명령어는 외부 명령어이므로 이 예제 같은 경우는 내부 명령어인 :(널 명령어)를 사용한 것입니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 파일처리 - 029 여러 HTML 파일에서 title 태그만 추출해서 각각 다른 파일로 출력하기 (0) | 2021.03.18 |
---|---|
[Linux 셸 스크립트] 파일처리 - 028 신규 파일을 만들지 않고 이미 있는 파일만 파일 갱신일을 바꾸기 (0) | 2021.03.17 |
[Linux 셸 스크립트] 파일처리 - 026 디렉터리에 있는 파일과 디렉터리 수 조사하기 (0) | 2021.03.17 |
[Linux 셸 스크립트] 파일처리 - 025 디렉터리 이동한 다음 간단히 원래 장소로 돌아가기 (0) | 2021.03.16 |
[Linux 셸 스크립트] 파일처리 - 024 명령어 사용법을 표시할 때 현재 파일명 표시하기 (0) | 2021.03.16 |
댓글