★ Linux 파이프 라인 예
[예제 1] ls 명령의 출력을 grep 명령으로 보냅니다.
- [root] $ ls | grep log.txt
- log.txt
위의 명령은 현재 디렉토리에 log.txt 파일이 있는지 확인하는 것입니다.
명령 뒤에 옵션을 사용할 수 있습니다 (예 -al: 옵션 사용) .
- [root] $ ls -al | grep log.txt
- -rw-rw-r--. 1 backhyung backhyung 0 April 15 17:26 log.txt
| 위의 명령을 작성하는 것처럼 파이프 문자 와 양쪽 명령 사이에 공백이 없어도됩니다 ls -al|grep log.txt.하지만 | 코드의 가독성을 높이기 위해 파이프 문자 와 양쪽 명령 사이에 공백을 사용하는 것이 좋습니다 .
파이프 라인의 출력을 파일로 리디렉션 할 수도 있습니다. 예를 들어 위 파이프 라인 명령의 출력을 output.txt 파일로 보낼 수 있습니다.
- [root] $ ls -al | grep log.txt> output.txt
- [root] $ cat output.txt
- -rw-rw-r--. 1 backhyung backhyung 0 4 월 15 일 17 : 26 log.txt
[예제 2] cat 명령의 출력을 less 명령의 입력으로 파이프를 사용하여 cat 명령의 출력을 한 화면에 한 화면의 길이에 따라 표시 할 수있어 한 화면보다 긴 파일의 내용을 볼 때 매우 유용합니다.
- cat / var / log / message | less
[예제 3] 지정된 프로그램의 프로세스 실행 상태를 확인하고 출력을 파일로 리디렉션합니다.
- [root] $ ps aux | grep httpd> /tmp/ps.output
- [root] $ cat /tem/ps.output
- backhyung 4101 13776 0 10:11 pts / 3 00:00:00 grep httpd
- root 457810 Dec09? 00:00:00 / usr / sbin / httpd
- apache 19984 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
- apache 19985 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
- apache 19986 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
- apache 19987 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
- apache 19988 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
- apache 19989 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
- apache 19990 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
- apache 19991 4578 0 Dec29? 00:00:00 / usr / sbin / httpd
[예제 4] 현재 시스템에 로그인 한 사용자 정보를 사용자 이름별로 정렬하여 표시합니다.
- [root] $ who | sort
- backhyung : 0 2019-04-16 12:55 (: 0)
- backhyung pts / 0 2019-04-16 13:16 (: 0)
who 명령의 출력은 sort 명령의 입력으로 사용되므로 두 명령이 파이프를 통해 연결되면 로그인 한 사용자의 정보가 사용자 이름별로 정렬되어 표시됩니다.
[예제 5] 현재 시스템에 로그인 한 사용자 수를 센다.
- [root] $ who | wc -l
- 5
★ 배관 및 입력 리디렉션
입력 리디렉션 연산자 <는 파이프 라인에서 파일에서 입력을 가져 오는 데 사용할 수 있으며 구문은 다음과 유사합니다.
- command1 <input.txt | command2
- command1 <input.txt | command2 -option | command3
예를 들어 tr 명령을 사용하여 os.txt 파일에서 입력을 가져온 다음 출력을 sort 또는 uniq와 같은 명령으로 파이프합니다.
[root] $ cat os.txt redhat suse centos ubuntu solaris hp-ux fedora centos redhat hp-ux [root] $ tr a-z A-Z <os.txt | sort CENTOS CENTOS FEDORA HP-UX HP -UX REDHAT REDHAT SOLARIS SUSE UBUNTU [root] $ tr a-z A-Z <os.txt | sort | uniq CentOS FEDORA HP-UX REDHAT SOLARIS SUSE UBUNTU |
★ 배관 및 출력 리디렉션
리디렉션 연산자> 또는 >>를 사용하여 파이프 라인에서 마지막 명령의 표준 출력을 리디렉션 할 수도 있습니다. 구문은 다음과 같습니다.
command1 | command2 | ... | commandN> output.txt
command1 <input.txt | command2 | ... | commandN> output.txt
[예제 1] mount 명령을 사용하여 현재 마운트 된 파일 시스템의 정보를 표시하고 column 명령을 사용하여 열 출력을 형식화 한 후 출력 결과를 파일에 저장합니다.
[root] $ mount | column -t> mount.txt [root] $ cat mount.txt proc on / proc type proc (rw, nosuid, nodev, noexec, relatime) sysfs on / sys type sysfs (rw, nosuid, nodev, noexec, relatime, seclabel) devtmpfs on / dev type devtmpfs (rw, nosuid, seclabel, size = 496136k, nr_inodes = 124034, mode = 755) securityfs on / sys / kernel / security type securityfs (rw, nosuid, nodev, noexec, relatime) tmpfs on / dev / shm type tmpfs (rw, nosuid, nodev, seclabel) devpts on / dev / pts type devpts (rw, nosuid, noexec, relatime, seclabel, gid = 5 , mode = 620, ptmxmode = 000) tmpfs on / run type tmpfs (rw, nosuid, nodev, seclabel, mode = 755) tmpfs on / sys / fs / cgroup type tmpfs (rw, nosuid, nodev, noexec, seclabel, mode = 755) ##### 내용의 일부가 생략되었습니다. ##### |
[예 2] tr 명령을 사용하여 os.txt 파일의 내용을 대문자로 변환하고, sort 명령을 사용하여 내용을 정렬하고, uniq 명령을 사용하여 중복 행을 제거하고, 마지막으로 출력을 ox.txt.new 파일로 리디렉션합니다.
[root] $ cat os.txt redhat suse centos ubuntu solaris hp-ux fedora centos redhat hp-ux [root] $ tr az AZ <os.txt | sort | uniq> os.txt. new [root] $ cat os.txt.new CENTOS FEDORA HP-UX REDHAT SOLARIS SUSE UBUNTU |
'Linux' 카테고리의 다른 글
쉘 필터 - 2장 (0) | 2020.10.20 |
---|---|
쉘 필터 - 1장 (0) | 2020.10.20 |
Linux Shell 파이프 라인에 대한 자세한 설명 - 1장 (0) | 2020.10.19 |
Linux Shell 리디렉션 (입력 및 출력 리디렉션) - 3장 (0) | 2020.10.19 |
Linux Shell 리디렉션 (입력 및 출력 리디렉션) - 2장 (0) | 2020.10.19 |