함수 전자계산기

제길슨 잠 온다.


그래서 말인데


지금 부터 내가 할것은


cd에서 특이한 이동이다



  • cd $HOME

  • cd -


 


그건 그렇고 이제 할꺼는


#! /usr/bin/ksh

# function define

pushd()

{

        now_dir=`pwd`

}

popd()

{

        cd $now_dir

}



pwd

# excute function

pushd

cd /tmp

pwd

popd

pwd

로 된 함수를 보는 거다. 흠.


 


killproc


프로세스 이름만 넣으면 찾아서 알아서 지기는 플그램.



#! /usr/bin/ksh



killproc()

{

        if [ $# -eq 0 ]

        then

                echo "Usage $0 process_name"

        else

                myid=`id -un`

                kpid=`ps -ef | grep $myid | grep $1 | grep -v "grep $1" | awk '{print $2}'

`

                #echo $kpid

                if [ "$kpid" = "" ]


# if [ ${kpid}S = "S"}




                then

                        echo "$1 is not running"

                else

                        kill $kpid

                fi

        fi

}



 


shift


시프트 : 밀기 연산


한개 씩 처리하고 뒤에 것을 앞으로 당긴다.


예) 디스크 사용자의 이름을 받으면 그사람의 디렉토리 양을 조사하고 인자가 없으면 모든 사용자의 디렉토리를 조사한다.


#! /usr/bin/ksh



if [ $# -eq 0 ]

then

        # all user



        du -s `awk -F: '{ print $6 } ' /etc/passwd` > homedir.txt 2>/dev/null

else

        # args

        rm -f homedir.txt

        touch homedir.txt

        while [ $# -gt 0 ]

        do

                upath=`grep ^$1 /etc/passwd | awk -F: '{ print $6 }'`

                du -s $upath >> homedir.txt 2>/dev/null

                shift

        done

fi

수정 버젼


#! /usr/bin/ksh



dusave()

{

        if [ -d $1 ]

        then

                du -s $1 >>homedir.txt 2>/dev/null

        else

                echo "\"$1\" is NOT such "

        fi

}



rm -f homedir.txt



if [ $# -eq 0 ]

then

        # all user




         apath=`awk -F: '{ print $6 } ' /etc/passwd`

        for upath in $apath

        do

                dusave $upath

        done

else


args

        touch homedir.txt

        while [ $# -gt 0 ]

        do

                upath=`grep ^$1 /etc/passwd | awk -F: '{ print $6 }'`

                dusave $upath

                shift

        done

fi



 


이 글은 스프링노트에서 작성되었습니다.


프로세스 관리 - 주기적인 작업 전자계산기

백업과 같은 작업


백업은 최 한 시간을 사용한다.


cron


지정된 시간이 되면 항상 명시된 작업을 하는 것


cron이라는 프로세스가 안돌아 가고 있으면 절대 사용 못함. 1


등록 하는 방법


crontab


주기적인 작업을 수정 추가 삭제 하는 명령




  • -e



    • 추가 수정




  • -l



    • 목록




  • -r



    • 삭제




양식


분 시 일 월 요일 작업


예)


26 * * * * date >> cron.result


00 4 * * 0 tar -cvf backup.tar *


10, 40 1-3 * * * ls


쉘 프로그래밍으로 작업을 적는것도 된다.


매번 자주 해야 되는 작업을 할때 쓴다. 흠.


corn.allow


cron을 쓸수 있도록 열거 한거. 하지만 cron.deny에 열거 되면 사용할 수 없다.


cron.deny


cron을  쓸 수 없는 사용자를 열거한것.


/var/cron/log


cron이 동작한 것이 기록으로 남는 파일


at


cron과 달리 단발적인 작업을 난중에 원하는 시간에 동작하게 만들때 사용하는 명령


cron과 같은 점은 allow 목록과 deny 역시 같이 존재 하고 없으면 아무도 이 명령을 사용하지 못하고 root 사용자만 사용이 가능하다.


물론, cron과 같이 동작한다는 거다.


atq


at queue의 약자 같다. at를 통해서 입력되어 대기중인 명령들의 목록을 보여준다.


 


이 글은 스프링노트에서 작성되었습니다.


프로세스 관리 - 관리자 버젼 전자계산기

모든 프로세스로 관리 된다.


PID


프로세스의 고유한 번호


1보다 작은 PID는 없음.


0번인 프로세스는 커널에서만 사용하는 프로세스라 생각 하면된다!!!


커널도 내부는 프로세스 방식으로 동작한다.


PPID


프로세스를 만든 부모 프로세스의 PID


유닉스에서는 부모가 없는 자식 프로세스는 없다.


자식 프로세스가 도는데 부로 프로세스가 종료가 되면 init 프로세스가 부모 프로세스가 된다. 흠 init는 (양)자녀가 넘 많은 이유는 이거다. 절대 지가 다 만든게 아닐꺼다~


UID


사용자 ID


GID


 그룹 번호


EUID & EGID


Effective user identification


사용자는 로그인 하면 EUID 를 부여한다.


보통은 실제 ID 즉, UID와 EUID가 같다.


파일 권한에서 setuid를 기억하라.


이때 파일을 실행하면 소유자의 권한으로 잠시 변경된다. 그러므로 실제 UID랑 EUID 가 다를 수 있는 경우가 생기는 것이다.


자 또다른 예가 있다. su를 사용해서 다른 아이디로 로그인 해보자. 이때 who를 해보면 su를 통해서 로그인한 아이디가 보이지 않는다. ㅎㅎ


이 말은 파일을 접근하기 위한 EUID가 바뀌어 있다는 것이다. 단, 프로세스는 무조건 PID로 관리 된다. 다시 한번 말을 하자면 파일 권한 검사 -> EUID 검사 라는 것이다.


 


pgrep


ps + grep


prstat


현재 프로세스 상태를 모니터링 하는 도구


다른 unix 에서는 top 가 쓰임.


시스템에 많은 부하를 가중시키는 도구. 계속 쓰는 것은 권장하지 않음.


pkill


전에 만든 killproc 랑 같은 동작을 함.


pkill 프로세스 이름


하면 프로세스 이름으로 해당 프로세스를 찾아서 직인다.~


nice


프로그램 우선 순위를 변경하는 도구


잘 쓸일 없지만 알아만 두자.


보통은 우선 순위를 낮추는 역할에 많이 쓰인다. 그말은 진짜 거의 쓰일일 없다는 거다!!!


높이는 것은 해봣자 안 먹힌다.


su


/etc/default/su라는 파일을 통해서 su 명령이 수행된다.




  • console   



    • passwd와 같이 su 명령이 통할 수 있는 위치를 지정하는것.




  • SYSLOG



    • su 명령어를 쳤을때 기록이 남게 하는  옵션.




  • SUPATH



    •  su 로 로그인 하는 사용자의 path를 다르게 설정




 


이 글은 스프링노트에서 작성되었습니다.


프로세스 관리

프로세스의 개요


프로세스?


-> 현재 실행중인 프로그램.


-> 입력이 들어가고 나서 출력이 나오기 까지 수행되는 동안.


프로세스 구조




  • 세그멘트( segmant)



    • 변수

    • 코드




  • 파일 기술 표(File descriptor Table)



    • 크기 가변 할당이 가능하나 보통은 1024개가 할당됨

    • 파일과 밀접한 연관을 가짐. 실행 코드(세그멘트 영역) 과 파일 기술 표와 연관되어 실행됨.

    • 하드웨어를 장치 파일로 다룸 그래서 장치는 파일이 중요

    • 소켓도 파일로 다룸.

    • 장치나 네트워크는 제조사 별로 사용 방법이 다르지만, 유닉스에서 파일로 다룸으로 해서 간단하게 사용됨.

    • 파일 0, 1, 2번은 사용 할 수 없다. 왜!!!!! 표준 입출력+ 에러(standard I/O)이니까넹

    • 입력 -> 0   -> stdinp -> 기본은 키보드

    • 출력 -> 1   -> stdout   -> 기본은 모니터

    • 에러 -> 2   -> stderr   -> 기본은 모니터.

    • 기본은 정해져 있지만, 임으로 변경이 가능하다. 에고고고 잠이 살포시 다시금 오는 구낭 그러길래 왜 새벽 댓 바람 부터 잠을 설치는거냥. 제길슨 켁켁켁켁켁


    • <



      • 표준 입력 장치 변경

      • mail jsp08 < letter

      • write jsp08 < letter



    • >, 1>




표준 출력 장치 변경



  • who > who.txt


  • multihp1:/data2/jsp/jsp09>ll -R > 20081226

    multihp1:/data2/jsp/jsp09>touch xxxx

    multihp1:/data2/jsp/jsp09>touch yyyy

    multihp1:/data2/jsp/jsp09>touch zzzz

    multihp1:/data2/jsp/jsp09>touch xyz

    multihp1:/data2/jsp/jsp09>ll -R > 20081227

    multihp1:/data2/jsp/jsp09>diff 20081226 20081227



  • 2>



    • 표준 에러 출력 장치 변경

    • 이름은 파일을 써도 되고 장치 명을 써도 됨.

    • multihp1:/data2/jsp/jsp09>ls passwd1 apsswd9

      apsswd9 not found

      passwd1

      multihp1:/data2/jsp/jsp09>ls passwd1 passwd9 2> ls.out

      passwd1

      multihp1:/data2/jsp/jsp09>cat ls.out

      passwd9 not found

    • ls passwd1 passwd9 > ls.out 2>&1



  • 위와 같은 방법을 재지정(Redirection)


  • multihp1:/data2/jsp/jsp09>cat ls.out

    passwd9 not found

    passwd1

    Fri Dec 26 09:17:07 KST 2008

    multihp1:/data2/jsp/jsp09>date >> ls.out

    multihp1:/data2/jsp/jsp09>date > ls.out

    multihp1:/data2/jsp/jsp09>cat ls.out

    Fri Dec 26 09:19:53 KST 2008

    multihp1:/data2/jsp/jsp09>



  • |



    • 파이프(pipe)

    • 프로세스 구조와 밀접한 구조.

    • 명령과 명령의 사이에 사용.


    • ls | more



      • 와 같이 사용할 경우 ls, more의 프로세스가 둘다 올라감.

      • 그리고 파이프가 표준 출력 즉, 파일 1번과 파이프가 연결되고 뒷 프로세스의 파일 0번 과 파이프로 연결된다.






  • |tee



    • 티!!!!!

    • 동시에 콘솔 출력을 하면서 파이프 동작을 하게 하려 할때 !!




전면 & 후면


전면(foreground)


후면(background)


하나의 접속에서 여러개의 명령을 동시에 수행할 수 있는 방법은 ?


1980년대 산업에서 유닉스가 많이 퍼지기 시작했음.


이때 당시에는 더미 터미널이라고 하는 키보드랑 모니터만 있는 것이 있었음.


간단하게 문자를 보내고  결과를 받아 보는 단순한 하드웨어 였는데 이런 터미널이 여러개 접속되어야 하기 때문에


이런것을 처리 하기 위해 생긴 개념이 후면 (backgfound)임.


전면에 대해서 알아보자


일단 sleep 를 써보자.


sleep 5


로 입력을 하면 5초 동안. 아무런 입력을 할 수 없다.


즉 여기서 알수 있는것은 전면이란, 한 동작을 수행하기 위해선 다른 동작을 할 수 없는 상태를 말한다.


ls -R / > /dev/null 2>&1


동작중에 끄게 하기 위해선 control + c 를 누르면 된다.


자 그럼 전면을 후면으로 바꾸는 방법을 알아보자. !!!


그것은


ls -R / > /dev/null 2>&1 &


와 같이 사용하는 명령어 맨 끝에 & 만 입력 하면 된다.


후면에서 일어나는 동작을 보려면


jobs 라는 명령을 사용하면 된다.


후면에서 일어나는 작업은 연결된 창과 밀접한 연고나이 있기 때문에 새로운 콘솔 창을 연결하면 아무런 작업을 볼 수 없다.


control + c를 눌러도 종료가 되지 않는다.


그럼 종료하는 방법은


kill %번호


이다. 여기서 번호는 jobs를 통해서 확인 가능한 번호이다.


당근 후면 작업은 하나를 돌려 놓고 다른것을 돌릴 수 있다. 후면은 여러개 가능하다는 이야기 이다.


그럼 다른 터미널에서 후면 작업을 보는 방법은?


그것은 ps 명령을 통해서 보면 된다.


후면 작업을 하다가 로그아웃을 하면 작업이 있다 하며 바로 종료가 되지 않는다.


하지만 다시 로그아웃을 하면 나갈 수 있다.


그런데 문제는 이렇게 강제 종료를 하면 터미널 창을 닫으면 모든 작업이 종료 된다.


그래서 방책이 있다 그것은.


nohup 을 사용하면 된다.


 


fork


fork()  함수는  fork를 호출한 프로세스와 똑같은 생긴 새로운 프로세스를 만든다.


이때 커널이 각각의 프로세스에게 주는 값들이 있다.


fork를 호출한 함수에게는 자식의 pid값을 준다. 그리고 호출을 당한 프로세스에는 0값 즉, 성공을 알리는 값을 준다.


그래서 한 소스 안에서 자식과 부모의 동작을 기술 할 수 있다.


#include <stdio.h>

#include <unistd.h>



int main(void)

{

        if(fork() == 0) // child process

        {

                system("sleep 3");

                system("banner child");

                system("ps -l");

                exit(0);

        }

        else            // parent process

        {

                system("sleep 8");

                system("banner parent");

                system("ps -l");

        }

        return 0;

}


 


결과


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

 #    #  #    #     #    #       #    #

 #       ######     #    #       #    #

 #       #    #     #    #       #    #

 #    #  #    #     #    #       #    #

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



  F S        UID   PID  PPID  C PRI NI             ADDR   SZ            WCHAN TTY       TIME COMD

  1 S        549 19194 19187  0 158 20         50126700   82         4a866040 pts/tI    0:00 sh


  1 S        549 19186 17631  0 158 20         4ec59ec0   10         50113040 pts/tI    0:00 fork

  1 S        549 19187 19186  0 158 20         49d21840   10         5007e040 pts/tI    0:00 fork

  1 R        549 19195 19194  1 178 20         49354cc0   37                - pts/tI    0:00 ps

  1 S        549 19188 19186  0 158 20         49c0b1c0   82         50255040 pts/tI    0:00 sh

  1 S        549 17631 17630  0 158 20         50036940   61         50454040 pts/tI    0:00 ksh

  1 S        549 19191 19188  0 168 20         49d21c00   16         42c01040 pts/tI    0:00 sleep

  1 S          0 17630   763  0 154 20         6042f700   45         4db158a8 pts/tI    0:00 telnetd



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

 #    #   #  #   #    #  #       ##   #     #

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

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

 #       #    #  #   #   #       #   ##     #

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



  F S        UID   PID  PPID  C PRI NI             ADDR   SZ            WCHAN TTY       TIME COMD

  1 S        549 19186 17631  0 158 20         4ec59ec0   10         50113040 pts/tI    0:00 fork

  1 Z        549 19187 19186  0 178 20         49d21840    0                - pts/tI    0:00 <defunct>

  1 S        549 19208 19186  0 158 20         4391c700   82         50255040 pts/tI    0:00 sh

  1 S        549 17631 17630  0 158 20         50036940   61         50454040 pts/tI    0:00 ksh

  1 R        549 19209 19208  1 178 20         49c0b1c0   37                - pts/tI    0:00 ps

  1 S          0 17630   763  0 154 20         6042f700   45         4db158a8 pts/tI    0:00 telnetd


 


위에 보면 Z 라는 상태가 존재 한다. 이넘은 좀비!!!! 다


근데 좀비란 무엇인가? 그것을 알아 보자.


모든 프로세스는 fork를 통해서 프로세스를 생성한다.


프로세스가 생성되면 모든것은 준비 상태이다.


시피유의 갯수는 프로세스의 갯수에 비해 절대 적인 수가 다르다. 그래서 시분할이라는 개념으로 cpu 시간을 나누어서 사용한다.


준비 -> 실행


되는 경우는 스케쥴러에 의해 선택을 받으면 이렇게 상태가 변경된다.


보통 cpu는 200ms 정도를 할당하고 시간이 초과 되면


실행 -> 준비


가 된다.


실행 -> 잠(sleep)


로 빠지는 경우가 있다. 그것은  실행중에 I/O 를 해야한 이벤트가 발생하면 동면(sleep) 상태로 변경하고 모든 I/O가 끝나면 다시


잠(sleep) -> 준비 


로 된다.


실행을 하기 위한 런큐(RUN-Queue)라는 것이 존재한다.


이것은 큐형태의 자료구조에 실행할 프로세스가 대기한다.


이것이 중요한 이유는 성능측정을 위해서 실행큐에 얼마나 많은 프로세스가 있나로 성능을 측정할 수 있다.


sar라는 도구로 실행 큐에 남아 있는 프로세스 수를 측정한다.


이때 3개 미만 되면 시스템이 게안타~


즉, 실행 큐의 크기란 준비 상태에 있는 프로세스의 갯수다~


종료 하는 방법은 exit(0) 또는 강제 종료를 통해서 가능하다.


종료를 할때는 프로세스는 좀비(zombie)라고 하는 상태가 되었다가 최종적으로 종료 된다.


모든 프로세스는 부모 프로세스가 존재 한다. 절대로 고아 프로세스는 없다.


종료 시점에 프로세스가 하는 일은



  1. 자원 반남


  2. 메모리 반납



    • 요까지 하면 모든 자원을 거의 반납을 했기 때문에




  3. 부모 프로세스에게 신호를 보냄



    • 요럿케 하는건 약속. 모든 프로세스는 죽을때 부모 프로세스에게 신호를 보내도록 약속되어 있다.

    • 신호를 보낸 후의 상태가 좀비(Zomble) 상태




  4. 부모가 종료 프로세스 신호를 받으면



    • 부모가 자식 프로세스를 종료 시켜준다.

    • 단 문제는 부모가 바빠서 종료를  안해 주면 자식 프로세스는 계속 적인 좀비 프로세스 상태로 되어 있다.


    • 문제 !!!!



      • 부모 프로세스가 수 많은 프로세스를 생성 시키고 난후 종료을 안시키면 심각한 문제가 발생한다.

      • 유닉스에는 한번에 실행 시킬 수 있는 프로세스 갯 수 제한이 있다. 그런데 좀비가 많아 지면 시스템 관리자 조차도 아무런 명령을 실행 할 수 없다.

      • 해결책은 !! 껐다 키는거 -> 이리 되면 유닉스는 파일 시스템에 심각한 문제가 발생 할 수 있다. 그래서 파일이 삭제 되거나 부팅이 되지 않은 문제가 발생한다.

      • 이렇게 되면 자원은 남아 돌지만 좀비 프로세스만 많다.

      • 이런 문제는 일반적으로 문제가 생기지 않지만. dbms 라던지 미들웨어는 좀비 프로세스를 만들 수 있기 때문에 관리자는 사전에 찾아서 문젝가 발생하지 않게 해야 된다. -> 재부팅 하지 않게

      • 관리자는 반드시 좀비 프로세스 체크 해야 함.




    • 좀비를 해결하는 문제



      • 코드를 변경해야 하므로 제작사에게 알려서 고쳐 달라고 해야 한다.






 


ulimit -a


sysdef


 


ps


보이는 TIME 값은


할당된 CPU 시간이다.




  • -f



    • 정보를 조금 더 자세히 알려고 할때.

    • 명령이 완전하게 되어 보여진다.

    • uid, ppid, C, STIME를 알수 있다.

    •  uid, 와 ppid를 중요한 정보를 알 수 있음.

    • STIME    : 시작 시간.




  • -l



    • 가장 자세혼 옵션


    • 우선순위 (PRI)



      • 실행 우선 순위




    • 나이스(NI)를 수정하면 우선순위 조정 가능함. 우선순위를



      • nice -값 실행 명령




    • ADDR



      • 주소?




    • SZ



      • 페이지 갯수




    • WCHAN



      • 웨이트 이벤트를 걸어주는 주소




    • S



      • 중요

      • 프로세스 현재 수행 상태 .






  • -e



    • 내 프로세스 뿐만 아니라 유닉스 에서 돌아가는 모든 프로세스를 보여주는 옵션.




 



좀비프로세스를 알아보는 쉘 프로그래밍


ppid = `ps -el | awk '$2 == "Z" {print  $5}'`

echo "PPID = $ppid"

ps -ef | grep $ppid



 


kill


프로세스에게 신호를 보내는 명령


근데 주로 프로세스를 죽이는 명령으로 쓰기 때문에 킬 하는 명령, 죽이는 명령이라 기억한다.




  • -ㅣ



    • 줄 수 있는 신호 목록을 보는 옵션




특별히 안쓰면 신호 번호 15번 TERM신호가 전송된다.


신호 목록




  • INT



    • control + c

    • 인터럽트




  • QUIT



    • control + \

    • 방어 가능

    • 코아 파일을 생성시키게 하는 신호




  • KILL



    • 방어불능

    • 프로세스 강제 종료 신호




  • TERM



    • 종료 신호

    • KILL 보다 낮은신호




  • CHLD



    • 자식 프로세스가 부모에게 보내는 신호



  • STOP

  • TSTP


일반적으로 종료 할때는 15번 신호 TERM이면 되지만, 안되는 경우는 9번 신호 kill 신호를 보내면 죽는다.


하지만 다른 사용자가 만든 프로세스는 종료가 불가능 하다. 단, 역시나 관리자가 대빵이다!! 가능하다.


 


데몬프로세스


서비스


시스템이 시작하면 자동으로 시작 되어 실행되는 프로세스


TTY가 ? 인 녀석이 데몬 프로세스이다.


ps -ef | grep inetd


라고 쳐서 inetd를 프로세스 정보를 보자.


inetd 프로세스는 우리가 접속하는 telnet 과 연관이 있는데 telnetd 프로세스의 부모가 inetd 음.


 


프로세스 통신


2개의 프로세스가 통신하는 방법


-> 단방향 통신임(One -Way)



  • anonymouse (이름없는) Pipe -> '|'


  • named Pipe == FIFO == PIPE file


     




2개 이상의 프로세스가 통신하는 방법 중에 메세지 큐, 공유 메모리, 세마포어 가 있음


-> both-Way




  • Message Queue 



    • 길이가 짧은 거에 사용 (1KB)

    • 속도 느림

    • 구현이 간단하고 쉬움.




  • Shared Memory



    • 긴 메세지

    • 속도가 빠름.




  • Semaphore



    • 프로세스 끼리 동기화

    • 충돌 방지 (교통 정리)




named pipe


소스


fifo1


include <fcntl.h>

#include <limits.h>

#include <sys/types.h>

#include <sys/stat.h>



#define BUFFER_SIZE PIPE_BUF

#define TEN_MEG (1024 * 1024 * 10)



int main()

{

    int pipe_fd;

    int res;

    char buffer[BUFFER_SIZE + 1];



    pipe_fd = open("mypipe", O_WRONLY);



    if (pipe_fd != -1) {

        while(1) {

            write(1,"Talker>",8);

    pipe_fd = open("mypipe", O_WRONLY);



    if (pipe_fd != -1) {

        while(1) {

            write(1,"Talker>",8);

            fgets(buffer,BUFFER_SIZE,stdin);

            if(strcmp(buffer,"end\n")==0)

                break;

            res = write(pipe_fd, buffer, strlen(buffer));

        }

        (void)close(pipe_fd);

    }

    else {

        exit(EXIT_FAILURE);

    }



    exit(EXIT_SUCCESS);

}

fifo2


#include <fcntl.h>

#include <limits.h>

#include <sys/types.h>

#include <sys/stat.h>



#define BUFFER_SIZE PIPE_BUF



int main()

{

    int pipe_fd;

    int res;

    char buffer[BUFFER_SIZE + 1];

    int bytes_read = 0;



    memset(buffer, '\0', sizeof(buffer));



    pipe_fd = open("mypipe", O_RDONLY);



    if (pipe_fd != -1) {

    pipe_fd = open("mypipe", O_RDONLY);



    if (pipe_fd != -1) {

        while (1) {

            res = read(pipe_fd, buffer, BUFFER_SIZE);

            if(res <=0)

                break;

            printf("%s",buffer);

        }

        (void)close(pipe_fd);

    }

    else {

        exit(EXIT_FAILURE);

    }



    exit(EXIT_SUCCESS);

}



  • mkfifo



    • 이름 있는 파이프 파일 생성하는 명령어.



  • 위의 소스를 사용하면 2 프로세스간의 통신을 보여주는 소스이다.

  • 일반 mypipe를 생성하면 fifo2 소스가 대기 하지 않고 바로 종료 된다. 그리고 아무리 내용을 fifo1에 입력을 해도 내용은 입력되지 않고 다만 mypipe 파일이 내용이 커진다.

  • 하지만 mkfifo 를 사용하여 mypipe를 생성하면 fifo2가 종료 되지 않고 살아 있다. 그리고 fifo1에서 내용을 입력하면 fifo2에 내용을 보여준다.


 


IPC key


키값이 같으면 같은 공유 메모리를 사용한다.


ipcs


IPC 상태


ipcrm


IPC 강제 삭제




  • -q



  • -m   

  • -s


 


추가



  • write


  • mesg



    • mesg y 로 하면 메세지 수신 허락



  • gg


 


총괄 실습




  1. 현재 수행 하는 프로세스 갯수 세기




    • ps -e | wc -l





  2.  




    • ps -ef | grep jsp09 | grep loop | grep -v grep | awk '{print $2}' | sort -n > loop.log





  3.  




    • kill -9 `ps -ef | grep jsp09 | grep find | grep -v grep | awk '{print $2}' `





  4.  




    • ps -ef | grep jsp30 | grep -v grep | awk '{print $8, $2}' | sort +2 -n > jsp30ps.log



    • ps -ef | awk '$1 == "jsp30"{print $8, $2}' | sort +2 -n > jsp30ps.log





  5.  




    • grep -l unix /etc/`ls -al /etc | grep ^- | awk '{print $9}'` > myunix 2>myunix.err

      find /etc -type f -exec grep -l unix {} \; > myunix 2> myunix.err





 


이 글은 스프링노트에서 작성되었습니다.


패키지 관리

pkginfo



  • [-l pakage_name]

  •  


pkgadd



  • [-d 경로] pakage_name


 


pkgrm



  • [pakage_name]


 


pkgchk



  • -l pkgname

  • -p 파일명


 


tripwire


 패키지 점검 도구


 


www.sunfreeware.com


이 글은 스프링노트에서 작성되었습니다.


파일 시스템의 백업과 복구 전자계산기

디스크, cd-rom 같은 경우는 파일 몇개를 백업 한다. 그리고 외장 하드를 사용 많이 하기도 한다. 하지만 충격에 약하고 보관이 힘들다.


보통은 가격이 싼 자기테이프 장치를 사용한다. 임의 접근이 안되고 순차 접근만 되는데 가격이 싸다는 장점은 다른것을 다 넘어 선다.


 


백업 드라이버 명명


/dev/rmt /<unit-number>[<density>][<no-rewind>]


 


 


ufsdump


파일시스템 통째로 백업


ufsdump[[0123456789]unvolsf] files_to_dump


숫자


완전 백업 할지 아니면 증분 백업 을 선택하는것.


현재 지정한 레벨에 이전 레벨의 백업 이후를 백업 한다.


규칙적으로 백업 받을 때 사용


0번을 가장 많이 사용


u


u(Update) 옵션을 사용하면 백업 상황을 기록


n


백업시 사용자에게 메세지 전송


l


하나에 꽉차지 않을때 다음 백업 매체로 자동으로 바꾸는것


o


자동 배출


s


백업 량을 미리 측정


v


제대로 기록 했는지 테스트


f


백업 장치를 지정


 


ufsrestore


ufsbackup을 통해서 백업 받은 파일을 복구하는 도구




  • -r



    • 그대로 복구




  • -I



    • 원하는 파일만 복구




  • -t



    • 백업 파일에 들어 있는 파일을 확인




  • -x



    • 원하는 선택한 파일만 복구




 


tar


앞서 2개 보다 tar를 더 많이 백업에 사용함.


합치기


tar cvf backup /export/home

주의점 백업 할때 경로를 절대로 지정하면 절대로 되고 상대로 하면 상대로 하는데 절대로 하면 실수로 파일을 덮을 우려가 있으므로 상대 경로로 압축을 하라.


 


풀기


tar xvf backup


 


원하는 파일 풀기


tar xvf backup /export/hmoe/kim/file1


 


gzip


압축


 


bzip2


압축


627 쪽 참조


 


dd


disk dump


disk to disk


디스크 끼리 복사.


사본 디스크가 원본 디스크 보다 최소한 같거나 커야 한다.


 


dd if=/dev/dsk/c0d0s7 of=/dev/dsk/c0d1s5 bs=4k


 


 


 


 


이 글은 스프링노트에서 작성되었습니다.


파일 내용 관련 명령어 전자계산기

cat


cat [파일명]


파일의 내용을 보여준다..


그데 이넘이 쫌 특이 햇는데 아마도 컨케트레이션의 약자 였는데 영어 철자도 몰겠공 엣힝!


head


파일 앞의 일부분을 보여주는 명령




  • -숫자



    • 숫자 만큼만 보여준다.




more


파일의 내용을 일부분 보여준다.


tail


파일의 끝을 보여주는 명령




  • -숫자



    • 숫자 만큼만 보여준다.




  • -f



    • 해당 파일에 추가되는 내용을 보여준다.

    • 주로 모니터링시 사용 (대상은 기록 파일)




sort


파일의 내용을 알파벳 순서로 정렬




  • -r  



    • 역순 정렬




  • -n   



    • 수 개념으로 정렬합니다.

    • 문자 개념이면 9가 10보다 크다. 왜냐하면 9랑 1을 비교 하기 때문에




  • -t필드구분문자



    • 필드 구분문자를 지정하여 정렬




  • +위치



    • 위치 필드를 기준으로 정렬을 합니다.




uniq


똑같은 줄을 없애는거


단, 연달아 중복되는 녀석만 인식을 하기 때문에 정렬한 후에 사용하기 바란다.


etc 폴더 밑에 가장 큰 파일을 찾아 주는 명령




  • ls -l /etc | sort +4 -nr | head -1



var/adm 밑의 모든 디렉토리(하위 디렉토리 포함)에서 가장 큰 3개만 찾아 봐라




  • find /var/adm -type f -exec ls -l {} \; 2>/dev/null | sort +4 -nr | head -3



결과




  • -r--r--r--   1 root       root       26092677 Dec 23 15:50 /var/adm/syslog/mail.

    log

    -rw-rw-rw-   1 root       sys        2297460 Dec 23 15:56 /var/adm/wtmp

    -r-xr-xr-x   1 bin        bin        2179072 Oct 28  2005 /var/adm/sw/save_custo

    m/PHSS_34880/libcl.2



sed


또다른 편집기 -> 스트링 에디터


grep 매우 중요!!!!


문자열 찾기




  • grep [문자열] [파일명]



파일 내에서 문자열이 포함된 라인 전체를 보여줌


옵션




  • -i



    •   대소문자 무시




  • -l



    • 패턴에서 일치하는 파일의 파일명만 출력




  • -v



    • 패턴을 포함하고 있지 않은 라인을 출력




 


정규표현식(Regular Expression)




  • ^    



    • 줄의 시작. 위치와 연관이 있음.




  • $   



    • 줄의 끝.




  • []  



    • 집합

    • test[abc]이면 testa, testb, testc도 찾아줌

    • [0-9] 같은 범위도 표현가능




  • *



    • 앞의 있는 문자의 매칭 수를 따지는데 0번이상 되는 경우

    • 주의 요망




  • .



    • 임의의 한문자




파일명에 사용하는 정규 표현과 비슷한 녀석은 메타 문자 라고 함. 쉘에서 처리를 함.


정규 표현식은 문자열에만 사용된다.


메타 문자




  • *



    • alll, 전부




  • ?



    • 임의의 한문자.




  • []



    • 집합




 


사용자 정보 중에 내가 사용하고 있는 라인을 보는 것


grep jsp09 /etc/passwd

정확한 명령


grep ^jsp09 /etc/passwd

사용자 정보중 jsp00 ~ jsp19 까지 정보를보는 명령


grep ^jsp[01][0-9] /etc/passwd

사용자 중 콘쉘을 포함하지 않는 사용자를 보는 명령


grep -v ksh$ /etc/passwd

 etc 폴더 안에 있는 파일중 unix라는 단어를 포함하고 있는 파일명


grep -l unix /etc/* 2> /dev/null

 


ps -e | grep inetd

 


ls -l | grep ^-

 


ls -l /bin/ | grep ^- | sort +4 -n | head -1


 


 


awk (오크 ㅋㅋㅋ)


파일의 내용 비교


프로그래밍이 가능한 도구


기능이 너무 많기 때문에 전용 책(800 쪽)도 존재 한다.


파일에서 필요한 부분만 뽑아내는 녀석임.


근데 컴파일러에서 어휘 분석기랑 비슷하당. 흠.


텍스트 파일에서 오크가 동작하는 원리


오크에는 2개의 버퍼가 존재함.


라인 버퍼 : 한 줄 입력을 받는 버퍼


패턴 버퍼 : 오크를 사용할때 패턴을 쓰면 그 값이 들어 오는 버퍼


기본은 두개를 비교하여 모니터로 출력한다.


모니터로 출력하기 위해선 프린트(print)동작을 수행한다.


조건에 따라 선택, 더하고 빼고, 반복 등 프로그래밍 가능하다.


하지만 구찮기 때문에 필요한거만 보자.


오크와 그렙과 다른 면은?


그대로 출력하는 것은 $0를 쓰면된다.


하지만 $(0이 아닌 숫자) 는 의미가 달라진다.


$1 : 입력된 라인중에 첫번째 필드


$2 : 두번째 필드.


요런 가변 필드 때문에 오크를 쓰는 것임.


기본적인 필드 구분자는 공백&탭(\t)&개행(\n)


필드 구분자를 변경하기 위해선




  • -F



    • 필드 구분자 변경 옵션




을 사용하면 된다.


고로 둘의 차이는 원하는 정보를 내 마음대로 요리해 먹을 수  있느냐 아니냐의 차이이다.


또 패턴이 다양하다.




  • BEGIN {}



    • 패턴을 적용하기 전에 선수 조건으로 사용하는것

    • 초기화 같은거




  • END {}



    • 모든 처리가 끝나고 사용하는것

    • 결과 평균과 같은거.




  • /문자열/



    • 정규 표현가능




  •  표현식



    • 조건이 만족되면 패턴을 적용




 


오크의 특징


작은 따옴표 (' ') 만 사용가능함.

사용법


awk '[패턴]{동작}' 파일명

패턴이 너무 길어지면 파일에 써서 사용하는 방법도 있음.


실습


 


계정은 100번까지는 시스템 아이디 이고


일반 아이디는 100번이상이다.


awk -F: '/^jsp30/ { print $0}' /etc/passwd

 


awk -F: '/^jsp30/ { print $1, $3}' /etc/passwd

 


awk -F: '/^jsp/ { print $1, $6}' /etc/passwd

 


awk -F: '$3>=100 { print $1,$3, $6}' /etc/passwd | more

 


awk -F: ' { print $1,$3 }' /etc/passwd | sort +1 -n |tail -1

 


du -s `awk -F: '$3>=100 { print  $6}' /etc/passwd` 2> /dev/null | sort -n | tail -3

 


ls -l /etc | awk '/^-/ {print $3, $5}'

 


ls -l /etc | grep ^- | awk ' {print $3, $5}'

 


ls -l /etc | grep ^- | awk ' {print $9, $5}'

 


ls -l /etc | grep ^- | awk ' {print $3,"\t" $5}'

 


ls -l /etc | grep ^- | awk ' {print $3,"\t" $5}' | sort +1 -n

 



proc.h


pid=`ps -e | grep syslogd | awk '{print $1}'`


echo $pid



 


mail `who | awk '/^jsp/ { print $1}' | sort | uniq


 


sed


편집 하는것이 안보임.


그래서 어디다 쓰는가? 그건 vi로는 용량이 큰 파일이 열리지 않는다. 그런데 수정을 해야 될경우 sed를 사용한다.


쉘 프로그래밍에서 파일을 수정 하려면 sed를 사용하여 편집 할 수 있다.


파일을 직접 수정하고 변형하는 것이 아님 그래서 저장하려면  '>'를 사용하여 출력을 변경해 줘야 한다.


명령


sed '패턴 편집명령' [파일명]

패턴



  • /문자열 패턴/

  • 라인번호


 


편집 명령




  •  s/문자열1/문자열2/



    • 치환




  • d



    • 라인 삭제




  •  a



    • 내용 추가




  • i



    • 내용 끼워 넣기




편집이라 내용을 넣을 수는 있지만 잘 안씀.


저장은 반드시 '>'를 사용하라


diff


주로 문서 파일 내용 비교


diff 파일명1 파일명2


다른 내용을 보여줌.


cmp


파일 내용 비교 + 실행 파일 비교


cmp 파일명1 파일명2


다르기 시작한 문자열을 보여줌


 


기타


~


지금 것 ~ 는 내 홈 디렉토리 였지만


~계정명


을 하면 계정명의 홈디렉토리를 보여준다.


이 글은 스프링노트에서 작성되었습니다.


파일 관리 명령어 전자계산기

유닉스에서 명령어 옵션은 '-'를 붙여서 사용한다.


유닉스에서 '.'  점으로 시작하는 파일은 숨김 파일이다.


ls


list 의 약자


옵션이 20가지가 넘음.


ls 파일이름

로 하면 파일 이름된 파일을 찾아 준다.


 


ls 디렉토리

로 하면 디렉토리 밑에 파일을 찾아준다.


옵션




  • -a



    • 숨김 속성의 파일을 보여준다.




  • -l  중요






    • -rw-r--r--   1 user08     user           154 12월 22일 11:46 ls.out

      -rw-r--r--   1 user08     user           380 12월 23일 09:37 quick.vi

      -rw-r--r--   1 user08     user           136 12월 23일 09:00 sample

      -rw-r--r--   1 user08     user           153 12월 23일 09:01 sample1


    • 파일 유형, 권한, 링크 수, 제작자, 제작 그룹, 크기, 최근 수정일을 보여준다.


    • -rw-r--r--




      • 첫번째는 파일의 유형을 의미



        • - : 일반(문서, 실행)

          vi, >, cc/java를 통해서 만들어 지는 것들

        • d : 디렉토리

          mkdir

        • bc  : 블럭장치 / 문자장치 (/dev)

          mknod

        • p   : pipe (FIFO)

          mkfifo

        • l   : 심볼릭 링크

          ln -S

        • s   : 소켓파일

          mknod + 소켓 만드는 옵션



      • 2 ~ 4번째는 소유자

      • 5 ~ 7번째는 그룹

      • 8 ~ 10번째는  타 그룹

      • r / -   :   read

      • w / -   : write

        디렉토리라면 쪼까 의미가 달라진다. 즉, 디렉토리에서 파일을 추가 하거나 삭제 할 수 있다.

      • x / -   : execute

        디렉토리 에서는 디렉토리에 들어갈 수 있는 여부






  • -R



    • 재귀적으로 파일 정보를 보여줌.




  • -F




    • 파일의 종류를 알려줌.



      • * : 실행

      • / : 디렉토리

      • @ : 링크 파일






  • -d



    • 디렉토리의 정보를 보여주는 옵션.




  • -r



    • 알파벳의 역순으로 나열




  • -i



    • 아이노드 번호를 보여줌.



  • -D

  •  


 


touch


최근 사용시간을 변경하거나 빈파일을 만들대 사용


wc


문서의 크기와 줄수 그리고 글자 수를 세어주는 플그램


wc [옵션] 파일ㅛ




  •  



    • 기본적으로 문자수 단어수 라인수 출력






  • -c



    • 문자 수 만 출력




  • -w



    • 단어 수 만 출력




  • -l



    • 라인 수 만 출력




who


접속한 사용자를 보는 명령어


mv


파일 이름을 변경하거나


파일을 이동시킬때 사용


cp


파일을 복사



  • -i   : 덮어 쓸지 물어본다.

  • -r   : 하부 디렉토리 포함하고 있는 경우 그 하부도 복사를 함.

  • -p   : 복사를 하되 속성을 그대로 들고 오는것.


 


mkdir


디렉토리 생성


 


-p : 하부 디렉토리 까지 통재로 만들때 사용하는 옵션


 


rm


파일을 삭제


 




  • -i



    • 지울건지 물어봄




  • -r



    • 디렉토리 삭제




  • -f



    • 무조건 삭제




ln


링크를 생성하는 명령


 하드링크는 inode 값을 공유 하기 때문에 동일 파일 시스템 & 파티션 내에서만 가능하다. 왜 그런가 하면 각 파티션 마다 inode 가 부여 되는데, 그렇기 때문에 같은 값이 존재 할 수 있다.


그리고 또한 하드 링크는 디렉토리에는 사용할 수 없다.


하드 링크를 하면 파일의 링크 갯수를 증가 시킨다. 그렇기 때문에 링크 갯수가 1 보다 클 경우 링크 수를 줄일 뿐이고, 1 일때만 실제로 파일을 삭제 한다.




  • 아무것도 없음 : 하드 링크



    • inode 값을 공유


    • ln test a





  • -s   : 심볼릭 링크



    • 이름을 공유


    • ln -s test a





find


파일의 위치를 찾는 명령


find 경로명 옵션




  • -name 파일명



    • 파일명에 맞는 파일만 찾음




  • -type  종류



    • 파일의 종류에 맞는것만 찾을 때

    • f   : 일반 파일

    • d   : 디렉토리

    • l   : 링크




  • -user    사용자명



    • 해당 사용자가 만든 파일을 찾아 줌.




  • -size  :  크기



    • 블럭수 에 맞는 파일을 찾아줌 (blocks = 512 blytes)

    • -size +크기    :  크기 이상의 파일을 찾아줌.

    • -size -크기   :   크기 이하의 파일을 찾아줌.




  • -mtime 



    • 날짜에 맞는 파일을 찾아 줌.

    • -mtime -7   :  지금 부터 7일 이내의 파일을 찾아줌.

    • -mtime +7   :  7일 이전의 파일을 찾아줌.




  • -exec 명령어



    • 찾은 파일을 명령어에다가 실행한다?

    • 파일을 열고 싶으면 이것을 사용하고 find로 사용하여 찾은 결과를 조작 하려면 파이프('|')를 사용하자!

    • 헷깔리수 있으니 책 참고

    • -exec rm {} \;

    • -exec cp {} 경로명   \;




  • -a



    • and 옵션




find /var/adm -type d 2>/dev/null

라고 치면 에러는 출력되지 않고 파일이 찾아진다.


 


df


남은 공간


유닉스에서는 100% 되면 시스템이 중지 되기 때문에 반드시 여유 공간을 확인하기 바란다.서버가 돌아가기 위해서는 임시 파일 들이 필요한데 그 파일들이 생성될 공간이 없기 때문이다.




  • -k



    • 많이 쓰는 옵션 블럭 단위가 눈에 잘 익지 않기 때문에 바이트 단위로 변경하여 출력한다.




du


사용하는 공간




  • -s



    • 지정한 디렉토리의 총 사용량만 출력




실습 과제1




  1. 수정 시간 기준으로 파일 찾기



    • find /etc -mtime -1 -a -type f -exec cp -p {} ~/back \; 2>/dev/null




  2. 파일 개수 알아 보기



    • find /etc -name '*conf*' -a -type f 2>/dev/null | wc -l




  3. 디스크 사용량 조사하기



    • du -s /data2/jsp/jsp*




 


chmod


 파일의 사용자 권한 변경


chmod 권한 파일명

권한




  • 기호 (symbol)   




    • 적용대상




      • u



        • 소유자




      • g



        • 소속 그룹




      • o



        • 타 그룸




      • a



        • 전부






    •  가능한 권한



      • r

      • w

      • x




    • 권한 변경



      • +

      • -

      • =



    • ',' 를 사용하여 연결할 수 있음.




  • 8진수



    • 각 권한을 8진수로 표현




사용자 와 소속 그룹의 실행권한에 's'로 표현되거나 다른 사용자의 실행 권한이 로 되어 있는 경우


특수 권한




  • set uid



    •  원래 파일 실행시 실행 시키는 사람의 권한이 사용되나 이것으로 되면 실행자가 소유자 권한이 되어 실행

    • 8진수 권한 앞에 4를 주면 됨. 단, 사용자 실행 권한과 함께 해야 함.




  • set gid



    • 원래 파일 실행시 실행 시키는 그룹의 권한이 사용되나 이것으로 되면 실행자가 소유자 그룹의 권한이 되어 실행

    • 8진수 권한 앞에 2를 쓰면 됨. 단, 소속 그룹의 실행 권한과 함께 해야함.




  • sticky mode



    • 디렉토리에 만 걸수 있음.

    • 디렉토리에 있어 삭제 권한을 제한적으로 사용하게 하는 권한.

    • 8진수 권한 앞에 1을 쓰면 됨. 단, 디렉토리의 실행 권한과 함께 있어야함.




디렉토리는 쪼매 권한이 다름.




  • r



    • 내용보기




  • w



    •  파일 생성 삭제




  • x



    • 디렉토리 들어가기




헷깔릴 수 있으니 다음을 기억 하도록


파일을 내용을 변경하는 것은 파일 자신의 권한이다.


하지만 파일을 생성하고 삭제하는 권한은 파일과 무관하고 그 파일이 있는 디렉토리의 권한이다.


umask


사용 권한 예약


앞으로 만들어 지는 파일의 권한을 예약을 하는것.


이 명령을 수행하고 만들어 지는 파일에 대해서만 권한을 설정하는 것.


umask 8진수값

8진수만 가능한 기호(symbol)은 안됨.


마스크다 절대로 이게 그대로 적용되는게 아니당.


값이 설정이 되면 그 권한이 빠진다.


음 무신 소리인고 하니


022 -> 000010010 이당.


그래서 수정권한에 변경이 있는걸 알아채야 한다. 그런데 수정 권한이 사는게 아니라 수정 권한이 삭제 된다는 것이다. 유념 토록


chown


사용자 변경


내가 만든것을 다른 사람이 만들었다고 소유자를 수여 해주 있다.


그래서 반대로 내가 다른 사람의 권한을 뺏아 올 수는 없다.


단, 예외는 존재 한다. 그것은 unix에서 절대 권한을 가진 root이다.


관리자가 짱이다!!!


chown 사용자명 파일명

 


chgrp


그룹 변경


위의 사용자 변경과 똑같이 동작하지만 사용자 그룹에 적용된다는 것만 생각하면 된다


 


이 글은 스프링노트에서 작성되었습니다.


제어문 전자계산기

if


 


case


case 변수명


패턴1)


명령어


;;


패턴2)


명령어


;;


# default


*)


명령어


;;


esac


예) loop를 실행 시키고 종료 시키는 것



#! /usr/bin/ksh



case $1 in



        "start")

                ps -ef | grep jsp09 | grep loop | grep -v grep >/dev/null 2>&1

                if (( $? -eq 0 ))

                then

                        echo "loop is running"

                else

                        ~/loop &

                        echo "loop is starting....."

                fi

        ;;

        "stop")

                pid=`ps -ef | grep jsp09 |grep loop | grep -v grep | awk '{print $2}'`

                if [[ -n $pid ]]

                then

                        kill $pid

                        echo "loop is killed"

                else

                        echo "loop is not running"


   fi


;;


        *)

                echo "Usage : proc.sh [start|stop]"

        ;;

esac



수정 버젼



#! /usr/bin/ksh



case $1 in

        "start")

                if [[ ! -f ~/.loop ]]

                then

                        ~/loop &

                        touch ~/.loop

                        echo "loop is starting....."

                else

                        echo "loop is running"

                fi

        ;;

        "stop")

                if [[ -f ~/.loop ]]

                then

                        pid=`ps -ef | grep jsp09 |grep loop | grep -v grep | awk '{print $2}'`

                        kill $pid

                        rm -f ~/.loop

                        echo "loop is killed"

                else


                        echo "loop is not running"

                fi

        ;;

        *)

                echo "Usage : proc.sh [start|stop]"

        ;;

esac



 


 


명령어 '.'


갖다붙이기


음. 쉽게 야그 하면 쉘 스크립트가 원래 하부 쉘을 만드는데 그러지 않고


현재 쉘에서 실행하게 하는거.


 


for


정해진 횟수를 반복 할 때


for 변수명 in 값1 값2 .....


do


명령어


done


 


예)


#! /usr/bin/ksh



for user in `who | grep ^jsp | awk '{ print $1 } | sort |uniq'`

do

        write $user <memo



done



이름 바꾸기


big


#! /usr/bin/ksh



for o_name in `ls *.sh`

do

        n_name=`echo $o_name | tr '[a-z]' '[A-Z]'`

        mv $o_name $n_name

#       echo $n_name

done

small


#! /usr/bin/ksh



for o_name in `ls *.SH`

do

        n_name=`echo $o_name | tr '[A-Z]' '[a-z]'`

        mv $o_name $n_name

#       echo $n_name

done

while


while 조건문


do


명령어


done


예)



#! /usr/bin/ksh



num=1

while [ $num -le 5 ]

do

        echo $num

        let num=num+1

done


echo "while loop end"



 


사용자 모니터링 스크립트



#! /usr/bin/ksh

echo "who ?"

read user

who | grep $user > /dev/null 2>&1

while [ ! $? -eq 0 ]

do

        sleep 3

        who | grep $user > /dev/null 2>&1




#        who | grep $user > /dev/null 2>&1

#        sleep 3

#        로 할 경우 sleep 3이 정상 작동하므로 이 쉘 스크립트는 정상적으로 동작하지 않는다.

done

echo "$user is loggined, Now"



사용자가 로그인 하면 로그인 했다고 뜨고 종료 아니면 3초마다 계속 로그인 하는 체크 하는 플그램.


 


untill


while과 같은데 거짓이면 수행하는 것


until 조건문


do


명령어


done


 


trap


신호 변경


trap '수행할 명령' 신호


원상 복귀  trap 신호


예)


#! /usr/bin/ksh

trap 'echo "Control_C Pressed"' INT QUIT

i=0

while [ $i -lt 5 ]

do

        echo "loop"

        let i=i+1

        sleep 1

done

trap INT QUIT

while true

do

        echo "-> loop"

        sleep 2

done

select


무한히 반복하는 case라고 생각 하면 되겄다.


if


문법


if 조건문


then


 명령어 


else


명령어


fi


 


if  조건문


then


명령어


elif


명령어


else


fi


 


case


case $변수명 in


패턴1)


명령어


;;


패턴2)


명령어


;;


*)


명령어


;;


eacs


#! /usr/bin/ksh



case $1 in



        "start")

                ~/loop &

                echo "loop is starting....."

        ;;

        "stop")

                pid=`ps -ef | grep jsp09 |grep loop | grep -v grep | awk '{print $2}'`

                kill $pid

                echo "loop is killed"

        ;;

        *)

                echo "Usage : proc.sh [start|stop]"

        ;;

esac

이 글은 스프링노트에서 작성되었습니다.


시스템 정보 확인 전자계산기

uname


시스템 사양 확인




  • -a



    • 자세한옵션

    • unix 종류, 호스트 이름, 커널 버젼, 하드웨어 모델 번호, 라인센스




  • -r



    • 릴리즈 번호 출력




  • -s



    • 유닉스 종류 출력




 


who


로그인 되어 있는 사용자의 목록을 보여준다.




  • -r



    • 시스템의 동작 레벨을 출력




  • am i



    • 터미널 사용자의 이름을 보여줌.




id


사용자 확인


date


시간 확인


stty


터미널 설정 정보 확인




  • cs8



    • 캐릭터 사이즈 선택




  • istrip



    • strip  이라는데 대충 입력을 7비트로 제한 하는 머 그런거




한글이 안되면 위의 두가지를 확인해 보라


그런후 cs7 -> cs8 로  istrip -> -istrip


왜냐 하면 위 설정 대로면 한글은 8비트 넘어야 사용이 가능한데 막아 놓는 것이므로. 미쿡 넘들은 7비트면 모든 글자를 보낼수 있다. 초반에 다 정의 되어 있으니


 


echo 모드 끄면 입력하는게 안보인다. .


echo -> -echo


pwd


경로 출력


man


온라인 메뉴얼




  • 1



    • 일반 명령어




  • 2



    • 시스템 함수




  • 3



    • 라이브러리 함수




  • 4



    • 시스템 구성 파일의 형식




su


다른 아이디로 잠시 로그인.


관리자도 일반 아이디로 로그인 하고 꼭 관리자 작업 할때만 이것으로 잠시 로그인 하자.


 




  • 아무것도 안 붙였을때



    • 환경은 그대로 이용하고 싶을때 (경로, 환경변수)

    • id 만 변경




  • -



    • 일반적으로 로그인 할때와 같이 변경하는 사용자의 홈 디렉토리에 있는 환경파일을 수행하여 새로운 환경을 설정




  • -c



    • 다음에 지정하는 명령만 지정한 계정이 권한으로 수행




 


tar


파일 모으기




  • -cvf



    • 아카이브 파일을 생성




  • -tvf



    • 아카이브 파일 확인.




  • -xvf



    • 아카이브 된 파일에 포함되어 있는 파일들을 하드디스크로 복구




  • -rvf



    • 아카이브 파일에 다른 파일 추가

    • c




compress/uncopress


압축 및 복구


 


이 글은 스프링노트에서 작성되었습니다.


1 2 3 4 5 6 7 8 9