리눅스마스터1급 : 파이프라인(pipe line)
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,288 조회
- 0 추천
- 목록
본문
리눅스마스터1급 : 파이프라인(pipe line)
1) 개념 및 형식
쉘의 강력한 특징 중 하나가 파이프라인을 사용하는 것이다.
우선, 파이프는 한 명령의 출력을 다른 입력으로 보내는 툴이며, 파이프를 만드는 심볼은 |(Vertical bar)이다.
그리고 파이프라인이란 ‘|’ 문자로 구분된 한 개 이상의 명령이 연속되어 나오는 것을 말한다.
이러한 파이프라인의 명령의 형식은 다음과 같다.
|
|
|
| [ ! ] 명령 [ |명령2 ... ] |
|
|
|
|
명령의 표준 출력은 명령2의 표준 입력으로 연결된다.
이에 따른 파이프라인의 일반적인 형식은 다음과 같다.
command1의 결과 출력이 command2의 입력이 되며 또 command2의 결과가 command3의 표준 입력이 되고 3개뿐만 아니라 여러 개의 명령어가 가능하다.
|
|
|
| $ command1 | command2 | command3 |
|
|
|
|
그리고 파이프라인 연결은 명령에서 명시한 리다이렉션보다 먼저 수행된다.
예약어인 ‘!’ 가 파이프라인 앞에 나오면 파이프라인의 종료 상태 값을 마지막 명령의 종료 상태에 대한 논리적인 NOT으로 설정한다.
그렇지 않은 일반적인 경우에는 마지막 명령의 종료 상태 값이 파이프라인의 종료 상태 값으로 된다.
쉘은 값을 반환하기 전에 파이프라인에 연결되어 있는 모든 명령이 종료하기를 기다린다.
파이프라인의 각 명령은 개별적인 프로세스로 실행된다.
다시 말해 각자의 서브 쉘 안에서 실행되는 것이다.
그리고 쉘은 파이프라인의 각각의 작업을 연관시킨다.
2) 예제
다음 예는 우선 현재 시스템을 사용중인 사용자들을 찾고 그 다음으로 그것들을 정렬시켜서 출력하는 것이다.
이 과정은 내부적으로 처리되며, 결국 정렬된 사용자 목록만이 현재 사용자의 터미널 화면에 출력된다.
|
|
|
| $ who | sort |
|
|
|
|
다음의 예는 ls -al이라는 명령어를 사용하여 보여지는 파일이나 디렉토리들이 화면 전체를 넘어가는 경우 이를 메타 문자 ‘|’과 파일을 단말기의 화면에서 목록이 한 화면씩 쉽게 볼 수 있게 하는 명령어 more의 상관 관계를 보여주는 예이다
(다음 화면으로 넘어가려면 <스페이스 바> 버튼을 누르고 빠져나오려면 <q> 버튼을 누른다).
|
|
|
| $ ls -al | more 합계 9624 drwx--x--x 9 freekgb sulinux 4096 11월 12 03:35 . drwxr-xr-x 42 root root 4096 5월 23 2012 .. -rw------- 1 freekgb sulinux 126 10월 21 2010 .Xauthority -rw------- 1 freekgb sulinux 463 11월 11 01:42 .bash_history -rw-r--r-- 1 freekgb sulinux 24 10월 21 2010 .bash_logout -rw-r--r-- 1 freekgb sulinux 216 8월 10 15:54 .bash_profile -rw-r--r-- 1 freekgb sulinux 124 10월 21 2010 .bashrc -rw------- 1 freekgb sulinux 57 10월 21 2010 .cvspass -rw-r--r-- 1 freekgb sulinux 237 10월 21 2010 .emacs drwx------ 2 freekgb sulinux 4096 10월 20 2010 .gconf drwx------ 2 freekgb sulinux 4096 10월 20 2010 .gconfd -rw-r--r-- 1 freekgb sulinux 835 10월 21 2010 .grmail -rw------- 1 freekgb sulinux 35 10월 21 2010 .lesshst --More-- |
|
|
|
|
|
|
|
| 리스트(Lists) 리스트란 한 개 이상의 파이프라인이 ;, &, &&, || 연산자 중 하나에 의해 구분되고 ;, &, <개행문자> 중 하나로 끝나는 연속된 문자열을 말한다.
이 연산자들 중에서 && 와 ||는 같은 우선권을 가지고 있고, 그 다음으로 ; 와 & 가 같은 우선권을 가지고 있다.
명령이 제어 연산자인 & 로 끝나면 쉘은 그 명령을 서브쉘에서 백그라운드로 실행하며, 쉘이 명령의 종료를 기다리지 않으면 반환값은 0이다.
그리고 ;로 구분된 명령들은 순차적으로 실행되며, 쉘은 차례대로 각 명령이 종료하기를 기다린다.
반환 상태값은 마지막으로 실행한 명령의 종료 상태값을 따른다.
이에 대해, 제어 연산자 && 와 ||는 각각 AND 리스트와 OR 리스트를 나타낸다.
AND 리스트는 “명령1 && 명령2”와 같은 형태를 가지는데, 명령2는 명령1이 0이라는 종료 상태값을 반환할 때에만 실행된다.
그리고 OR 리스트는 “명령1 || 명령2”와 같은 형태를 가지는데, 명령2는 명령1의 종료 상태값이 0이 아닌 값일 때에만 실행된다.
AND와 OR 리스트의 반환 상태값은 리스트에서 마지막으로 실행된 명령의 종료 상태값을 따른다. |
|
|
|
|
관련자료
-
이전
-
다음