[etc] 리눅스 - 이게 스크립트가 무슨 뜻일까요?

   조회 699   추천 0    

 리눅스 스크립트입니다.

혹시 초보자도 쉽게 이해할 수 있게 

한 구문 구문 상세히 설명해주실분 계실까요?.. 

#제가 알고 있는 히스토리는 이렇습니다. collector 디렉토리에 실시간으로 로그가 쌓여 다른 곳으로 파싱되는데 이 파싱 기능이 제대로 작동하지 않아 실시간 로그들이 빠르게 처리되지 않고 계속 누적되어 쌓여 디렉토리가 거의 꽉차버렸습니다.

그래서 일단은 collector_bak_20210720 이라는 디렉토리로 어느정도 옮겨놓은 상태이고, 제 상사분께서 아래와 같은 스크립트를 만들어 실행시켰습니다. (해석 좀 부탁드립니다..)



# cat test.sh

#! /bin/bash


filename="collector_bak_20210720" // 실시간 로그 수집 디렉토리인 collector에 데이터가 가득차 이 디렉토리로 좀 옮김.

count=0

limit=100

for temp in `ls $filename`

do

         if [ $count -ge $limit ]

         then

                    count=0

                    sleep 7

          fi


          #echo "mv $temp collector/"   // 실시간 로그 수집 = collector 폴더

          mv ${filename}/${temp} collector/

          let 'count+=1'

done

vergence 07-20
collector_back_20210720에 있는 파일들의 이름을 temp에 하나씩 넣고 처리합니다 (for temp... do ...  done)
do ~ done 사이가 반복되는 건데,
내용은, temp에 파일이름 1개가 들어있고, 이 파일을 collector 디렉토리로 옮기는 것이네요 (mv ...)
한꺼번에 여러 개를 옮기는 게 아니고, 한 개씩 옮깁니다.
파일을 101개 옮길 때마다 7초를 쉽니다. -_-;;;;

설마 눈으로 보고 있다가 멈추려고... 한 걸까요?
     
올닉스 07-20
옮기고나서 7초간 다른 뭔가 처리되길 기다릴수도 있겠습니다 ^_^
          
vergence 07-21
그럴 수도 있겠네요. 로그 인덱스 만들게 기다린다거나...
화란 07-20
count가 limit 보다 크거나 같으면 count를 0으로 초기화함.

그리고는 collector_bak_20210720/* 파일을 collector로 옮김. <--- 이것 하기전에 collector 디렉토리는 미리 만들어야함.

그리고는 count를 1 증가시킴.


스크립트가 뭔가 좀 미완성작 같기도 합니다^^
epowergate 07-21
1. $filename하고 collector가 바뀐거 같습니다.
    MV를 꺼꾸로 하고 있네요 "mv ${filename}/${temp} collector/"
2. logrotage를 사용하면 될텐데 왜 굳이 이런걸
3. 대출 1번만 돌개하고 cron에 넣으면 될텐데요
# cat test.sh

#! /bin/bash
: 쉘 스크립트로 배시 쉘을 사용함


filename="collector_bak_20210720" // 실시간 로그 수집 디렉토리인 collector에 데이터가 가득차 이 디렉토리로 좀 옮김.
: 디렉토리를 썼기 때문에 filename은 디렉토리를 의미

count=0
: 변수정의(카운트) 및 초기값 0

limit=100
: 변수정의(카운트의 최대 제한값) 및 초기값 100

for temp in `ls $filename`
: `는 명령을 실행한다는 의미. 즉 'ls 디렉토리' 실행을 통해 출력되는 파일들 목록을 하나하나 temp 로 받아와 루프를 돌림

do
: for문 시작점

        if [ $count -ge $limit ]
        : 조건절. count변수가 limit 변수보다 크거나 같을때 동작함. 즉 count(0부터 하나씩 증가) >= limit(최대 100) 일때를 확인.
          처음에는 0부터 시작하므로 99까지 돌고 100이 되면 아래 then 문으로 들어감

        then
        : if절의 시작점
                    count=0
                    : count변수를 0으로 초기화

                    sleep 7
                    : 쉘 스크립트 수행을 7초간 멈춤.

          fi
          : if절의 끝



          #echo "mv $temp collector/"  // 실시간 로그 수집 = collector 폴더
          : 샵은 주석처리한것. 실행안됨

          mv ${filename}/${temp} collector/
          : mv는 파일이동. mv 디렉토리/파일명 collector/ 이므로 의미는 디렉토리(collector_bak_20210720) 안의 파일을 하나하나 루프돌려 collector/ 폴더 밑으로 옮겨넣음

          let 'count+=1'
          : 카운터 변수 1씩 증가.

done
: for문 끝나는점

동작을 한문장으로 요약하면, collector_bak_20210720 디렉토리내 파일을 7초에 100개씩 끊어 collector 디렉토리로 옮김..




제목Page 1/107
2014-05   3247334   정은준1
2014-04   2928460   회원K
2018-08   27791   limitless
07-31   537   지존
07-28   349   민섭79
07-23   557   쪼커
07-22   668   김민수2
07-20   700   가상화린이
07-18   632   tksgk4na
07-15   664   INMD
07-13   640   나라사랑
07-08   697   나라사랑
07-05   642   sfff
07-05   660   v천소유v
07-05   594   나라사랑
07-04   596   나라사랑
06-27   737   나라사랑
06-26   639   옥동잣
06-24   746   야후
06-22   883   범이님
06-17   1037   1525252
06-15   723   이대호
06-09   850   우루루루루루