[Linux 셸 스크립트] 파일처리 - 027 파일 내용을 삭제해서 빈 파일로 만들기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 파일처리 - 027 파일 내용을 삭제해서 빈 파일로 만들기

by 찬찬이 아빠 2021. 3. 17.
반응형
  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 명령어는 외부 명령어이므로 이 예제 같은 경우는 내부 명령어인 :(널 명령어)를 사용한 것입니다.

 

 

 

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

반응형

댓글