파이프 및 티
100%

Text-Fu · 레슨 4

파이프 및 티

파이프라인이 명령어를 연결하는 방식과 tee가 스트림을 저장하면서 다음 단계로 보내는 방법을 배웁니다.

파이프라인은 작은 명령어들을 연결해 중간 파일 없이 데이터가 흐르게 합니다. tee 명령어는 이 흐름의 일부를 파일에 복사하면서 계속 다음 단계로 보낼 수 있습니다.

|로 명령어 연결하기

많은 출력을 생성하는 명령어로 시작해 보겠습니다.

$ ls -la /etc

항목 목록이 화면에 다 들어오지 않아 읽기 어려울 수 있습니다. 이 출력을 파일로 리디렉션할 수도 있지만, 더 효율적인 방법은 less와 같은 다른 명령어로 직접 보내 쉽게 보는 것입니다.

$ ls -la /etc | less

파이프 연산자 |는 왼쪽 명령어의 stdout을 오른쪽 명령어의 stdin에 연결합니다. 쉘은 파이프라인 명령어들을 시작하고 스트림 연결을 구성합니다. 명령어는 동시에 작동할 수 있어 ls가 전체 목록을 만들기 전에 less가 읽기 시작할 수 있습니다.

ls -la /etc | less에서 |는 기본적으로 어떤 스트림을 연결하나요?

stderr를 분리해 두기

일반 |는 stdout만 전달합니다. 왼쪽 명령어의 stderr는 흔히 터미널인 기존 목적지를 유지합니다.

$ find /etc -name "*.conf" | less

일치 경로는 파이프로 가지만 권한 진단은 터미널에 직접 나타날 수 있습니다. 다르게 처리하려면 stderr를 별도로 리디렉션합니다.

$ find /etc -name "*.conf" 2> find-errors.log | less

find /etc -name "*.conf" | less에서 별도 리디렉션이 없을 때 find의 stderr는 보통 어디로 가나요?

tee로 스트림 복사하기

출력을 화면에 표시하는 동시에 파일에 저장하고 싶다면 어떨까요? 이때 tee 명령어가 사용됩니다. linux에서 pipe와 tee 명령어는 로깅 및 모니터링을 위한 고전적인 조합입니다.

$ ls | tee listing.txt

listing.txt가 목록을 받고 tee의 stdout은 터미널에 연결된 채로 남습니다. 기본적으로 tee>처럼 지정한 파일을 만들거나 잘라냅니다.

generate-report 출력을 표시하면서 같은 출력으로 report.txt를 교체하는 명령어는 무엇인가요?

파일을 교체하지 않고 추가하려면 -a를 사용합니다.

$ date | tee -a activity.log

현재 날짜를 표시하면서 activity.log에 추가하는 명령어는 무엇인가요?

중간 결과 저장하기

tee를 파이프라인 중간에 두면 중간 스트림을 저장하면서 처리를 계속할 수 있습니다.

$ ls -la /etc | tee etc-listing.txt | grep "conf"

이 명령어는 세 가지 작업을 수행합니다.

  1. /etc 디렉토리의 내용을 나열합니다.
  2. 해당 출력을 tee로 파이프하여 etc_listing.txt에 복사본을 저장하고 동시에 전달합니다.
  3. tee에서 나온 출력은 grep으로 파이프되어 "conf"를 포함하는 줄을 필터링합니다.

파일에는 grep이 필터링하기 전 데이터가 들어갑니다. 일치하는 줄만 저장하려면 teegrep 뒤에 둡니다.

produce | tee all.txt | grep error가 성공적으로 끝나면 all.txt에는 무엇이 들어 있나요?

파이프라인과 스트림 복사는 다음 실습에서 연습해 보세요.

  1. Linux 에서 입력 및 출력 리디렉션 - 연산자 (예: >, >>, 2>, 및 tee 명령어) 를 조작하여 명령어의 표준 출력 (stdout), 표준 오류 (stderr), 표준 입력 (stdin) 을 제어하여 데이터 흐름을 연습합니다.
  2. 시퀀스 제어 및 파이프라인 - 명령어 실행 시퀀스를 제어하고, 파이프라인을 활용하며, cut, grep, wc, sort, uniq와 같은 강력한 텍스트 처리 도구를 활용하는 방법을 배웁니다.
  3. 데이터 스트림 리디렉션 - 표준 입력, 출력 및 오류 스트림 조작, 출력 결합, /dev/null 활용을 포함하여 Linux 스트림 리디렉션 기술을 배웁니다.

레슨 완료

파이프 및 티 완료

이제 명령어를 연결하고 데이터 스트림의 원하는 지점을 보존할 수 있습니다.

  • 한 명령어의 stdout을 다른 명령어의 stdin으로 파이프할 수 있습니다.

  • 필요할 때 stderr를 별도로 리디렉션할 수 있습니다.

  • tee로 입력을 파일과 stdout에 함께 복사할 수 있습니다.

  • 파일을 교체하지 않고 tee -a로 추가할 수 있습니다.

  • 필터 앞이나 뒤에 tee를 의도적으로 배치할 수 있습니다.

학습 진행 상황 저장

무료 계정을 만들어 이 레슨을 저장하고 어떤 기기에서든 계속 학습하세요.

무료 계정 만들기
다음 수업
Text-Fu(으)로 돌아가기