관리 메뉴

드럼치는 프로그래머

[Linux] Pipes(파이프) 명령 본문

★─Programing/☆─Linux

[Linux] Pipes(파이프) 명령

드럼치는한동이 2007. 8. 6. 17:38

Pipes 명령


 

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

Pipes(파이프)에 대해서 알아보자. 아래에서는 그냥 파이프라고 하겠다.
파이프는 유닉스 시스템의 융통성을 보여주는 명령으로
명령들을 서로 링크하는 기능이다.

그럼 시작해보자

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

1.파이프 라인을 사용하는 이유!

:: 하나의 Command 를 다른 Command의 입력이나 출력으로 지정할 수 있다.
    다시말해 여러명령을 하나의 Command라인에서 처리할 수있다.
    이것은 유닉스의 파워풀한 면을 보여주는 부분중 하나이다.
                        

2."|" Structure.

:: 파이프라인 기호 "|"의 왼쪽명령의 표준 출력(stdout)을 오른쪽 명령의
    표준 입력(stdin)으로 사용된다.

   [syntax]
               
    $ 명령어A | 명령어B | 명령어C
               
    :: 명령어A 의 표준출력(stdout)이 명령어 B에 표준입력(stdin)으로 되는 형식
       명령어 B는 표준입력을 받아 들일수 있는 명령어, 즉 필터(filter)이어야 한다.
       필터에는 grep,sort,cut 등등이 있다.

   [예제]
       
        $ who | tr -s " " |cut -f3 -d" "
        $ ps -ef | more
               

2.파이프라인의 리다이렉션
       
:: Command마다 3가지 가능한 스트림이 있다. 표준입력(stdin),표준출력(stdout)
    표준에러(stderr)이 있다. 이것은 각 명령의 어떠한 스트림을 확보한다.
    각각을 숫자로 표현하면 아래와 같다.
               
    stdin   =>        0
    stdout  =>        1
    stderr  =>        2
   
    대부분 파이프의 리다이렉션은 명령라인의 끝에서 출력방향을 다시 지정하여
    파이프 라인의 필터된 출력을 파일이나 화면상에 출력한다.
   
    [예제]
       
    $ grep user /etc/passwd  | sort  > sort.out
    :: /etc/passwd 파일중에서 user가 포함된 줄을 sort.out파일에 저장하라!
       이경우 화면상에는 출력되지 않는다.
                       
    $ grep user < /etc/passwd 2> grep.err |sort >sortd.users 2> sort.err
    :: 약간 난이도가 있다. grep할때 에러가 발생하면 grep.err파일로 저장하고
       sort한 경과를 sortd.users파일로 저장하는데 에러가 발생하면 sort.err파일로 저장한다.
       자세한 것은 각 명령어를 참고바란다.
      
       이제까지 필터에 해당하는 명령어를 두개 보았다. grep 과 sort가 바로 그것이다.
               
3. 파이프라인에서 함께 사용되는 몇가지 필터들

  :: cut,tr,tee,pr이 그것이다.
    위 4개의 필터에 대한 사용법을 여기서 소개하는것은 파이프라인에서 grep.sort와 같이 많이 사용되기 때문이다.
                       
    - cut 명령어 -
       
      :: stdin이 가능하다. 표준입력이나 어떤 파일로 부터 원하는 필드나 지정된 칸을 추출이 가능하다.
                       
    [Syntax]
                       
     cut -f(원하는 필드숫자) -d(필드구분자) 파일명
                        
    [option]
               
        -c ==> 왼쪽부터 지정된 칸을 추출한다.
        -f ==> 왼쪽부터 필드구분자로 구분된 공백이 아닌 필드를 추출한다.
        -s ==>필드 구분자가 매치되지 않을 경우 해당 필드를 출력하지 않는다.

    [예제]
               
        $ cut -f1 -d":" /etc/passwd
        :: /etc/passwd 파일에서 콜론(":")으로 구분된  첫번째 필드를 추출
               
        $ cut -f1,3,5 -d":" /etc/passwd
        :: /etc/passwd 파일에서 콜론으로 구분된 첫번째,세번째, 다섯번째 필드를 출력

        $ cut -c1-5 /etc/passwd
        :: /etc/passwd 파일에서 첫번째(공백도 포함된다.)문자부터 5번째 문자까지 추출

        $ date
        토 4월 6 23:35:52 KST 2002
        $ echo $(date) | cut -f3 -d" "
                       
    - tr 명령어 -
               
        :: 중복된 문자를 하나로 나타내어준다.
           대문자를 소문자로 소문자를 대문자로 변경하는것도 가능하다.
               
    [Syntax]
                       
        :: tr [-s]  string1 string2
               
    [예제]
               
        $ who | tr -s " "
                       
        $ date | cut -c1-3 | tr "[[:lower:]]" "[[:upper:]]"
        :: 세개의 문자를 모두 소문자를 대문자로 치환한다. lower와 upper 변경가능
                       
    - tee 명령어 -
       
        :: 파이프 라인의 중간 결과를 화면출력이나 원하는파일명으로 출력이 가능하다.
           중간 처리결과를 확인할 수 있고, 파일로도 출력할수 있다.
                       
    [Syntax]
                       
        tee -a file file
                       
    [예제]
                       
        $ who | tee who_tee | sort
        :: 현재 로그인한 사용자를 who_tee파일로 저정하고, 그리고 sort해서 화면출력
                       
    - pr 명령어 -                       
               
      :: 화면상에 원하는 포맷을 지정할수 있다.
               
    [Syntax]
               
        pr [-option] file명
               
    [예제]
               
        $ pr -n3 yunisj
        :: yunisj파일을 세개의 단으로 구분된 형식으로 출력
       
        $ grep home /etc/passwd | pr -h "pr head print part"
        :: grep된 결과의 화면출력시 타이틀을 붙여준다.
                       
    [option]
               
        -숫자 ==> 다단을출력한다. 왼쪽부터 아래로 그리고 오른쪽으로 출력
        -a                 ==> 다단출력, 위에서 왼쪽에서 오른쪽으로 그리고 다음줄로 출력
        -t                ==> 머릿말 꼬리말 삭제
        -h                ==> 타이틀출력
       
        ...이하생략
                       
   
    - lp 명령어 -                       
               
      :: 파이프라인을 통한 결과물을 프린팅한다.흔히 명령의 맨 마지막에 주로 사용
               
    [예제]
                       
    $ ls-F $HOME | pr -3 | tee home_files | lp
Comments