AI ์ด์ „์‹œ๋Œ€ (↓์„๊ธฐ์‹œ๋Œ€ IT)/11. Unix

UNIX SHELL PROGRAMING 1

๐Ÿ“ฆ DonzBox 2013. 5. 21. 14:01

์ถœ ์ฒ˜ : http://delfa.blog.me

 

shell, kill, while, for, if

#
# ์ž…๋ ฅ string์„ ํฌํ•จํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ฃฝ์ด๊ธฐ

for pno in `ps | grep $1 | grep -v "grep"`
do
        echo $pno
        kill -9 $pno
done

 

#
# ์ž…๋ ฅํ•œ ์‹œ๊ฐ„๊นŒ์ง€ 10๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ช…๋ น์–ด ์ˆ˜ํ–‰ํ•˜๊ธฐ

if [ "$1" = "" ]; then end="2300"; else end=$1; fi
while :
do
        tim=`date +"%H%M"`
        echo `date +"%Y-%m-%d %H:%M:%S"`
        if [ "$tim" -ge "$end" ]; then
                (
                        cd {directory}
                        {command1}
                        {command2}
                )
                exit
        fi
        sleep 600
done 

 

shell, kill, while, for, if

#
# ์ž…๋ ฅ๋œ ๋ชจ๋“  ํŒŒ์ผ์ด ์ƒ๊ธธ๋•Œ๊นŒ์ง€ sleep

#
# 8์ดˆ ์ฃผ๊ธฐ๋กœ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฉฐ
# ์™„๋ฃŒ๋œ ๋ชฉ๋ก์€ ๋ฐ˜์ „์œผ๋กœ ๋ณด์ž„
#
# ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ‘๋ ฌ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ• ๋•Œ ์œ ์šฉ

# for fnm in a b c d e f g
# do
#   (
#   {command} > result.$fnm.log
#   touch $fnm
#   ) &
# done
# sleepuntil a b c d e f g
# rm -f a b c d e f g

lst=$*

fnd=""
while [ "$fnd" = "" ]
do
    fnd="1"
    #
    echo " state : \c"
    for arg in $lst
    do
        if [ -f "$arg" ]; then
            echo "\033[7m$arg\033[0m \c"
        else
            echo "$arg \c"
            fnd=""
        fi
    done
    echo "\033[K\033[160D\c"
    if [ "$fnd" = "" ]; then sleep 8; fi
done
echo "\033[K\c"

 

sqlplus

#
############################################################
# sqlplus์„ ํ†ตํ•ด ์ถœ๋ ฅ๋œ ๊ฐ’์„ awk ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ๋ ˆ์ฝ”๋“œ๋งŒ ์ถœ๋ ฅ
# . ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์  query๊ฐ€ ๊ฐ€๋Šฅ
# . ๋ณธ ์˜ˆ๋Š” record ๊ฐ€ 2์ค„์— ๊ฑธ์ณ ์ถœ๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ์ž„.
(
    echo "alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';"
    echo "set feedback off"
    echo "set head off"
    echo "set linesize 1000"
    echo "select a,b,c,d from ... ;"
) | sqlplus <id>/<password> | grep -v "^$" | nawk '
    BEGIN { mod=0; }
    mod==0&&/^SQL>/ { mod=1; next; }
    mod==1&&/^SQL>/ { mod=2; next; }
    mod==1 {
     if($2=="") printf "%s ",$1; else printf "%s %s %s\n",$1,$2,$3;
     next;
    }
'

 

 

ftp

#
############################################################
# ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ file์„ ftp๋ฅผ ํ†ตํ•ด ๊ฐ€์ง€๊ณ  ์˜ค๋Š” script
# ์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜์˜ directory๋‚˜ file์„ ๊ฐ€์ ธ์˜ด
directory="simth"
filename="j.p.smith"
(
    echo "user <id> <password>"
    if [ "$opt" = "u" ]; then
        echo "cd /user/home/$directory"
        echo "mget <filename>.log"
    else
        echo "cd /tmp/log"
        echo "get $filename.log"
    fi
    echo "bye"
) | ftp -ni <ip_address> > /dev/null 2>&1

 

expr

#
############################################################
# record file์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ
for usr in `cat /etc/passwd | awk -F':' '{ print $1; }'`
do
 (
  cd ~$usr
  du -s .
 )
done > diskusage.log
#
# ๋˜๋Š” record๊ฐ€ ๋ณต์žกํ•  ๊ฒฝ์šฐ
#
lno=1
lns=`head -1 /etc/passwd`
while [ "$lns" != "" ]
do
    usr=`expr "$lns" : '\([^:]*\).*$'`
    uid=`expr "$lns" : '[^:]*:[^:]*:\([^:]*\).*$'`

    # action

    echo "$usr's uid = $uid"
    #
    lno=`expr $lno + 1`
    lns=`tail +$lno /etc/passwd | head -1`
done

 

od, awk

# od ๋ช…๋ น์–ด์˜ -c ์™€ -x ์˜ต์…˜์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ํšจ๊ณผ

# - HEX ๊ฐ’๊ณผ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•œ ascii ๊ธ€์ž๋ฅผ ๊ฐ™์€ ๋ผ์ธ์— ์ถœ๋ ฅ

# - shell์€ ๋‹ค๋ฅธ unix ๋ช…๋ น์–ด๋“ค์˜ ์ œ์–ด์™€ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด,

#    awk๋Š” record ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋ชฉ์ ์„ ๋‘๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค

 

fnm=$1
if [ "$fnm" = "" ]; then echo "$0 <file_name>"; exit; fi
if [ ! -f "$fnm" ]; then echo "\"$fnm\" not exists"; exit; fi

od -v -x $fnm | nawk '
    BEGIN { hex="0123456789abcdef"; }
    {
        printf "%s ",$0;
        for(idx=NF+1;idx<10;idx++) printf "     ";
        for(idx=2;idx<=NF;idx++){
            for(pos=1;pos<=3;pos+=2){
                val=((index(hex,substr($idx,pos+0,1))-1)*16)+(index(hex,substr($idx,pos+1,1))-1)
                if(val>=32&&val<=127){
                    printf "%c",val;
                }else{
                    printf ".";
                }
            }
        }
        printf "\n";
    }
'

# ์ถœ๋ ฅ ์˜ˆ

0000000 2321 2f75 7372 2f62 696e 2f73 680a 0a66 #!/usr/bin/sh..f
0000020 6e6d 3d24 310a 6966 205b 2022 2466 6e6d nm=$1.if [ "$fnm
0000040 2220 3d20 2222 205d 3b20 7468 656e 2065 " = "" ]; then e
0000060 6368 6f20 2224 3020 3c66 696c 655f 6e61 cho "$0 <file_na
0000100 6d65 3e22 3b20 6578 6974 3b20 6669 0a69 me>"; exit; fi.i
0000120 6620 5b20 2120 2d66 2022 2466 6e6d 2220 f [ ! -f "$fnm"
0000140 5d3b 2074 6865 6e20 6563 686f 2022 5c22 ]; then echo "\"
0000160 2466 6e6d 5c22 206e 6f74 2065 7869 7374 $fnm\" not exist

 

nawk, awk

# nawk ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค์–‘ํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

# nawk๋Š” awk์˜ ํ™•์žฅ๋œ ๋ฒ„์ ผ์œผ๋กœ function์ด ์ถ”๊ฐ€ ๋˜์—ˆ๊ณ  ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋Š” record ํฌ๊ธฐ๊ฐ€ ํฝ๋‹ˆ๋‹ค.

 

##############################

# ๊ธฐ๋ณธ ๊ตฌ์กฐ

# - BEGIN ๊ณผ END๋Š” ํŒŒ์ผ ์ฒ˜๋ฆฌ ์ „ํ›„์— ์ˆ˜ํ–‰

# - <pattern>์€ 'if' ์˜ ์กฐ๊ฑด๊ณผ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ํ•ด๋‹น ์กฐ๊ฑด์˜ line(record) ๋งŒ ์ฒ˜๋ฆฌ

# - ์กฐ๊ฑด์ด ์—†์„ ๊ฒฝ์šฐ ๋ชจ๋“  line  ์ˆ˜ํ–‰

# - ํ•˜๋‚˜์˜ ๋ผ์ธ์ด ์—ฌ๋Ÿฌ ์กฐ๊ฑด์ด ๋งž์„ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ๋ฒˆ ์ฒ˜๋ฆฌ ๋  ์ˆ˜ ์žˆ์Œ (next; ๋ช…๋ น์–ด๋ฅผ ์“ฐ๋ฉด ๋‹ค์Œ ๋ ˆ์ฝ”๋“œ ์ฒ˜๋ฆฌ ์ฐธ์กฐ)

nawk '

  function

  BEGIN { <statement;> }

  <pattern> { <statement;> }

  <pattern> { <statement;> }

  END { <statement;> }

'

 

##############################

# shell ๊ณผ ์—ฐ๋™

# - wc ๋‚˜ ps ๋“ฑ ์ผ๋ถ€ ๋ช…๋ น์–ด์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅ์‹œ white space๊ฐ€ ์•ž๋’ค๋กœ ๋ถ™๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

#    ๋‹จ์ง€ ๊ฐ’๋งŒ ์›ํ•  ๊ฒฝ์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ. shell ๋ณ€์ˆ˜์— white space ๊ฐ€ ํฌํ•จ๋˜๋ฉด ์ฒ˜๋ฆฌํ•˜๊ธฐ ๊ท€์ฐฎ์Œ

lineno=`wc -l | nawk '{ print $1 }'`

 

##############################

# shell์˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ

# - shell์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋”์šฑ ๊ฐ•๋ ฅํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅ

# - [']๋ฅผ ["]๋กœ, ["] ๋Š” [\"]๋กœ, [$]๋ฅผ [\$]๋กœ ๋ฐ”๊พธ๊ณ  shell ๋ณ€์ˆ˜๋Š” [$var] ํ˜•์‹์œผ๋กœ ํ‘œํ˜„

#    $var๋ฅผ ๋‹จ์ˆœ ๋Œ€์น˜ํ•˜๋Š” ํ˜•์‹์œผ๋กœ string type์œผ๋กœ ์“ธ๊ฒฝ์šฐ \"$var\"๋กœ ์ž˜ ์”Œ์šธ๊ฒƒ~

for fnm in `ls a*`

do

    nawk " /$fnm/ { print \"$fnm\",substr(\$6,2,3); } " $fnm

done

 

##############################

# field ๊ตฌ๋ถ„

# - nawk,awk์˜ ๊ธฐ๋ณธ field ๊ตฌ๋ถ„์€ while space (space,tab)์ด๋‚˜ ๋‹ค๋ฅธ ๊ตฌ๋ถ„์ž๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ

# - ์˜ˆ : /etc/passwd file์—์„œ ":"๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ํ• ๊ฒฝ์šฐ

nawk -F":" ' { } '

 

##############################

# state machine ๋ฐฉ์‹์˜ ์ฒ˜๋ฆฌ

# - ์ •ํ˜•ํ™” ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์ด๋‚˜ pattern์ด ์žˆ์„๋•Œ ์œ ์šฉ (๋กœ๊ทธ ๋ฐ result ํŒŒ์ผ)

# - ์•„๋ž˜๋Š” "SQL>"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ผ์ธ์ด ์žˆ์„๋•Œ๊นŒ์ง€ ๋ผ์ธ์„ ๋ฌด์‹œํ•˜๋‹ค๊ฐ€

       ๋‹ค์Œ ๋ผ์ธ ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ. ๋‹ค์‹œ "SQL>"์ด ๋‚˜์˜ค๋ฉด ์ž…๋ ฅ ๋ผ์ธ ๋ฌด์‹œ

# - ๊ธ€ "UNIX Shell ํ”„๋กœ๊ทธ๋ž˜๋ฐ (sqlplus,ftp,expr)" ์ฐธ์กฐ

nawk '

  BEGIN { mod=0; }
  mod==0&&/^SQL>/ { mod=1; next; }    # next์— ์˜ํ•ด ์•„๋ž˜ ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ ๋ผ์ธ์„ ์ˆ˜ํ–‰
  mod==1&&/^SQL>/ { mod=2; next; }
  mod==1 {    # mod๊ฐ€ 1์ผ ๊ฒฝ์šฐ์—๋งŒ ์ˆ˜ํ–‰
   if($2=="") printf "%s",$1; else  printf " %d %s %5.2f\n",int($1*1000),$2,$3;
   next;
  }
'

 

statement

##############################

# statement ๋ชจ์Œ

# - ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ ์ด์™ธ์—๋„ pipe ์ž…๋ ฅ ๊ฐ€๋Šฅ

# - c ์–ธ์–ด์™€ ๋น„์Šท

head -200  <ํŒŒ์ผ๋ช…> | nawk '

 

    # ์‚ฌ์šฉ์ž function ์ •์˜ ํ•˜๊ธฐ

  function myfunction() {    #nawk๋งŒ ์ง€์›

     <statement;>        # ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€์ˆ˜๋Š” global๋กœ ์‚ฌ์šฉ๋จ

    return myvalue;             # return ์ด ์—†์„ ๊ฒฝ์šฐ ์ผ๋ฐ˜ procedure...

  }


  {

    # ์‚ฌ์šฉ์ž function call ํ•˜๊ธฐ

    val=myfunction();

 

    # "." ์ด๋‚˜ " "๊ฐ€ ์—ฐ์†์œผ๋กœ ์žˆ์„ ๊ฒฝ์šฐ newline์œผ๋กœ ์ถœ๋ ฅ

    gsub("[\.][\.]+","\n",str);    # nawk๋งŒ ์ง€์›
    gsub("[ ][ ]+","\n",str);
    printf "%s",str;

 

    # record์˜ ๋งˆ์ง€๋ง‰ 10๊ฐœ field๋ฅผ array์— ์ž…๋ ฅ 
    for(idx=NF-9;idx<=NF;idx++) myarray[idx-(NF-9)]=$(idx);

 

    # "A"์—์„œ "D" ์ž์‚ฌ์ด์˜ string  ($0 = ์ „์ฒด ๋ผ์ธ)

    print substr($0,index($0,"A"),index(substr($0,index($0,"A")),"D")-index($0,"A"));

  }

 

  # pattern ์˜ ์˜ˆ ๋ณ€์ˆ˜ mod๊ฐ€ 1์ด๊ณ  ์ฒซ field๊ฐ€ "pattern" ์ผ๊ฒฝ์šฐ

   mod==1&&$1=="pattern" {  <statement;> }


  # "pattern"์„ ํฌํ•จ ํ•  ๊ฒฝ์šฐ

   /pattern/ {  <statement;> }


  # ๋ผ์ธ์ด "patt"์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ "tern"์œผ๋กœ ๋๋‚  ๊ฒฝ์šฐ
   /^patt/||/tern$/ {  <statement;> }

 

 

background, grouping

ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ background๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋ช…๋ น์–ด์˜ ๋’ค์—

'&' ๊ธฐํ˜ธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ, telnet ์ ‘์†์„ ๋Š์œผ๋ฉด background๋กœ

์‹คํ–‰๋˜๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ™์ด ์ฃฝ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

์ด๋Ÿฐํ•œ ๊ฒฝ์šฐ์—๋Š” shell ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์›ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ background๋กœ

์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๊ณ  ํ•ด๋‹น shell ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ background๋กœ ์‹คํ–‰ํ•˜๋ฉด

๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

์•„๋ž˜๋Š” background ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์˜ˆ๋ฅผ ๊ธฐ์ˆ  ํ•ด  ๋ณด์•˜๋‹ค.

 

์˜ˆ)

. ๋‹ค์Œ๊ณผ ๊ฐ™์€ mybackground.sh ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์„ ๊ฒฝ์šฐ

#!/usr/bin/sh

cd $i

for myfile in *

do

~/bin/myprocess.sh $myfile

done

# ~ = ๋กœ๊ทธ์ธ ํ™ˆ ํด๋”๋ฅผ ์˜๋ฏธํ•จ

 

. ๋‹จ์ˆœํ•˜๊ฒŒ background๋กœ ์ˆ˜ํ–‰

#!/usr/bin/sh

 

~/bin/mybackground.sh /home/myfolder1 &

 

. ๋ณ„๋„์˜ mybackground.sh ํ”„๋กœ๊ทธ๋žจ์„ ์“ฐ์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ

#!/usr/bin/sh

(

cd /home/myfolder1

for myfile in *

do

~/bin/myprocess.sh $myfile

done

) &

# ๊ด„ํ˜ธ๋ฅผ ๋น ์ ธ๋‚˜์˜ค๋ฉด ํ˜„์žฌ ํด๋”๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ด.

# ์—ฌ๋Ÿฌ ํด๋”๋ฅผ ์ด๋™ํ•˜๋ฉด์„œ ์ž‘์—…ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ ์œ ์šฉ

 

. ์–ด๋ ค ํด๋”๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ 

#!/usr/bin/sh

~/bin/mybackground.sh /home/myfolder1 &

~/bin/mybackground.sh /home/myfolder2 &

~/bin/mybackground.sh /home/myfolder3 &

 

# myprocess.sh๊ฐ€ ๋ฌด๊ฑฐ์šธ ๊ฒฝ์šฐ ์„œ๋ฒ„์— ๋งŽ์€ ๋ถ€ํ•˜๋ฅผ ์คŒ

# ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ

 

. ์—ฌ๋Ÿฌ ํด๋”๋ฅผ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ

#!/usr/bin/sh

(

~/bin/mybackground.sh /home/myfolder1

~/bin/mybackground.sh /home/myfolder2

~/bin/mybackground.sh /home/myfolder3

) &

 

 

 

for,sed,awk,grep๋ฅผ ์ด์šฉํ•˜์—ฌ property ํŒŒ์ผ์˜ ๊ฐ’์„ ์ผ๊ด„ ์ˆ˜์ •ํ•˜๋Š” ์˜ˆ์ œ

java ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ site์— ์„ค์น˜ ํ•ด์•ผ ํ•  ์ผ์ด ์žˆ์–ด ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

 

์•„๋ž˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ๋Š” shell์„ ์ด์šฉํ•˜์—ฌ java์˜ properties, xml, ini ํŒŒ์ผ
๋“ฑ์„ ์ผ๊ด„์ ์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ผ๋‹จ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ path๋ฅผ ์ผ๊ด„์ ์œผ๋กœ
๋ณ€๊ฒฝํ•˜๋Š” ์˜ˆ๋ฅผ ๋“ค์—ˆ์ง€๋งŒ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ip, db ์ •๋ณด๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์•„๋ž˜ ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉ ํ• ๋•Œ tab("    ") ์ž์™€ esacpe code("^[") ์ฃผ์˜

-------------------------------------------------------------
#!/usr/bin/sh

############################################
# ํŒŒ์ผ ๋ช… : changeproperties.sh
############################################

dir=`dirname $0`
cmd=`basename $0`

opt=$1
ag1=$2
err=""

############################################
# default ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ object
############################################
ap_home="/usr/home/application"

############################################
# check parameter & environment
############################################
if [ "$opt" = "" ]; then err="1"; fi

if [ "$opt" = "ap_home" ]; then
    if [ "$ag1" = "" ]; then ag1="$ap_home"; fi
fi

if [ "$err" = "1" ]; then
    #   vt100 ํ™”๋ฉด control ์ฝ”๋“œ ์‚ฌ์šฉ. '^['์ž๋ฅผ vi์—์„œ ์ž…๋ ฅํ•˜๋ ค๋ฉด <ctrl>-'v'-'['๋ฅผ ์น˜๋ฉด ๋จ
    echo "^[[1m[ USAGE ]^[[0m"
    echo ""
    echo "  ^[[1m$cmd ap_home <path>^[[0m"
    echo "  . sets/changes ^[[4mAPPLICATION^[[0m home directory"
    echo ""
    exit 0
fi

 

############################################
# process command for ap_home
############################################
if [ "$err" = "" -a "$opt" = "ap_home" ]; then

 

    ############################################
    # ์ผ๋ฐ˜ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์˜ˆ
    ############################################
    for fnm in myfile1.ini mufile2.ini
    do
        # ๋ณ€๊ฒฝํ•  ๋Œ€์ƒ ํŒŒ์ผ๋ช…์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„
        echo "^[[4mmyfolder1/$fnm^[[0m"
       
        # '[DIRECTORY]' ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋“ค๋งŒ ๋ณ€๊ฒฝํ•˜๋„๋ก mod ๋ณ€์ˆ˜ ์‚ฌ์šฉ
        nawk "
            BEGIN               { mod=1; }
            /^\[DIRECTORY]/     { print \$0; mod=0; next; }
            mod==0&&/^gen_out/  { print \"gen_out = $ap_home/myfolder1/gen_out/logs/\"; next; }
            mod==0&&/^intp_in/  { print \"intp_in = $ap_home/myfolder1/intp_in/logs/\"; next; }
            mod==0&&/^sndbak/   { print \"sndbak = $ap_home/myfolder1/sndbak/\"; next; }
            mod==0&&/^MA/       { print \"MA = $ap_home/myfolder1/magreement/\"; next; }
            mod==0&&/^IA/       { print \"IA = $ap_home/myfolder1/iagreement/\"; next; }
            mod==0&&/^BOARD/    { print \"BOARD = $ap_home/myfolder1/work/dir_board/\"; next; }
            mod==0&&/^FTP_LOG/  { print \"FTP_LOG = $ap_home/myfolder/work/server_log/\"; next; }
            mod==0&&!/^\[/      { print \$0; next; }
            /^\[/               { print \$0; mod++; next; }
                                { print \$0; }
        " myfolder/$fnm > $fnm.tmp

 

        # ๋ณ€๊ฒฝ๋œ ๋‚ด์—ญ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„ (์•ž์˜ white space๋ฅผ tab 1๊ฐœ๋กœ ๋ณ€๊ฒฝ)
        grep $ap_home/myfolder $fnm.tmp | nawk ' { prn=$0; sub("^[   ]*","   ",prn); print prn; }; '
        mv $fnm.tmp myfolder/$fnm
    done


    ############################################
    # ์—ฌ๋Ÿฌ ์œ„์น˜์— ์žˆ๋Š” jar ํŒŒ์ผ ๋‚ด์˜ ํ™˜๊ฒฝ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ
    ############################################
    for jnm in myfolder1/myJar1 myfolder1/myJar2 myfolder2/WEB-INF/lib/myJar2
    do
        # ๋ณ€๊ฒฝ ๋Œ€์ƒ ํŒŒ์ผ ๋ช…์„ system.properties ํŒŒ์ผ์—์„œ ๋จผ์ € ์ฐพ์Œ
        jar -xf $jnm.jar system.properties
        fnm=""
        fnm=`sed -e "s/[    ^M]*//g" system.properties | nawk -F= ' /^SettingFileName=/ { print $2; } '`

 

        if [ "$fnm" != "" ]; then
            echo "^[[4m$jnm.jar/$fnm^[[0m"
            jar -xf $jnm.jar $fnm
            nawk "
                /^RevIC/    { print \"RevIC=$ap_home/myfolder/intp_in/\"; next; }
                /^SndIC/    { print \"SndIC=$ap_home/myfolder/gen_out/\"; next; }
                /^Sam/      { print \"Sam=$ap_home/myfolder/sam/\"; next; }
                /^Ic/       { print \"Ic=$ap_home/myfolder/ic/\"; next; }
                /^Batch/    { print \"Batch=$ap_home/myfolder/batch/\"; next; }
                            { print \$0; }
            " $fnm > $fnm.tmp


            grep $ap_home/myfolder $fnm.tmp | nawk ' { prn=$0; sub("^[  ]*","   ",prn); print prn; };
            mv $fnm.tmp $fnm
            jar -uf $jnm.jar $fnm
            rm -rf system.properties $fnm
        fi
    done

fi

------------------------------------------------------------

 

์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง

์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ shell ์Šคํฌ๋ฆฝํŠธ ์ž…๋‹ˆ๋‹ค.

ใ…‡ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์œจ - ์„œ๋ฒ„์˜ ์ข…ํ•ฉ์ ์ธ ์ƒํƒœ

ใ…‡ ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰ ๊ฐœ์ˆ˜  - ํ‰๊ท  ์ˆ˜์—์„œ ๋ณ€ํ™”๊ฐ€ ์ปค์ง€๋ฉด ์‹œ์Šคํ…œ์— ๋จผ๊ฐ€๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Œ

ใ…‡ ๋„คํŠธ์›Œํฌ connection ๊ฐœ์ˆ˜ - web ์„œ๋ฒ„๋‚˜ DB์„œ๋ฒ„ ์—์„œ ์‚ฌ์šฉ์ž ์ ‘์† ์ƒํƒœ ํŒŒ์•… ๊ฐ€๋Šฅ

ใ…‡ ์ฃผ์š” ๋””์Šคํฌ ์‚ฌ์šฉ์œจ - ๋กœ๊ทธ๋กœ ์ธํ•œ ๋””์Šคํฌ ํ’€ ์ฃผ์˜!!

 

#!/usr/bin/sh 

# SOLARIS 10

# prtdiag๋Š” root์—์„œ๋งŒ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ. ์ผ๋ฐ˜ user๋กœ ์ˆ˜ํ•ดํ•˜๋ ค๋ฉด ๊ฐ’์„ ๋ช…์‹œ

 

logdir=/log/mylog

sysmem=`prtdiag | grep "Memory size:" | awk '{ print $3' ; }'`  

while :

do

dat=`date +"%y%m%d"`

tme=`date +"%y%m%d%H%M"`

 

# ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜

curprc=`ps -e | wc -l | awk ' { print $1; } '`

 

# ๋„คํŠธ์›Œํฌ connection ์ˆ˜

curnet=`netstat -n | grep ESTABLISHED | wc -l | awk '{ print $1; } '`

 

# CPU & Memory

vmstat 1 2 | tail -1 | awk " {

printf \"$tme CPU %d MEM %d PRC $curprc NET $curnet\\n\",

100-\$NF,

100-((\$5/1024)*100/$sysmem);

}  >> $logdir/svrmon_$dat.log

# DISK

(

for curdir in /src /log

do

df -h $curdir | grep "[0-9]G" | grep "[0-9]%" | awk " {

print \"$tme DISK $curdir %s\\n\",\$5;

} "

done

) >> $logdir/dskmon_$dat.log

 

sleep 60

done 

 

 

์œ„ ํ”„๋กœ์„ธ์Šค๋ฅผ background๋กœ ์ˆ˜ํ–‰์‹œํ‚ค๊ณ  tail -f /log/mylog/... ๋ช…๋ น์–ด๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

Oracle ๋ชจ๋‹ˆํ„ฐ๋ง

์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ shell ์Šคํฌ๋ฆฝํŠธ ์ž…๋‹ˆ๋‹ค.

ใ…‡ LOCK ์ˆ˜ - DB๊ฐ€ ์ฃฝ์–ด๊ฐ€๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ

 

์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋‹ค๋ฅธ ๋งŽ์€ ๋ชจ๋‹ˆํ„ฐ๋ง๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ DBA๊ฐ€ ์•„๋‹Œ

์ž…์žฅ์—์„œ๋Š” DB์™€ ๊ด€๋ จ๋˜์–ด ์„œ๋ฒ„ Load, Transaction Load ๊ณผ LOCK์ด ์Œ“์—ฌ๊ฐ€๋Š”์ง€๋งŒ ํ™•์ธํ•˜๋ฉด

๋ณด๋ฉด ์ถฉ๋ถ„ ํ•œ๋“ฏํ•ฉ๋‹ˆ๋‹ค. DB ์„œ๋ฒ„ ์ƒํƒœ๋Š” ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง์—์„œ Transaction ๊ด€๋ จํ•ด์„œ๋Š” WAS์—์„œ์˜

Active Data Connection ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 #!/usr/bin/sh

# SOLARIS 10

# Oracle Admin ๊ณ„์ •์œผ๋กœ ์ˆ˜ํ–‰

logdir=/log/mylog

 

while :

do

dat=`date +"%y%m%d"`

tme=`date +"%y%m%d%H%M"`

 

(

echo "select count(distinct(lk.sid)) from v\$lock lk where lk.type in ('TX','TM','UL');"

echo "exit"

) | sqlplus "/as sysdba" | awk "

BEGIN { mod=0; }

mod==0&&/^COUNT.DISTINCT./ { mod=1; next; }

mod==1&&/^--------/ { mod=2; next; }

mod==2 { printf \"$tme LOCK %d\\n\", \$1; mod=3; next; }

" >> $logdir/dbmod_$dat.log

 

sleep 60

done 

 
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ tail -f ๋ช…๋ น์–ด๋กœ ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

JEUS ๋ชจ๋‹ˆํ„ฐ๋ง

์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ shell ์Šคํฌ๋ฆฝํŠธ ์ž…๋‹ˆ๋‹ค.

ใ…‡ ์ฝ˜ํ…Œ์ด๋„ˆ๋ณ„ ์‚ฌ์šฉํ•˜๋Š” DataSource Connection ์ˆ˜ - ์‚ฌ์šฉ๋˜์–ด์ง€๊ณ  ์žˆ๋Š” DB connection ์ˆ˜

ใ…‡ ์ฝ˜ํ…Œ์ด๋„ˆ๋ณ„ ์‚ฌ์šฉํ•˜๋Š” Thread ์ˆ˜ - ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š” Transaction  ์ˆ˜

 

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠœ๋‹ ์ƒํƒœ์— ๋”ฐ๋ผ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ ์ด Thread ์ˆ˜๋Š” TPS์˜ ์•ฝ 10์ผ ์ˆ˜์ค€์œผ๋กœ ๋‚˜ํƒ€๋‚˜๊ณ 

DataSource ์ˆ˜๋Š” Thread ์ˆ˜์™€ ๋น„์Šทํ•˜๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ ์ด๋“ค ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฝ˜ํ…Œ์ด๋„ˆ์˜ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์ด๋‚˜

DBMS์˜ connection resource ๋ฐ ๋ถ€ํ•˜ ์‹œ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#!/usr/bin/sh
# SOLARIS 10

logdir=/log/mylog

hostnm=`hostname`
tmpdir=/tmp


while :
do


dat=`date +"%y%m%d"`

tme=`date +"%y%m%d%H%M"`

# ja : jeusadmin

# dsinfo : Datasource ์ •๋ณด 

# ti : Thread ์ •๋ณด

(

sleep 2

echo "dsinfo -active"

sleep 2

echo "ti"

sleep 2

echo "exit"

) | ja > $tmp/jeusmon.tmp

 

# container๋ณ„, datasource๋ณ„, active ๋ฐ max connection ์ˆ˜ ์ถœ๋ ฅ

cat $tmp/jeusmon.tmp | /usr/xpg4/bin/grep -e "true" -e "engine container" |

/usr/xpg4/bin/awk "

/container/ {

connme=\$NF;

if(\$1==\"Connection\"){

connme=substr(con,12);

connme=substr(con,1,length(con)-1);

}else{

connme=substr(con,21);

connme=substr(con,1,length(con)-1);

}

connme=toupper(connme);

}

/true/ {

 print \"$tme DS=%s ACT=%d MAX=%d\\n\",$connme, \$2, \$8, \$14;

}

" >> $logdir/jdimon_$dat.log

 

# container๋ณ„ active  ๋ฐ max thread ์ˆ˜ ์ถœ๋ ฅ

cat $tmp/jeusmon.tmp | /usr/xpg4/bin/grep -e "\[total :" -e "ContainerName" |

/usr/xpg4/bin/awk "

BEGIN {

prenme=\"\";

idlcnt=0;

maxcnt=0;

}

/ContainerName/ {

connme=substr(\$4,length(\"$hostnm\")+2);

connme=toupper(connme);

if(prenme!=\"\"&&prenme!=connme){

printf \"CON=%s ACT=%d MAX=%d\\n\",

prenme, maxcnt-idlcnt,maxcnt;

idlcnt=0;

maxcnt=0;

}

prenme=connme;

}

/total :/ {

maxcnt=maxcnt+\$3;

idlcnt=idlcnt+\$9;

}

END {

printf \"CON=%s ACT=%d MAX=%d\\n\",prenme, maxcnt-idlcnt,maxcnt;

}

" >> $logdir/jtimon_$dat.log

 

sleep 60

done

 

๊ฑฐ๋ž˜ ๋‚ด์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด APM ์ด๋‚˜ DB ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์ด ์žˆ์–ด์•ผ ํ•˜๊ฒ ์ฃ ?

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋‹ˆํ„ฐ๋ง ๊ด€๋ จ ๊ธ€์—์„œ ๋‚ด์šฉ๋“ค์„ tail -f ๋กœ ๋ณด๋ ค๋ฉด ์ „์ฒด ํ˜„ํ™ฉ ํŒŒ์•…์ด ํž˜๋“ญ๋‹ˆ๋‹ค.

nmon์ด๋‚˜ top ๋ช…๋ น์–ด์ฒ˜๋Ÿผ ์ „์ฒด ์ƒํ™ฉ๋“ค์„ dashboard ์ฒ˜๋Ÿผ ํ•œ ํ™”๋ฉด ๋‚ด์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์ƒ ์„œ๋ฒ„๋ณ„๋กœ

๋ชจ๋‹ˆํ„ฐ๋ง ํ•ญ๋ชฉ๋“ค์ด ํ‘œ์ฒ˜๋Ÿผ ์ถœ๋ ฅ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.