달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2015. 4. 29. 11:37

[beginning] Linux & vi editor 용-ILE/SH/BASH/CSH2015. 4. 29. 11:37

http://suite.tistory.com 2015.05 fs

2010년에 작성했던 세미나용 문서 다시 보기



012345678910111213141516171819202122








linux_vi_201011.ppt


:
Posted by mastar

http://suite.tistory.com 2012.09 fs

 

요즘 쉘만 하는군  나중에 또 쓸것같아 기록~

/bin/sh  bourne

if [ $# != 2 ];then
    echo "[Usage] $0 <source_dir.list> <logName>"
    echo "file format : src_dir,new_ownerid"
    exit;
fi

srcFile=$1


 

배열 담기 ( )

 

fileList=(`awk -F "," '{print $1}' $srcFile`)


 

for 문 c 처럼?

SIZE=${#fileList[@]} # 배열 전체수

for (( i = 0; i < $SIZE; i++ ))
do

    src=${fileList[$i]}

    MOD_RESULT=$(($i % 10)) # expr 안쓰고 ( ) 이용 나머지 값 구하기

    if [ $(($i % 10))  -eq 0 ]  ; then

        echo "어쩌구 "
     fi

    binary_cmd >> logFile 2>> logFile #  binary_cmd 실행결과에서 stdout ,stderr 을 logFile 이어쓰기

 done

 

 

 

:
Posted by mastar

http://http://suite.tistory.com 2012.09 fs 


스크립트하나로  실행파일이나 디렉토리 전체를 배포하고 싶을때 

자바리눅스 버전 설치시 jdk.bin 처럼 하나만 실행하면 설치가됨~ 

윈로우로 치면 인스톨쉴드 or NSIS?? 


검색좀 해보니 makeself 라는것이 있음 http://www.megastep.org/makeself/   

라인세스는 GNU 오픈소스 ~


1. 설치 http://www.megastep.org/makeself/makeself.run  


makeself.run


wget 등으로  makeself.run 파일을 다운로드 받은후  

$>./makeself.run --target makeself

Creating directory makeself

makeself 디렉토리에  설치파일을 만드는 스크립트 makeself.sh 가 있음


2. 배포 설치용 만들기 

$>makeself.sh --help 해보면 

Usage: ./makeself.sh [params] archive_dir file_name label [startup_script] [args]

 <옵션>  <묶을디렉토리> <설치파일명> <설치파일 수행시노출되는 문장> <설치파일 수행후 실행할 명령어등> 이렇게됨


실제 사용 예로  스크립트를 하나 만들면 


~~~~~~~~~~~~~~~~~~~~~~~~ make_install.sh ~~~~~~~~~~~~~~~~~~~~~~~~

#!/bin/sh

INSTALL_FILE="install.sh"

SOURCE_DIR="/home/admin"

STARTUP_CMD="rm -rf $SOURCE_DIR;mkdir -p $SOURCE_DIR;mv * $SOURCE_DIR/"

rm -f $INSTALL_FILE

makeself/makeself.sh --notemp $SOURCE_DIR $INSTALL_FILE "admin tool home:[$SOURCE_DIR]" $STARTUP_CMD


~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


--notemp 는 실행스크립트(install.sh) 수행후 임시디렉토리에 만들지말고 수행하는 디렉토리에 설치 

--notemp를 안하면  실행스크립트(install.sh) 수행시 --keep 옵션을 주어도됨 


끝!~




 

:
Posted by mastar

 

http://suite.tistory.com 2012.09 fs

 

특정 쉘스크립트로 명령어 실행후 yes / no 등 선택 입력이 필요할때

( i.g. rm 할때 강제 지울거냐고 물어볼때 -f 옵션주면되는데 없는 명령어를 사용할때 )

 

가 . <<  이용   뒤에 "END"는 아무 문자열이나 됨.(i.g AAA ,BBB ,CCC , OK)

 

$> execute_file -i file  <<END
yes
END

 

또는

 

$> echo "yes" | execute_file


 

나. ftp 접속 스크립트 만들때 사용하면

ftp -n 10.96.181.14 12121 <<EOF
quote user ftpuser
quote pass passftp
ls
<<EOF

 

 

끝~

 

 

:
Posted by mastar
2012. 3. 30. 18:06

[ QMAIL ] qmail 로그 통계 bash로 ~ 용-ILE/SH/BASH/CSH2012. 3. 30. 18:06

 http://suite.tistory.com 2012.04

qmail 의 로그 통계를 보여주는 주는게 검색을 해보면  

* qmailmrtg   http://www.inter7.com/index.php?page=qmailmrtg7 

 

 

MRTG(http://oss.oetiker.ch/mrtg/) 를 이용하는걸로 생짜 html 으로

5분주기 하루 일주일 이런씩으로 흐름정도는 볼수있는데

상세한 수치를 보기는 어려움 1분단위로 할려면

http://www.loplop.net/projects/1minMRTG/ 있는데 잘안되서 안해봄


MRTG  만드신분이 1분단위로 더 자세하게 그래프를 보고싶다면

RRDTOOL 를 사용하라고 하는데 http://oss.oetiker.ch/rrdtool/

설치또 해야하고 무엇보다도 아파치에 PHP 모듈 연동도 들어가야해서 안해봄~

암튼 그래프로 흐름 보기로는 좋다!

 

- qmailanalog http://cr.yp.to/qmailanalog.html 

qmail 을 만드신 DJB(http://cr.yp.to/djb.html) 아저씨가 만든거 같은데 

구글링 해보니 matchup , multilog  관련해서 이슈도있고 

뭔가 해주는것같구 번거로운것같아 사용안함

 

~~~~  bash 스크립트로 수신량 보기 ~~~~~~


※ 통계 분석에서 제일 좋은건

smtp current 로그파일을 파싱해서 DB에 넣고 지지고 볶고 하는게 제일 좋겠지만 

걍 스크립트로 콘솔 인터페이스로  작성해봄


※ current time 데이터 변환


tstamp2ymdt.awk

qmail로그를  multilog로 찍고 있다면 ($ps -ef |grep multilog)

시간 포멧이 "@400000004f750c03278b96ac"   이런 스타일이고

이걸 사람이 알아볼수 있게 tai64nlocal (http://cr.yp.to/daemontools/tai64nlocal.html)

실행 파일을 이용하면  ISO format: YYYY-MM-DD HH:MM:SS.SSSSSSSSS 으로 변경해줌

ex) $) cat /var/log/qmail/smtpd/current | tai64nlocal

- awk로 시간 계산 가능하도록  YYYY-MM-DD HH:MM -> YYYYMMDDHHMM  으로 변경

~~~~~~~~~~~ tstamp2ymdt.awk ~~~~~~~~~~~~~~~~    

BEGIN { }

{

    start_day=$1;
    start_time=$2;
    gsub("-", "", start_day);
    gsub(":", "", start_time);
    start_dt=start_day""start_time;
    start_dt=substr(start_dt, 0, 12);

    print start_dt"|"$0;

}
END {}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

실행 스크립트  파일   stat.sh   

stat.sh

~~~~~~~~~~~~~~~~ stat.sh  ~~~~~~~~~~~~~~~~~~~~~~~~~

....

 "11")
            IFS=$'\n'
            log_file="/var/log/qmail/smtpd/current"
            ago_minute=5
            sleep_second=`expr $ago_minute \* 60`

            while [ 1 -eq 1 ];do

                    minutes_ago_datetime=`date -d "-$ago_minute minutes"  +%Y%m%d%H%M`
                    current_datetime=`date +%Y%m%d%H%M`
                    echo "minutes_ago_datetime:$minutes_ago_datetime"
                    echo "current_datetime:$current_datetime"

                    data_str=`cat $log_file  | tai64nlocal | awk -f tstamp2ymdt.awk`
                    tmp_real_file="tmpstat_realtime.file"
                    echo "" > $tmp_real_file
                    for line in $data_str
                    do
                        #datetime=`expr substr  $line 1 12`
                        datetime=${line:0:12}
                        if [ $datetime -ge $minutes_ago_datetime ] && [ $datetime -le $current_datetime ]; then
                            echo $line >> $tmp_real_file
                        fi
                    done

                    echo "start_dt:$minutes_ago_datetime,end_dt:$current_datetime"
                    check_cnt=`grep -c " ok " $tmp_real_file`
                    echo "[REALTIME-SMTP] allow average $ago_minute minutes :$check_cnt";
                    per_cnt=0
                    if [ $check_cnt -gt 0 ] ; then
                        per_cnt=`echo "scale=3; $check_cnt / $sleep_second"|bc`
                    fi
                    echo "[REALTIME-SMTP] allow per seconds: $per_cnt"
                    echo "[uptime]"`uptime`
                    sleep $ago_minute
                    echo ""
            done

....

5분 단위로 수신량 / 초당 수신량 보기 결과  : UX는 안좋다 달력도 없고 ~.~

 


 

  * 유의할 점은  multilog로 current 로그 최대 사이즈는 16메가 정도이기 때문에 고려 필요

 

P.S Note shell script

 

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

sudo find mqueue/ | xargs sudo rm

5초마다 내 컴퓨터의 특정 포트에 연결된 목록의 갯수 보기
watch -n 5 -d 'netstat -an | grep "포트번호" | grep "ESTA" | wc -l'

# tcpdump -i eth0 tcp port 80 -w tcpdump.log -s 1500
# tcpdump -Xqnr tcpdump.log

/var/qmail/bin/watch -d -n1 ./qmail-qstat

QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=5 /var/qmail/bin/qmail-inject test@spam.test < spy.sample

nslookup 175.254.193.211.sbl-xbl.spamhaus.org

TCPREMOTEIP=211.193.254.175 rblsmtpd -r sbl-xbl.spamhaus.org /var/qmail/bin/qmail-smtpd

cat /var/log/qmail/smtpd/current|tai64nlocal

 

find . -ctime -1 | xargs rm -f #  rm -f 파일수 많아서 못지울때나~

 

./qmail-remove -p spamtest  # 큐에서 spamtest 들어간 파일 리스트만 출력

 ./qmail-remove -p spamtest -r # 큐에서 spamtest 들어간 파일을 /var/qmail/queue/yanked 디렉토리로 이동

./qmail-remove -p spamtest -d # 큐에서 spamtest 들어간 파일을 백업하지 않고 영구 삭제

 

 

 

 

 

 


 

:
Posted by mastar

http://suite.tistory.com/ fs 2008 4

보통 한글이 깨지면 아래의 경우를 생각해본다


1. 자신의 리눅스/유닉스 에서 사용하는 언어셋 값과 자신의 클라이언트가 맞는지 확인

      ex) echo $LANG 확인 후

            locale -a 에 해당하는지 확인

2. 자신의 클라이언트의 속성을 확인 해본다

     ex) putty 경우

        - 모양 한글 선택

사용자 삽입 이미지



- 언어세 변경  창 -> 변환 

  LANG과 호환?하는 값선택

사용자 삽입 이미지


3. 윈도우 레지스트 키 값변경

  regedit -> HKEY_CURRENT_USER -> Software -> SimonTatham -> PuTTY -> Sessions ->

 설정을 원하는 세션선택
 
1. 한글사용
FontCharSet 16 진수 0
-> 16 진수 81 로 변경



4. 마지막으로 이건  유닉스 계열 경우 stty 설정에 따른


환경파일 .bash_profile 에 추가


"stty cs8 -istrip echo echoe "


hp11.11 + euc-kr에서 확인 해본거

:
Posted by mastar

http://suite.tistory.com/ fs 2008 04


한국 기준  


          솔라리스 :

AGO=`TZ=KST+15; date +%Y%m%d`

echo $AGO




리눅스  :

 AGO=`date --date ' 1 days ago' '+%Y%m%d'`

echo $AGO

:
Posted by mastar

http://suite.tistory.com/2008 02 fs


awk , uptime  이용

데비안 리눅스 sh 에서 테스트 한것임 sleep 이 잘안되면 그냥 cron 으로 1분씩 돌려도 될것같구

로그가 계속 쌓이니 디스크 사이즈도 혹시 모를 사항에 대한  고려를...


==== 소스 =====


#!/bin/sh
FILE_PS_LOG=`pwd`/ps.log
FILE_W_LOG=`pwd`/w.log

date > $FILE_PS_LOG
date > $FILE_W_LOG

while [ true ]
do
        CUR_LOAD=`uptime | awk '{print $11}' | awk -F. '{print $1}'`
        if [ "$CUR_LOAD" -gt 9 ]; then
                date >> $FILE_PS_LOG
                echo " OVER LOAD AVERAGE 10 " >>$FILE_PS_LOG
                ps -efl >> $FILE_PS_LOG
                date >> $FILE_PS_LOG

                echo " OVER LOAD AVERAGE 10 " >>$FILE_PS_LOG
                date >> $FILE_W_LOG
                w >> $FILE_W_LOG
                date >> $FILE_W_LOG
        fi
        sleep 60
done


사용자 삽입 이미지


추가 댓글 :
 
date >> $FILE_TOP_LOG
echo " OVER LOAD AVERAGE 10 " >>$FILE_TOP_LOG
top -b -n 01 >> $FILE_TOP_LOG
date >> $FILE_TOP_LOG

:
Posted by mastar

fs


#!/bin/csh -f

#set echo verbose

alias PRINT echo

PRINT ">> shared memory clear all"
set documents=`ipcs | grep fs | awk '{print $2}'`

foreach i ($documents)
echo $i
ipcrm -m $i
end

:
Posted by mastar

http://suite.tistory.com/ fs

리눅스에서

#!/bin/csh -f

alias PRINT echo

set who=$1
PRINT ">> apache demon clear all"
set documents=`ps -ef |grep apache|awk '{if ($1=="search") print $2}'`

foreach i ($documents)

echo $i
#kill -9 $i

end

:
Posted by mastar