파이프 : GNU / Linux에서 파이프를 사용하기 위해 알아야 할 사항

파이프

우나 파이프 또는 핍e는 실제로 UNIX / Linux에서 사용할 수있는 파이프 라인이며 매우 실용적입니다. 그러나 파이프가 무엇인지 완전히 이해하려면 * nix 환경에서 3 개의 내장 데이터 스트림이 있음을 알아야합니다. 모르는 사람들에게는 데이터가 세 지점으로 또는 세 지점에서 이동할 수 있음을 의미합니다.

그럼 당신은 이것을 더 나은 방법으로 이해할 것입니다,하지만 지금 여러분에게 분명히하고 싶은 것은 파이프 라인을 통해 할 수있는 것은 이러한 지점 중 하나에서 다른 지점으로 채널을 보내는 것입니다. 이를 통해 프로그램이 다른 프로그램의 입력을 향해 던지는 출력 또는 결과를 사용할 수 있습니다. 나는 당신이 그것을 아주 잘 이해하는 데 도움이 될 몇 가지 실용적인 예를 들어 설명하려고 노력할 것입니다.

내가 말했던 그 요점 또는 데이터 스트림는 다음과 같습니다.

  • 표준: 0에 해당하며 표준 입력입니다. 일반적으로 * nix 시스템의 표준 데이터 입력은 키보드입니다. 즉, 입력 한 내용이 사용되는 정보가됩니다. 그녀는 / dev / stdin과 관련된 특별한 장치를 가지고 있습니다.
  • 표준 출력: 1로 식별되는 표준 출력입니다. 일반적으로 정보를 볼 수있는 컴퓨터의 모니터 또는 화면에 해당합니다. 예를 들어 ls 명령을 실행하면 내용 목록이 화면에 표시됩니다. 관련 장치는 / dev / stdout입니다.
  • 표준 오류: 2로 식별되며, 프로그램에서 오류가 발생한 경우 표준 오류 출력입니다. 관련 장치는 / dev / stderr입니다.

파이프 라인을 사용하면 한 명령의 표준 출력 또는 표준 출력을 다른 명령의 표준 입력으로 직접 전달할 수 있습니다.. 즉, 한 프로그램이 다른 프로그램을 피드하도록 할 수 있습니다. 키보드 입력 매개 변수를 사용하는 대신 파이프는 |

당신은 그것을 더 잘 이해할 것입니다. 디렉토리의 내용을 나열하고 싶지만 doc라는 단어와 일치하는 이름 만 보는 데 관심이 있다고 가정합니다. 따라서 파이프 라인을 사용하여 ls의 출력을 grep 필터의 입력으로 파이프하여 해당 패턴과 일치하는 항목 만 표시하도록 지시 할 수 있습니다.

ls -l | grep doc

따라서 모든 이름을 표시하는 대신 당신에게 정말로 관심이있는 것들. 파일 내용에 대해서도 똑같이 할 수 있습니다. 모두가 아닌 firefox라는 이름의 프로세스 정보 만보고 싶다고 가정 해보십시오.

ps aux | grep firefox

ps 프로그램의 모든 출력을 화면 (stdout)에 표시하는 대신 grep 필터의 입력을 향해 채널을 보내고이 경우에 파이어 폭스 패턴에 해당하는 것을 출력에만 표시합니다.

원하는 경우 사용할 수 있습니다 다양한 파이프 한 명령의 출력을 다른 두 번째 명령의 입력으로 가져오고 두 번째의 출력을 세 번째 명령의 입력으로 가져 오는 식입니다. 예를 들면 :

cat libro | grep love | more

보시다시피, 가능성은 많다, 당신이 상상할 수 있고 허용되는 모든 것. 파일의 첫 줄과 마지막 줄만 표시하고 목록에서 wc를 입력하는 줄을 세고 정렬 할 수도 있습니다.

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

다음과 함께 작업 할 수도 있습니다. 오류 | & 예를 들어 실패하면 스크립트의 출력에서 ​​alert라는 단어를 찾으십시오.

./miscript |& grep alerta 

마지막으로 파이프와 밀접하게 연결된 두 개의 명령이 있습니다. 티와 xargs 그리고 그것들의 가능성을 더욱 확장 할 수 있습니다. 티의 경우 이전 프로그램의 결과를 표준 출력에 표시하여 볼 수 있도록하고, 그 외에도 다른 파일로 파이프 할 수 있습니다. 예를 들어 디렉토리의 내용을 나열하고 ls -l의 출력을 지금보고 싶은 경우, 또한 파일 목록에 저장됩니다 .txt :

ls -l | tee listado.txt

티를 사용하지 않으면 콘솔에서 출력을 볼 수 없습니다 ...

Y xargs 어떤 경우에는 훨씬 더 흥미 롭습니다. 이 경우 파이프 라인을 통해 수신하는 표준 입력에서 명령을 빌드 할 수 있습니다. 즉, 이전 프로그램이 출력을 통해 시작하고 파이프 라인을 통해 xargs에 도달하여 다른 명령에 인수로 전달하는 모든 것을 캡처 할 수 있습니다.

아직도 이해가 안 되나요? 예제를 통해 훨씬 더 잘 볼 수 있습니다. 디렉토리, 디스크 또는 파티션에서 모든 지독한 thumb.db 파일을 제거한다고 상상해보십시오. 많은 경우 rm 명령으로 하나씩 수동으로 삭제하는 것이 불가능할 수 있습니다. 그러나 xargs를 사용하면 모든 것을 자동화 할 수 있습니다. 그리고 find를 사용하여 그것을 찾고 xargs의 입력을 통해 출력을 보낼 수 있으며 이것은 차례로 rm에 이름을 인수로 제공합니다. 따라서 찾은 모든 항목이 자동으로 삭제됩니다.

find ./ -name "thumbs.db" | xargs rm

예를 들어 find가 /home/name/thumbs.db, /media/test/thumbs.db 및 /tmp/thumbs.db를 찾습니다. 글쎄, xargs는 마치 그들이 인수 인 것처럼 rm에 그들을 전달할 것입니다. 즉, 마치 우리가 실행 한 것처럼 : rm /home/name/thumbs.db, 그다음 rm /media/test/thumbs.db, 그리고 rm /tmp/thumbs.db.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자: AB Internet Networks 2008 SL
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   호세

    훌륭합니다.이 정보는 Linux 사용자에게 매우 중요합니다.

  2.   다니엘

    Linux Command Line 책에서 I / O 리디렉션을 연구하고 있으므로 정말 좋은 기사입니다. 파이프 (Pipeline)와 세 가지 데이터 스트림에 대해 더 명확합니다. 기여에 감사드립니다. 인사말.

  3.   01101001b

    xargs를 사용한 예는 장갑처럼 나에게 적합했습니다. 정확히 오늘 저는 "부분적으로"보내야하는 다중 출구의 세부 사항을 다루고있었습니다. xargs는 pinturita를 걸었다.
    매우 감사합니다!