리눅스 파이프라인 예제
마지막 예로, 파이프가 제공할 수 있는 강력한 힘과 유연성을 더 설명하기 위해 다음 에서는 세 개의 파이프를 사용하여 현재 디렉터리의 모든 파일의 내용을 검색하고 문자열 Linux를 포함하는 줄의 총 수를 표시합니다. 그러나 문자열 UNIX가 아님: 첫 번째 파이프는 텍스트를 검색하는 데 사용되는 grep 명령으로 cat의 출력을 보냅니다. Linux 인수는 문자열 Linux를 포함하는 줄만 반환하도록 grep에게 알려줍니다. 두 번째 파이프는 이러한 선을 grep의 다른 인스턴스로 전송하며, 이 경우 -v 옵션을 사용하여 UNIX 문자열을 포함하는 줄을 제거합니다. 마지막으로 세 번째 파이프는 이 출력을 wc -l로 전송하여 라인 수를 계산하고 결과를 디스플레이 화면에 기록합니다. 파이프라인은 프로그램 제어하에 만들 수 있습니다. 유닉스 파이프() 시스템 호출은 운영 체제에 새 익명 파이프 오브젝트를 생성하도록 요청합니다. 이렇게 하면 프로세스에서 열린 두 개의 새 파일 설명자(파이프의 읽기 전용 끝 및 쓰기 전용 끝)가 생성됩니다. 파이프 끝은 검색할 수 있는 기능이 없다는 점을 제외하고는 정상의 익명 파일 설명자처럼 보입니다. 대부분의 Unix와 같은 시스템에서는 파이프라인의 모든 프로세스가 동시에 시작되며 스트림이 적절하게 연결되고 스케줄러에서 컴퓨터에서 실행되는 다른 모든 프로세스와 함께 관리됩니다. 다른 파이프 구현과 별도로 유닉스 파이프를 설정하는 중요한 측면은 버퍼링의 개념입니다: 예를 들어 송신 프로그램은 초당 5000바이트를 생성할 수 있으며 수신 프로그램은 초당 100바이트만 허용할 수 있지만 데이터는 손실. 대신 송신 프로그램의 출력이 버퍼에 보관됩니다.
수신 프로그램이 데이터를 읽을 준비가 되면 파이프라인의 다음 프로그램이 버퍼에서 읽습니다. Linux에서 버퍼의 크기는 65,536바이트(64KiB)입니다. bfr라는 오픈 소스 타사 필터를 사용하여 필요한 경우 더 큰 버퍼를 제공할 수 있습니다. 파이프는 리눅스와 다른 유닉스와 같은 운영 체제에서 추가 처리를 위해 한 명령 / 프로그램 / 프로세스의 출력을 다른 명령 / 프로그램 / 프로세스로 전송하는 리디렉션 (다른 대상으로 표준 출력의 전송)의 한 형태이다. 유닉스/리눅스 시스템을 사용하면 명령의 stdout을 다른 명령의 stdin에 연결할 수 있습니다. 파이프 문자 `|`를 사용하여 그렇게 할 수 있습니다. 배관의 이점의 매우 간단한 예는 dmesg 명령에 의해 제공 됩니다., 리눅스 부팅 하는 동안 콘솔을 통해 스크롤 하는 시작 메시지를 반복 (즉, 모든 텍스트, 전체 화면 표시) 리눅스 부팅 (즉, 시작). dmesg 자체는 단일 화면에 맞게 출력의 너무 많은 라인을 생성; 따라서 출력은 고속으로 화면을 스크롤하며 메시지의 최종 화면만 쉽게 읽을 수 있습니다.