Linux

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

빼이 2020. 10. 19. 15:44
반응형

이전 연구를 통해 파일에서 입력을 리디렉션하고 출력을 파일로 리디렉션하는 방법을 이미 알고 있습니다. Shell에는 또한 두 개 이상의 명령 (프로그램 또는 프로세스)을 함께 연결하고 한 명령의 출력을 다음 명령의 입력으로 사용하는 기능이 있습니다.이 방식으로 연결된 두 개 이상의 명령은 파이프 문자.


Linux 파이프는 세로 막대를 | 사용하여 여러 명령 을 연결합니다.이를 파이프 문자 라고합니다 . Linux 파이프 라인의 특정 구문 형식은 다음과 같습니다.

  • 명령(command)1 | 명령(command)2 
  • 명령(command)1 | 명령(command)2 [| 명령 N ...]

두 명령 사이에 파이프가 설정 |되면 파이프 기호 왼쪽에있는 명령의 출력이 오른쪽에있는 명령의 입력이됩니다. 첫 번째 명령이 표준 출력에 쓰고 두 번째 명령이 표준 입력에서 읽는 한이 두 명령은 파이프를 형성 할 수 있습니다. 대부분의 Linux 명령은 파이프를 형성하는 데 사용할 수 있습니다.

  • 여기서는 명령(command)1이 올바른 출력을 가져야하고 명령(command)2는 명령(command)2의 출력 결과를 처리 할 수 ​​있어야하며 명령(command)2는 명령(command)1의 오류 메시지가 아닌 명령(command)1의 올바른 출력 결과 만 처리 할 수 ​​있다는 점에 유의해야합니다.

★ 파이프를 사용하는 이유는 무엇입니까?

먼저 mysqldump (데이터베이스 백업 프로그램)를 사용하여 wiki라는 데이터베이스를 백업하는 다음 명령 세트를 살펴 보겠습니다.

  • mysqldump -u root -p '123456'wiki> /tmp/wikidb.backup
  • gzip -9 /tmp/wikidb.backup
  • scp /tmp/wikidb.backup username @ remote_ip : / backup / mysql /

위의 명령 그룹은 주로 다음 작업을 수행합니다.

  • mysqldump 명령은 wike라는 데이터베이스를 /tmp/wikidb.backup 파일에 백업하는 데 사용됩니다. -u및 -p옵션은 각각 데이터베이스의 사용자 이름과 암호를 나타냅니다.
  • gzip 명령은 디스크 공간을 절약하기 위해 더 큰 데이터베이스 파일을 압축하는 데 사용됩니다. 그중 -9에서 가장 느린 압축 속도가 최고의 압축 효과입니다.
  • scp 명령 (보안 복사)은 데이터베이스 백업 파일을 IP 주소가 remote_ip 인 백업 서버의 / backup / mysql / 디렉토리에 복사하는 데 사용됩니다. 그중에 username는 원격 서버에 로그인하기위한 사용자 이름이 있으며 명령 실행 후 암호가 필요합니다.

위의 세 명령은 순서대로 실행됩니다. 그러나 파이프를 사용하는 경우 mysqldump, gzip 및 ssh 명령을 연결하여 임시 파일 /tmp/wikidb.backup을 생성하지 않도록 할 수 있으며 이러한 명령을 동시에 실행하여 동일한 효과를 얻을 수 있습니다.


파이프 라인 사용 후 명령은 다음과 같습니다.

  • mysqldump -u root -p '123456'wiki | gzip -9 | ssh username @ remote_ip "cat> /backup/wikidb.gz"

파이프를 사용하는 이러한 명령에는 다음과 같은 특성이 있습니다.

  • 명령 구문은 간결하고 사용하기 쉽습니다.
  • 파이프 라인을 사용하여 3 개의 명령이 직렬로 연결되어 원격 mysql 백업의 복잡한 작업을 완료합니다.
  • 파이프 라인에서 출력되는 표준 오류는 함께 혼합됩니다.


★ 리디렉션과 파이프 라인의 차이점

언뜻보기에 파이프 라인은 데이터 입력과 출력의 방향을 바꾸는 리디렉션의 역할도 가지고 있습니다. 그렇다면 파이프 라인과 리디렉션의 차이점은 무엇일까요?


간단히 말해서 리디렉션 연산자>는 명령을 파일에 연결하고 파일을 사용하여 명령의 출력을 수신합니다. 파이프 기호 |는 명령과 명령을 연결하고 두 번째 명령은 첫 번째 명령의 출력을 수신하는 데 사용됩니다. 다음과 같이 :

  • 명령> 파일
  • command1 | command1

일부 독자는 파이프 라인을 학습 할 때 다음 명령을 시도합니다. 어떻게되는지 살펴 보겠습니다.

  • 명령 1> 명령 2

대답은 때때로 시도의 결과가 끔찍할 것이라는 것입니다. 이것은 실용적인 예입니다. Linux 시스템 관리자는 수퍼 유저 (루트 사용자)로 다음 명령을 실행합니다.

  • cd / usr / bin
  • ls> 더 적게

첫 번째 명령은 현재 디렉터리를 대부분의 프로그램이 저장된 디렉터리로 전환하고 두 번째 명령은 ls 명령의 출력으로 파일을 적게 다시 쓰도록 셸에 지시합니다. / usr / bin 디렉토리에 less (less 프로그램)라는 파일이 이미 포함되어 있기 때문에 두 번째 명령은 less 프로그램을 ls로 출력 된 텍스트로 다시 작성하여 파일 시스템에서 less 프로그램을 파괴합니다.


이것은 리디렉션 연산자를 사용하여 파일을 잘못 다시 작성하는 방법에 대한 교훈이므로 사용할 때주의하십시오.

반응형