ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UNIX 명령어 모음.
    UNIX / LINUX 2010. 5. 3. 08:16

    o 제일 상위의 디렉토리를 root디렉토리 라고 한다.

                  (도스와는 반대로 디렉토리 구분은 "/"다)
    

    o 여기에서 home(고향)디렉토리 는 mntlee이다..

     ( 로그인 으로 처음 들어온 디렉토리 가 자신의 홈 디렉토리)
    


    ※ 기 본 명 령 어 ※


    • LS(list) : 디렉토리와 파일의 리스트를 보여줍니다.

    (OPTION)

     ls -al1 [path] file_name
    

    (유형)

     ls -l : 화일에 대한 세부적인 정보를 표시한다.(일자, 권한, 크기 등)
     ls -a : 은닉된 화일을 포함하여 화일 이름만 표시
     ls -1 : 화일이 생성된 순서대로 화일 이름을 표시
     ls -aC : a옵션의 기능과 함께 C옵션은 도스의 dir/w명령과 같이 한 줄에 
              여러 개의 정보를 보여줍니다.
     ls -R : R옵션은 서브디렉토리의 모든 파일들의 정보를 보여줍니다.
     ls-F: 파일의 특성을 출력( /디렉토리 *실행 화일) 
     ls-d: 디렉토리 명만 출력
     ls-c: 최근 변경한 시간 순서대로 출력
    
    • 바꿀 때
     pwd : 현제 작업 디렉토리 출력 명령어
     cd : 디렉토리 변경 명령어 (도스에서 같은 쓰임새이나 유닉스에서는 반드시 
         뒤에 한 칸 띄우고  대신에 '/'를 사용한다는 것입니다.) 
     alias dir ls -alF : 자주 쓰이는 명령어 ls를 다른 형태의 명령어 dir로 바꿀 때..
    
    • touch : 내용이 없는 빈 파일을 생성, 이미 생성된 파일의 수정 시간 갱신
     touch [option] [시간] [파일명]
    
    • cat : 파일을 작성하거나 파일의 내용을 간단하게 출력
     cat test1.c cat > test1.c
    
    • mkdir : 디렉토리 생성 명령어 (%mkdir [option] [directory name]
    • rmdir : 디렉토리 삭제 명령어
      - 옵션: rm -r test ; test의 하위디렉토리와 파일을 전부 삭제
      - 옵션: rm -i test ; 삭제 여부를 사용자에게 물어 본다
    
    • cp :시스템 내에 있는 특정 파일을 복사
      - mkdir temp :temp라는 디렉토리 생성 
      - cp sample test temp :temp라는 디렉토리 밑에 sample 과 test 라는 파일을 복사 
      - mkdir example 
      - cp -r temp example --temp라는 디렉토리 아래에 있는 모든 내용을 example
              디렉토리에 복사  
       % cp file.org file.cp
       % cp file.org ../doc ; doc이 디렉토리일 경우 ../doc 디렉토리에
             file.org 란 이름으로 복사된다.
       % cp file.org ../doc/file.cp ; ../doc 디렉토리에 file.cp 로 복사
     
    


      *방향단축키 : j ↓,  k ↑,  h ←,  l →.
                   gg 맨 위에, G 맨 밑에.
    
      *chmod : 파일 및 디렉토리에 이미 정해진 접근 허가 모드를 변경 
        - 사용 형식: %chmod [ugoa] [+-=] [rwx] [file name] 
        u: 파일 소유자, g: 그룹, o: 기타 사용자, a: 모든 사용자 
        +: 사용허가부여, -: 사용허가박탈, =: 허가 취소 
        r: 읽기 허가, w:쓰기 허가, x: 실행 허가 
      특정 사용자를 지정하지 않으면 모든 사용자를 의미한다.
      *remove 
       rm : 파일을 삭제합니다. 유닉스에서는 일단 삭제된 파일을 복구할 수 있는 방법이
            없으므로 항상 중요한 파일들은 예비용으로 복사를 해두거나 삭제를 할 때 주의  
            를 기울여야 합니다. 
       rm -i : 파일을 삭제하기 전에 사용자에게 삭제하려는 파일이 맞는지 확인하는 메시지
            를 화면에 출력해줍니다. 
       rm -r * : 현재의 디렉토리와 하위 디렉토리를 포함하여 모든 파일들을 삭제합니다. 
     
       *mv
         mv 는 화일의 위치를 옮기거나 이름을 바꾸는데 사용됩니다.
            ▷ 이름변경
       % mv old_name new_name
    

    ▷ 화일의 위치변경

       % mv file ../doc/new_file
           ▷모든 내용을 옮김
              % mv [directory1] [directory2] 
                    --directory1의 모든 내용을 directory2로 이동
       *more [file name] : 한 번에 한 화면씩 파일의 내용을 표준 출력
            -내용을 보지 않고 종료 시 q 나 Q 키를 누른다
    
       *표준 출력, 입력, 에러
               redirection
                    2  : 표준 에러 (모니터) : 2
                       : 표준 출력 (모니터) : 1       
                       : 표준 입력 (키보드) : 0
      
       *표준 : Standard (, touch같은 명령어 뒤에 붙여주기만 하면 도움말이 나온다.
    

    |more : 옵션으로 긴화면을 끊어서 보여준다. ex) cat --help |more 명령어cat의 도움말을 화면에 보여줄 수 있는 만큼에서 일시정지

                                          엔터 : 한줄씩               (..|more 붙여서 볼때)
                                      스페이스 : 한페이지씩           (..|more 붙여서 볼때)
                                             Q : 빠져 나오기          (..|more 붙여서 볼때)
    

    그밖에 명령어들

          who(w) :현재 같은 서버에 접속 하고 있는 사용자들을 나타냄
               ex)who |grep sw9621061
          wall   :현재 같은 서버에 접속 하고 있는 사용자들에게 전체 메세지
               ex)wall 하이님들아!!    (현재 우리개정에는 권한을 묶어놔서 않됌)
          talk   :채팅하는 명령어
               ex)talk sw9621061
          write  :개인메세지 
               ex)write sw9621061
          mesg   :자신에게 오는 메세지를 수신 허용또는 거부 할수 있게 하는 명령어
               ex)mesg n (또는 y(허용)를 사용할수 있다)
    
          또 어능정도 linux를 사용하다 보니 갑자기 먹통이 돼는 경우를 우리는 접할 수 있었을 것이다
          이것은 우리들이 우연또는 불행하게도 키를 잘못누를 경우인데
          Ctrl+q (일시중지)를 눌렀기 때문이다
          이명령어는 프로그램들이 너무빨리 실행됄때...그렇니깐 화면에 넘많은 글자가 지나갈때라던지..
          그럴때 일시 정지를 목적으로 있는 단축키이다
          이거 다시 푸는 거는 Ctrl+s (계속 진행)이다
    

    |(pipeline) 우리말론 '수도관'으로써

                pipeline 앞에 명령에 해당하는 표준 출력을
                pipeline 뒤의 명령에서 표준 입력으로 받아들이게 됀다
                쉽게말해 부가적으로 명령어들을 조합하여 쓰고자 할때 쓰인다.
    

    ex) ls -al | more more 와 같이 표준 입력을 기다리는 명령어 들이 있고

               파이프라인 뒤에 쓸수 있는 명령어를 filter라고 한다
    


    filter명령어에는 어떤 것이 있는지 알아보자. 1. 앞에서 자주 언급했던 more가 있다

         넘많이 쓰이는 것이라서 또 간 단히 설명 하겠다
              ex) cat /etc/passwd |more라고 치면 한화면이 출력되고 나서 일시 정지 한다
                  여기서 엔터를 치면 한줄씩 스페이스바를 치면 한화면씩 넘어간다
                  이렇게 볼 수 있도록 하는것이 바로 more이다
             물론 filter로 쓰이는 명령어들은 어떤 명령어 뒤에 |(pipeline)을 붙이고 
          쓰는 것 명심.
    

    2. grep 표준 출력중에서 어떠한 행만 출력할수 있도록 하는명령어이다

      ex) cat /etc/passwd |grep ^d     (맨앞이 d로 시작하는 행만을 출력하도록 한다)
      ex) cat /etc/passwd |grep d$     (맨뒤가 d로 끝나는 행만을 출력하도록 한다)                              
      ex)[sw@9621061ce2 html]$ cat /etc/passwd |grep sw9621061
                  sw9621061:x:7012:1996:박현우:/user/1996/sw9621061:/bin/bash
    

    [sw51063@ce2 html]$ (sw51063이란 word가 들어간 행만을 출력한다) 이정도 실행해보면 감이 올거라고 생각한다. 이부분을 설명하자면... 이런게 있다라고 하고 넘어가자.

                               sw9621061  로그인 개정
                               :x  페스워드 저장되는곳
                               :7012  id를 나타내며
                               :1996  group
                               :박현우  개인정보
                               :/user/1996/sw9621061  HOME 디렉토리
                               :/bin/bash  사용하고 있는 shell을 나타나고 있습니다
                                   shell이란 커널을 둘러싸고 있는 것임.
                                   bash <----현재우리초보들이 많이 쓰고 있는곳
                                   sh
                                   csh
                                   tcsh 등등등 많다고 함.
    

    3. awk 란 grep와는 반대로 열만을 골라 낸다.

           명령줄이 좀 길어 지므로 많은 연습이 필요 하다
               ex)[sw9621061@ce2 html]$ awk '{print $2 $4}'
                   i love linux very much
                   lovevery
                   i love   linux   very   much
                   lovevery
                   [sw9621061@ce2 html]
                   여기선 word사이의 공간을 기준으로 두번째와 네번째 단어를 찍어본것이다.
        |(pipeline)
             ex)
              ls -al|   <- 파이프라인의 앞 명령(표준출력)이 뒷명령인 표준입력으로 넘어간다.
              ls -al|grep some <-some으로 시작된 파일만 나온다.
    


    filter

     표준입력이 가능한 명령어, 즉 파이프라인 뒤에 쓸수 있는 것
            (grep, wc, more, less-vi에디터와 같이 이동이 가능하다)
    

    grep : 문자열의 행을 보여준다.

                       행단위로 검색(키보드로 데이터를 받을수 있다. 표준입력), 대표적인 필터 명령어
              ex) grep some(찾고자 문자열) ...(파일명)
                  grep 양창우 /etc/passwd  <- passwd란 파일에서 임지훈이란 이름이 들어간 행 찾기
                  ls -al|grep ^d <-앞이 d로 시작되는 열을 찾는다.
                         (단, 화면에 출력하는 것의 모든 것이기 때문에 속성의 제일 앞에  
                         있는 d가 나와 디렉토리 인 것이 모두 검색된다.)
    

    wc : 워드 카운트.

             ex) wc친 후
         I love unix 치고 ctrl-d를 치면
           1 3 12가 나온다..(각각의 뜻은 1줄에 3단어에 12자리다)
    

    who : 현재 접속되어 있는 사람이 모두 나온다. wall : 모두에게 메시지 보내기

    talk : 한사람과 대화 하다.. write : 한사람에게 메시지 보내기

    mesg : 메시지 수신 여부 보기 mesg no : 메시지를 수신 거부

    mesg yes : 메시지 수신 상태

    awk delimiter:space -F <- seperator를 바꾸어 주는 옵션

       예를 들면 -F:하면 딜리미터를 :로 잡음
    

    awk -F: '{print$2}'

     cat /etc/passwd|grep 1993|awk -F: '{print $1 $7}'
     패스워드 파일에 1993들어가는 행들에서 :로 구분해서 첫 번째와 일곱 번째의 것을 
     출력하라
    

    ctrl-d : 파일의 끝을 나타낸다.

    bash-2.04$ cat /etc/passwd|grep 박현우 sw9621061:x:7012:2001:양창우:/user/2001/ce62024:/bin/bash 계정:패스워드:유저ID:그룹:정보:홈디렉토리:셸


             test의 내용은
         aa
         aa
          bb
            bb
          bb
         aa
    
                uniq test 하면
         aa
          bb
             라고 나온다.  즉, 겹치는 것은 한 개만 출력된다.
    
       clear & ctrl-l : 화면정리
    

    man ls & ls --help & info ls : 정보보기

    stty all 터미널 세팅

           stty -a : 내용을 볼수 있다.
    

    head : 문서의 앞을 보는 명령어(다섯줄을 보여준다) ex) head /etc/passwd

    tail : 문서의 뒤(끝)을 보는 명령어(다섯줄을 보여준다) ex) tail /etc/passwd tail -f access_log &

    (엑세스 파일은 누가 어떻게 엑세스 했는지를 보여주는 파일이다.. -f 옵션은 변경사항이있을시 알려주는 옵션이다.)

    • /usr/local/apache/logs 안에 있다.

    find / -name httpd.conf : 파일을 찾는 명령어. (명령어) (해당디렉토리) (파일명으로 찾겠다) (해당파일명) 현재 디렉토리아래에서 Text.txt찾기 - find . -name text.txt 2> /dev/null

    lpr : 프린트 하는 명령어

    유닉스 기본명령어 끝


    유닉스 에디터 (Unix Editor)

          에디터 중에 중요한(그중많이쓰는) 두가지가 있다.
            Vi(편하고 빨라서 제일 많이 쓰는 에디터)
            emacs
    
           먼저 Vi에디터
                 사용법
                 Vi index.html
                 에디터 모드에서
    

    1. 이동(ESC키를 누르고 커멘드 모드에서)

             ***여기에 나오는 특수 문자들은 다른 명령어에서 비슷한뜻으로
                             응용돼므로 됄 수 있으면 많이 외우는게 좋다***
                   $ 줄의 제일 뒤로 이동
                   ^ 줄의 제일 앞으로 이동
               *  gg 제일 위로 이동
               *   G 제일 아래로 이동
             ***   j 아래로 이동
             ***   h 왼쪽으로 이동
             ***   k 위로 이동
             ***   l 오른쪽으로 이동
                   / 아래에 "/"가 나온다. 여기에 찾고자 하는 문자를 치면 바로 이동한다.
                   n 넥스트의 약자로 /로 찾은 문자의 다음을 찾는다.
                   w 워드의 약자로 한워드씩 뒤로 이동한다.
                   b 한워드씩 앞으로 이동
    

    2. 편집

             **   u  무조건 복구 에디터에 들어온 상태까지 누를때마다 계속 복구가 가능
             **   d  지우기 키(예를 들어 처음에서 d 후 G를 치면 다 지워진다)
                  dd 한줄 지우기
                  dw 한단어씩 지우기
                   x 커서의 문자만 지우기
                   X 백스페이스의 역할을 한다.
                   *이동키들과 병행하여 지울수 있다
                   현재 커서의 위치에서 추가 키 입력으로 앞 뒤로 지운다.
                   dgg 현재 줄을 포함한 앞의 내용을 모두지움
                   dG  현재 줄을 포함한 뒤의내용이 모두지워짐
                   dh (현재커서에 있는 한글자를 지우고 방향키 좌측이므로 좌측으로 이동 벡스페이스효과)
                   dl (현재커서에 있는 한글자를 지우고 방향키 우측이므로 우측으로 이동)
                   dj (방향키 위쪽이므로 현재줄과 윗줄을 지움)
                   dk (방향키 아래므로 현재줄과 아래줄을 지움)
    
                y(yank) 복사하기  
                   yy 한줄복사
                   yw 한워드 복사
                   3yy 3줄 복사
                p(paste) 붙혀넣기
                   p 다음줄에 붙혀 넣는다.
                   P 위에 붙혀 넣는다.
    
               c(change) 바꾸기 
                  (**이 기능들도 다른 이동키와 융합해서 쓸수 있다.**)
    

    3. 인서트 모드(Insert Mode)로 전환

               I 제일 앞에서 인서트
               i 그 자리에서 인서트
               a 다음 자리에서 인서트
               A 제일 뒤부터 인서트
               O 위에 줄에서
               o 밑에 줄에서
               ESC 커맨드 모드로 이동
    

    4. :(콜론) 모드로 전환

               커멘드 모드에서 :(콜론)을 치면 됀다
               :w  저장 하기
               :q  빠져 나오기
               :q! 무조건 빠져 나오기
               :wq 저장과 동시에 빠져 나오기
               : 1,$ s/h2/h1/g 여기서    1,$ ->처음부터 끝까지라는 포지션을 뜻한다
                     s ->는 sed(명령어 중 하나)의 약자라고 한다
                     /h2/h1/ ->h2를 h1으로 라는 뜻 
                     g ->맨뒤에 쓰여진 g는 전체를 다 바꾸어 준다.
                     이렇게 하지않으면 한줄에 고쳐야 될껏입니다.
                     여러개 있는 경우도 하나만 고치고 그다음줄로 넘어 가버린다
                     이밖에  c ->확인하고 바꾸어 준다.
    


    shell programming

                  -도스의 배치파일과 비슷한 성질을 가진다
                   먼저 test 파일을 만든다.. 
                   내용은.. #! /bin/sh ----> #  은 주석이라는 의미
                   #! 라는 것은 특별한 주석 /bin/sh - 본셸(기본셸) 
                   echo haha 
                   echo i love unix 
                   test라고 치면 
                   haha 
                   i love unix 라고 나온다. 
    

    1. 출력

       echo -옵션 
    
          -n : 줄 바꿈이 되지 않는다. 
                  ex) echo -n aa하면 aa라는 것이 프롬프트 앞에 앞에 나온다. 
                    echo haha 라고 치면 haha 라고 나온다. 
            echo i love unix 라고 치면 i love unix 라고 나온다. 
                    aa=love      aa는 변수로 사용된경우 (=과의 사이에 스페이스를 주면 안된다.) 
                    echo $aa 하면 love라고 나온다. $는뒤에 문자가 변수라는의미로 쓰였씀.
         " "  더블     : 그대로 출력한다.(아래와 차이점은 $변수는 치환해 준다.) 
         ' '  싱글     : 그대로 출력한다. 
         ` `  더블커터 : 명령어 출력값을 사용할수 있게 해준다
                   aa=pwd 일때 echo `$aa` 하면 
                   pwd한 명령어가 나온다. 즉, 현재 디렉토리가 나온다. 
                     변수 줄때 aa=`pwd` 해 놓으면 위와 같은 결과가 나온다. 
                   aa=`date` 해 놓으면 변수 aa에 날짜가 들어가 있다. 
                   \(백슬레쉬) : 따라 오는 한문자만 무효화 시킨다. 
                   $( ) : aa=$(pwd)는 aa=`pwd`와 같은 의미 
                  ex)
                   echo "$aa is beautiful" 하면 love is beautiful 이라 나온다. 
                   echo '$aa is beautiful' 하면 $aa is beautiful 라고 나온다. 
                   echo \$aa 하면 $aa 라고 나온다.
                             즉 메타문자를 무효화 한다.($를 일반 문자로 인식) 
                   echo \$$aa 하면 $love 라고 나온다. 
                   cat > \>ab 
                   i love unix 
                   하면 i love unix가 든 >ab 파일이 만들어 진다. 
                   cat > \-ab 
                   i love unix 
                   하면 i love unix가 든 -ab 파일이 만들어 진다. 
                   -ab는 -가 옵션이기 떄문에.. 안 지워진다. 
    
            지우는 법 
                   rm -f ./-ab (rm -f .//-ab 도 가능) : 현재 디렉토리의 -ab라고 지정한것임 
                   rm -- -ab : 이경우 --는 뒤의 -를 옵션이 아닌 것으로 인식하겠다라는 것. 
                   find . inum 202020(inode 번호) -exec rm { } \; : 가장 확실히 지우는 법, 의미를 inode 넘버를 찾아서 지운다. 
                   inode 넘버 확인법... ls -i 옵션을 준다. 
                   find . -name "*.c" -exec rm {} \; : 찾은 명령을 exec 뒤에 넣어서 지워준다. 
                   find . -name "*.c" -exec mv {} ~/test \; : c로 끝나는 모든 파일을 홈에 있는 test폴더 안에 넣어라. 
    

    2. 입력 read

                  read aa 하면 커서가 입력 대기를 하고 있다. 문장을 입력하고 엔터후 
                  ehco $aa 해 보면 변수($aa)에 들어있는 값이 출력된다. 
               ex) bash-2.04$ read aa
                  지금은 노트정리하면서 태스트중입니다
                  bash-2.04$ echo $aa
                  지금은 노트정리하면서 태스트중입니다
                  bash-2.04$_ 
    


         @@*. 링크 ln (link)
                  hard link (inode 번호를 공유한다.) 
              symbolic link 
    
              ln : 링크를 만들어 준다.
                   두가지 종류의 링크가 있다..(시험에 반드시 나온다.) 
              ln(link)은 두가지가 있다 하드링크와 심볼릭링크
              mkdit testdir
              ln -s testdir sdir <---심볼릭 링크로 가상 디렉토리를 만드는것이다.
              /user rk 100메가 인데 95메가가 남았을때
              다른 파티션의 빈공간을 가상 디렉토리로 가져올수 있다
              ln -s ss /user
              /user/lib/bin/실행파일 이디렉토리를 페스로 걸수 도 있지만
                           페스가 있는 곳으로 심볼릭 링크를 걸어주면 끝난다
              파일마다 exinode 번호를 가짐 
              hard link (inode 번호를 공유한다,다시말해 어떤 프로그램의 실행파일을 하나 더만든다는 개념이 좋을것같다.)
          방법 
              love라는 내용을 가진 test.txt
              ln test.txt t.txt 하면 t.txt라는 파일이 만들어 진다. t.txt 에도 love라는 내용을 가진다. 
                     이 경우 ls -al해 보면 inode(화일에 대한 정보)가 같다는 것을 알수 있다. 
              test.txt를 지우더라도 t.txt 의 내용은 남아 있다. 
    

    symbolic link의 옵션 -s

                 ln -s test.txt t.txt (ls -F 옵션으로 확인할수 있다. 뒤에 @붙은것이 심볼릭 링크 된것) 
                 하드 링크와 틀리게 data영역에 링크된 inode 번호를 가진다. 
                 test.txt를 지우면 t.txt 에 내용이 남아 있지 않다. 
     
                 이 경우 test.txt 파일의 내용을 babo로 해서 하면 
                 t.txt 내용을 보면 babo라고 나온다. 
    

    grep 의 옵션 (교과서 p287)

                 -i : grep -i love * - 대소문자 구분 없이 찾아 준다. 
                 -w : 단어만 
                 -l : 파일명만 
                 -v : 매치되지 않는 것만 보여 준다. 
    

    한가지 짚고 넘어가기 ln(link)은 두가지가 있다 하드링크와 심볼릭링크 mkdit testdir ln -s testdir sdir <---심볼릭 링크로 가상 디렉토리를 만드는것이다. /user rk 100메가 인데 95메가가 남았을때 다른 파티션의 빈공간을 가상 디렉토리로 가져올수 있다 ln -s ss /user /user/lib/bin/실행파일 이디렉토리를 페스로 걸수 도 있지만

                 페스가 있는 곳으로 심볼릭 링크를 걸어주면 끝난다
    

    process 관련 명령어 유닉스를 베우면서 오에스 관점에서 프로세서는 멀티 프로그래밍이란? multi programming 이란 메모리상에 프로그램이 많이 올라와있다 프로세서란 현재 실행중인 프로그램을 프로세서라 한다 유닉스에서 프로세서란 좀 다르다 메인메로리에 올라와 있는job이라 하는데 이job를 프로세서라 한다

    ps 하면 자신이 실행중인 프로세서를 보여준다

     PID TTY          TIME CMD
    

    6712 pts/3 00:00:00 bash 6736 pts/3 00:00:00 csh 10886 pts/3 00:00:00 ps

           psid(번호)  터미널번호    실행시간
    

    ps aux 현재 실행중인 프로세서를 다보여 준다.

         여기기까지 하고 프로그램을 하나 작성해본다
    

    [sw9621061@ce2 ~/sdir]$ vi hello.sh

    1. !/bin/sh

    while true ; do <---- 참인동안 반복하라(여기서 무한 반복)

         echo hello       <---- hello를 출력하라
         sleep 1          <---- 1초동안 잠들어라
    

    done

         라고 hello.sh파일을 만들어 본다
       
          Ctrl+C  <---강제 인터럽터 부작용이 있씀.
          Ctrl+Z  <---설명하기에 앞서
    

    foreground,background 를 알아야 한다

    foreground 앞에 나선다 ./hello.sh 라고 치고 엔터 치면 foreground로 실행된것이다 이job가 끝날때 까지 다른 작업을 못한다

    background 뒤에 ./hello.sh& 라고 치고 엔터 치면 background 로 실행돼는 것니다 이job이 실행중이라도 다른 작업을 할수 있다 멈출수 없을 것이다 이땐 fg %1 <---job중에 1번 을 foreground로 전환 하는 것이다

           tail -f /usr/local/apache/log/access.html& <----&를 붙였으므로 다른 작업을
                                                   하고 있는중에 변경사항(-f)을 출력 하게 됀다.
    

    Ctrl+Z은 프로그램을 잠시 멈추는 것이다. [sw9621061@ce2 ~/sdir]$ cat hello.sh

    1. !/bin/sh

    find / -name "*.html" >temp 2>/dev/null& html이란 파일을 /이하에서 찾는데 찾으면 temp에 넣고 에러가 있으면 null에 버린다 그리고 이것은 벡그라운드에 while true ; do

         echo hello
         sleep 1
    

    done [sw9621061@ce2 ~/sdir]$ ./hello.sh hello hello hello hello

      ---> [Ctrl]+[Z]
    

    Suspended [sw9621061@ce2 ~/sdir]$ job job: Command not found. [sw9621061@ce2 ~/sdir]$ jobs [1] + Suspended ./hello.sh [sw9621061@ce2 ~/sdir]$ ./hello.sh hello hello hello

      ---> [Ctrl]+[Z]
    

    Suspended [sw9621061@ce2 ~/sdir]$ jobs [1] - Suspended ./hello.sh [2] + Suspended ./hello.sh [sw9621061@ce2 ~/sdir]$

    kill %1 이라고 하면 job 1번을 죽이겠다라는 의미로서 [sw9621061@ce2 ~/sdir]$ kill %1 [1] Terminated ./hello.sh [sw9621061@ce2 ~/sdir]$ jobs [2] + Suspended ./hello.sh [sw9621061@ce2 ~/sdir]$

           [Ctrl]+[Z] 로 일시 정지중인 process를 완전 작업종료 시키는 것이다
           이정도면 foreground와 background를 이해했을 것이라고 생각하고
                          이부분은 중요한 부분이므로 개념을 잡아 놓을것 !!
           내나름 대로 생각해서 윈도우에 비유 하자면..
    

    foreground : 활성화 된 창에서 실행되는 것과 비슷한것같고 background : 비활성화 된 창에서 실행되는 프로세러 라고 생각하면 좋을것 같다 kill %job번호 를 했었다

    kill이란 process 를 죽이는 명령어 였다

    ./hello.sh& 실행시키고 ps 엔터 누르면 실행되고 있는 process를 볼수 있고 process의 넘버도 확인 할수 있다 그럼 kill -9 34531(PID) 해보면 process가 죽고 정지되는 걸 볼 수 있다 다른 터미널을 뛰운후 해도 가능 하다

    jobs 와 ps명령을 구분 하자면 메인 메로리에 올라와 있는걸 ps jobs란 지금 중단돼어 있는걸 job에 올려 놓는다

    프로 그램을 실행 시키면 ready상태 wait상태 run상태가 있다

           이 세가지 상태를 반복하면서 process가 작동됀다
    
           [Ctrl]+[Z]는 강제로 run상태에 있는 process를 wait 상태로 만들어 준다
    


     

      v align="left"> 
       계속 배우는 유닉스
      #!/bin/sh
    

    trap 'echo 박현우입니다' 15 while true ;do

      echo haha
      sleep 10
    

    done =>15번자리에 강태훈임다가 들어감

     kill로 정상종료 할때 정상종료가 안되고 약오르지롱이 나옴
    

    $i=1 $i=`expr $i + 1` (이때 `는 백코트) $echo $i 2 $cat >test.txt love $echo like >>test.txt love └─>추가라는 뜻 like ≪ here document $cat ≪E I ↘아무 문자나 와도 상관 없음 love unix E(종료됨)

    ex)폭탄메일 보내기 $vi a.b

    1. !/bin/sh

    i=i while [$i -le 10];do mail ce9621061 《EOF

      I love unix
      EOF
      i=`expr $i + 1`   (여기서`는 백코트)
    

    done

       보내는방법
    

    $sh -x a.b


    help 내부명령 man 외부명령

    ($help test|less ($man " if 명령 $if [ -f k.txt ];then ≡$if test -f k.txt;then >echo haha >else => k.txt라는 파일이 있으면 haha >echo hoho " " 없으면 hoho >fi <-- 종료

    파일인가 디렉토리인가 검사 $vi a

    1. !/bin/sh

    echo -n "enter name:" read name echo -n "second nane:" read nane if test $name = $nane;then echo "same same" else echo "no same same" fi 두 개의 파일이 같은가 검사 $vi b

    1. !/bin/sh

    echo -n "enter name:" read name echo -n "second name1:" read nane if test $name = $name1;then ≡ if [ $name = $name1];then echo "same same" else echo "no same same" fi

    for 명령 $for i in 1 2 3 ;do >echo $i >done 1 2 3

    1부터 10까지의 합 $vi c

    1. !/bin/sh

    s=0 for i in 1 2 3 4 5 6 7 8 9 10;do

           s=`expr $s + $i`
    

    done echo $s (문) 현재 디렉토리에 있는 파일명만을 출력하는 Shell Programming $vi d

    1. !/bin/sh

    for i in *;do if [ -f $i ];then echo $i is file name fi done

    $foo=test.c $echo $foo $bar =`basename $foo .c` $mv $foo ${bar}.cpp

    1. !/ban/sh

    for i in *.c;do

    tar 명령여러개의 파일을 하나로 혹은 그 반대로 만드는 명령(압축은 노) $mkdir tardir $cd tardir $touch a.c b.c c.c $tar cvf test.tar * =>하나로 묶을 때 $tar xvf test.tra =>풀 때

    gzip 명령(압축하기) $gzip test.tar =>test.tar.gz 가 만들어짐 압축풀기 ($gunzip ) test.tar.gz ($gzip -d ) " $tar xvf test.tar =>완전히 다 풀어짐

    한번에 압축풀고 tar도 풀어줌 $tar xvfz test.tar.gz ≡$gzip -dc test.tar.gz |tar xvf -

    $tar tvf test.tar =>tar에 무엇이 묶어졌는가 확인(압축 풀고나서)

    ftp 명령(다운받기) $ftp ftp.kornet.net ← ftp에 연결 :: Name( ):anonymous ←자신의 계정입력 Password:xxx@xxx ← 메일 주소를 적음

    $ncftp ftp.kornet.net =>anonymous 칠 필요 없음

     (바로 접속해서 사용할수 있음)
    

    ftp 도스로 접속하기 텔넷을 연결하여 ftp 210.99.62.4로 접속한다

    get 명령(가져오기) $get number4.tar.gz

    put 올리는것

    (bin : 윈도우 ⇔ 유닉스 실행파일, 그림파일 (asc : 윈도우 ⇔ 유닉스 텍스트파일

    (get : 파일을 다운 받을때 사용하는 명령어 (put : 파일을 업시킬때 사용하는 명령어

    (mget : 여러 파일을 다운 받을 때 (mput : 여러 파일을 업시킬때 ex)$mget test*

    압축하는 방법에도 여러 가지가 있음 gzip,compaess,zip

    $compress test.txt test.txtz =>z가 붙음

    $foo=test.c $echo ${foo%.c} =>뒤에서부터 뜀 test

      $echo ${foo#test} =>앞에서부터 뜀
    

    .c

    $for i in *.c;do >mv $i ${i%.c}.cpp >done 이러면 *.c라는 파일이 *.cpp 로뀜


    $1 , $2 …… $* , $@ => 전부출력 $# => 몇 뭉치인가 $$ $? => 바로전 명령의 종료값(0 : 참 그 외의 양수 : 거짓)

    $set I love unix $echo $1 I $echo $2 love $echo $# 3 $ echo $* =>전부출력 I love unix $ echo $@ =>전부출력 I love unix $shift $echo $1 love $exho $# 2 $echo $* love unix $echo $$ 26414 =>프라세서 아이디를 출력

    $vi e.sh

    1. !/bin/sh

    set `data` (여기서 `는 백코드) while [ $# -ne 0 ];do echo $1 shift done 같은결과가 나오는거 $vi e.sh

    1. !/bin/sh

    for i in `data`;do echo $i dne 출력 결과(data를 밑으로 나열하는 쉘 프로그램) $./e.sh The May 31 13:47:22 EDT 2001

    $vi f.sh

    1. !/bin/sh

    echo foo sleep 2 echo bar exit 0 출력 결과(foo를 찍고 2초 있다가 bar을 찍음) $./f.sh foo (2초 있다가) bar

    vi f.sh

    1. !/bin/sh

    trap `exit 5` 2 echo foo sleep 2 echo bar exit 0 => 실행중에 ctrl + c를 누르면 비정상 종료이무로 숫자5가 나옴

    vi g.sh

    1. !/bin/sh

    if who|grep aa;then echo yes else echo no fi =>aa라는 파일이 있으면 yes없으면 no가 나옴

    vi g.sh

    1. !/bin/sh

    who|grep sw;then if [ $? ] ;then echo yes else echo no fi 출력결과(sw로 시작하는 것이 있으면 그것이 나오고 yes 없으면 no만 나옴) $./g.sh sw9621061 pts/0 Jun 2 18:27 yes

    vi h.sh

    1. !/bin/sh

    echo $1 echo $2 출력결과 $./h.sh a b c a ↖↖↖ b $1 $2 $3

    vi log.sh

    1. !/bin/sh

    until who|grep $1 >/dev/null;do sleep 2 done echo $1 is logged... exit 0 출력결과 $./log.sh mntlee& =>백그라운드로 실행

      ↖다른사람 ID
    

    =>mutlee라는 ID가 로그인 되었다는 것을 확인

    export 환경파일 $foo=love $echo $foo love $bash => 자식쉘로 이동 $echo $foo 없음 $exit => 다시 아버지 쉘로 감

    $export

       └─〉전역변수하
     (환경변수)
    

    $export foo 하고나서 $bash 자식쉘로 가서 $echo $foo 하면 love가뜸 love

    .bash_profile(Dos의 Autoexec.bat와 비슷한 파일) $PS1=love love <-- 프람트가 love로 바뀜 $PS2=hehe > <-- hehe 로 바뀜

    $cp ~ggaibi/.bash_profile ~ <-- ggaibi라는 계정에서 .bash_profile를 가져옴 $cp ~ggaibi/.bashrc ~ <-- " " .bashre를 가져옴

    $vi .bash_profile

    1. .bash_profile
    2. Get the aliases and functions

    if [ -f ~/.bashrc ]; then

           . ~/.bashrc
    

    fi

    1. User specific environment and startup programs

    PATH=$PATH:$HOME/bin BASH_ENV=$HOME/.bashrc USERNAME=""

    export USERNAME BASH_ENV PATH

               ↙소문자 w 로 바꿈
    

    export PS1="[\u@\h \W]\$" ~ ~ ~ ".bash_profile" 16L, 256C 출력결과 $. .bash_profile [sw9621061@www ~] <-- 이렇게 나옴 [sw9621061@www ~]$cd /usr/local/bin

    'UNIX / LINUX' 카테고리의 다른 글

    UNIX / LINUX 명령어 팁  (0) 2010.05.03
    UNIX 에서 File을 찾는 여러가지 방법(.find)  (0) 2010.05.03
    UNIX / LINUX 유용한 명령어 모음.  (0) 2010.05.03
Designed by Tistory.