OS/Linux

[Linux] 파이프(pipe)에 대한 이해

Peter Ahn 2018. 5. 15. 12:58
반응형

 

개요

 

안녕하세요 피터입니다.

오늘은 리눅스의 파이프(pipe)에 대해서 설명드리겠습니다.

 

파이프 재지향(redirection)과 더불어 리눅스의 명령어들을 훨씬 강력하게 무장시켜주는 역할을 하는 핵심 기능입니다. 

 

마치 그 자체로는 특별한 맛이 나지 않지만 단맛이나 짠맛 같은 다른 맛을 훨씬 강하게 만들어주는 조미료와 같다고 할까요?

 

 

재지향은 아래 글에서 자세히 보실 수 있습니다. 

[Linux] 재지향(Redirection)에 대한 이해

 

 

여러개의 명령어를 실행할 때 이전 명령어의 결과를 다음 명령어의 입력값으로 사용하고 싶을 때가 있습니다.

 

명령어입력 - 실행 - 결과 의 과정을 파이프 안에 흐르는 액체로 비유한다면

첫 번째 명령어 파이프의 결과를 화면으로 출력하는 대신 다른 명령어 파이프로 흘러가도록 연결한다고 생각하시면 됩니다.

 

 

4가지 shape 가 흐르는 명령어 파이프가 있다고 가정했을 때,

아래처럼 특정 shape 를 필터링 하는 명령어 파이프에 | 를 통해서 연결하면 화면에 출력되는 최종 결과는 필터링 파이프를 통과한 결과가 되는 거죠.

 

 

 

 

 

사용법

 

cat /etc/passwd | grep mail

 

/etc/passwd 파일에는 현재 시스템의 계정정보들이 들어있습니다.

cat 명령어에 의해 각 계정 정보가 라인별로 출력이 되는데요.

그 중에서 mail 이라는 문자열이 들어간 라인만 필터링해서 출력하고 싶을 때

파이프( | )를 사용하여 cat 명령어의 결과를 grep 명령어로 전달할 수 있습니다.

 

쉘 프롬프트(Shell prompt)에서 한번에 사용 가능한 파이프의 개수는 제한이 없습니다.

 

이전 명령어의 출력값을 필터링하거나 가공할 때 주로 사용하기 때문에 awk, cut, grep, more 등의 명령어들을 조합해서 많이 사용합니다.

 

예제

 

ex) test1.txt 파일에서 abc 라는 글자가 포함된 라인만 출력

[root@peterdev test]# cat test1.txt
abc
def
qwe
poi
abc
abcdef
abcd

[root@peterdev test]# cat test1.txt | grep abc
abc
abc
abcdef
abcd
[root@peterdev test]#

 

 

ex) 현재 디렉토리에서 c 라는 글자가 들어간 파일만 출력

[root@peterdev peter]# ls
language.bash  language.delphi   language.javascript
language.c     language.english  language.korean
language.cpp   language.java     language.python
[root@peterdev peter]# ls | grep c
language.c
language.cpp
language.javascript

 

ex) 현재 디렉토리에서 c 라는 글자가 들어간 파일 중 java 가 들어간 파일을 제외하고 출력

[root@peterdev peter]# ls | grep c | grep -v java
language.c
language.cpp
[root@peterdev peter]#

 

 

 

ex) /etc 디렉토리의 파일 목록을 한 화면씩 나누어서 출력

[root@peterdev peter]# ls -l /etc | more
total 1352
-rw-r--r--  1 root root       16 Jan  5 21:14 adjtime
-rw-r--r--  1 root root     1518 Jun  7  2013 aliases
-rw-r--r--  1 root root    12288 Jan  5 21:16 aliases.db
drwxr-xr-x  2 root root     4096 Apr 17 02:00 alternatives
-rw-------  1 root root      541 Aug  3  2017 anacrontab
-rw-r--r--  1 root root       55 Mar  1  2017 asound.conf
drwxr-xr-x  2 root root     4096 Jan  5 21:12 bash_completion.d
-rw-r--r--  1 root root     2853 Nov  5  2016 bashrc
drwxr-xr-x  2 root root     4096 Mar  7 13:27 binfmt.d
-rw-r--r--  1 root root       38 Aug 30  2017 centos-release
-rw-r--r--  1 root root       51 Aug 30  2017 centos-release-upstream
drwxr-xr-x  2 root root     4096 Aug  4  2017 chkconfig.d
-rw-r--r--  1 root root     1108 Jan 31  2017 chrony.conf
-rw-r-----  1 root chrony    481 Jan 31  2017 chrony.keys
drwxr-xr-x  2 root root     4096 Jan  5 21:11 cron.d
drwxr-xr-x  2 root root     4096 Jan  5 21:12 cron.daily
-rw-------  1 root root        0 Aug  3  2017 cron.deny
drwxr-xr-x  2 root root     4096 Jan  5 21:11 cron.hourly
drwxr-xr-x  2 root root     4096 Jun  9  2014 cron.monthly
-rw-r--r--  1 root root      451 Jun  9  2014 crontab
drwxr-xr-x  2 root root     4096 Jun  9  2014 cron.weekly
-rw-------  1 root root        0 Jan  5 21:10 crypttab
-rw-r--r--  1 root root     1620 Nov  5  2016 csh.cshrc
-rw-r--r--  1 root root      841 Jun  7  2013 csh.login
drwxr-xr-x  4 root root     4096 Jan  5 21:11 dbus-1
drwxr-xr-x  2 root root     4096 May 10 07:32 default
drwxr-xr-x  2 root root     4096 Apr 17 02:00 depmod.d
drwxr-x---  4 root root     4096 Mar 13 10:23 dhcp
-rw-r--r--  1 root root     5090 Nov  4  2016 DIR_COLORS
-rw-r--r--  1 root root     5725 Nov  4  2016 DIR_COLORS.256color
-rw-r--r--  1 root root     4669 Nov  4  2016 DIR_COLORS.lightbgcolor
-rw-r--r--  1 root root     1285 Jan  5 12:47 dracut.conf
drwxr-xr-x  2 root root     4096 Jan  5 12:47 dracut.conf.d
-rw-r--r--  1 root root      112 Mar 16  2017 e2fsck.conf
-rw-r--r--  1 root root        0 Nov  5  2016 environment
-rw-r--r--  1 root root     1317 Nov  5  2016 ethertypes
--More--

 

 

ex) 실행 중인 프로세스 목록에서 bash 프로세스 목록을 출력

[root@peterdev peter]# ps -ef | grep bash
root       929   472  0 Apr18 tty1     00:00:00 -bash
root     17937 17935  0 00:23 pts/0    00:00:00 -bash
root     18009 17937  0 00:57 pts/0    00:00:00 grep --color=auto bash
[root@peterdev peter]#



 

 

 

 

-Peter의 우아한 프로그래밍

 여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.

 

 

반응형