Linux

Linux Shell 파이프 라인에 대한 자세한 설명 - 2장

빼이 2020. 10. 20. 10:40
반응형

★ 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  



반응형