Linux에서 "tee" 명령은 무엇입니까?

Linux에서 "tee" 명령은 무엇입니까?

다음 명령을 해석하려고 합니다 tee.

cat colors.txt words.txt | tee colorsAndWords.txt | wc

다음 이해가 정확합니까?

  1. cat colors.txt words.txtcolors.txt: 이 명령은 파일의 내용을 연결하고 words.txt결합된 출력을 표준 출력(터미널)으로 보냅니다.

  2. | tee colorsAndWords.txt: ( |파이프) 표기법은 이전 명령의 출력을 가져와 명령의 입력으로 전달합니다 tee. tee표준 출력(일반적으로 터미널)에 데이터를 표시하고 파일에 쓰는 데 사용됩니다. 이 예에서는 연결된 출력을 colorsAndWords.txt.

  3. | wc:final은 | wccommand의 출력 tee과 연결 내용을 가져와서 command에 전달합니다 wc. wc입력으로 받은 텍스트의 줄, 단어 및 문자 수를 계산하는 데 사용됩니다.

답변1

당신의 이해는 정확합니다. 필요는 없습니다.옳은실용성 에 대해 tee. 그것은 사용됩니다데이터 흐름 복사, 여러분이 보여준 예는 파일에 복사본을 저장하는 동시에 파이프라인의 다음 단계로 전달하는 것입니다.

그것은기준유틸리티는 Linux뿐만 아니라 모든 Unix 시스템에서 동일하게 작동한다는 의미입니다. 표준 사양여기에서 발견, Linux 및 다른 곳에서 발견되는 구현은 이 설명을 따라야 합니다(그러나 새로운 명령줄 옵션과 같은 확장을 추가할 수 있음).

답변2

네, 맞습니다. tee수도관의 T 접합이나 이중 출력 헤드폰 잭 스플리터와 같습니다. 입력을 읽고 이를 두 개의 출력 파일(stdout 및 명령줄에 지정된 파일)에 복사합니다. (실제로 출력 파일 수에는 제한이 없습니다. 명령줄에서 여러 출력 파일을 지정할 수 있습니다. 이 답변의 나머지 부분에서는 인수가 하나인 간단한 경우를 가정합니다.)


아마도 이것은 작성 방법을 이해하는 데 도움이 될 것입니다 tee.
C에서 루프 본문은 다음과 같습니다.

ssize_t bytes_read = read(0 /*stdin*/, buf, 4096);
write(1 /*stdout*/,          buf, bytes_read);  // error checking not shown; also
write(cmdline_arg_output_fd, buf, bytes_read);  // loops to finish short writes

루프 조건은 while(bytes_read > 0)EOF(읽기 반환 0) 또는 오류(음수)를 포착하는 것과 유사하며 while( (bytes = read()) > 0 )표현식 내에서 할당 및 비교를 제어하는 ​​것과 유사할 수 있습니다. 반환값을 확인해야 하기 때문에앞으로쓰기 전화를 겁니다.

그 주기 전 fd = open(argv[1], O_WRONLY|O_CREAT, 0666);이든 뭐든.

흥미로운 용도는 foo | bar | tee /dev/tty | baz파이프라인의 해당 단계를 통과하는 데이터를 보기 위한 "디버그 인쇄"입니다. ( /dev/tty프로세스를 제어하기 위해 실제로 TTY를 제공하는 장치를 여는 것이 터미널입니다. /dev/pts/19Konsole 터미널 탭과 같습니다.)

다른 유용한 매개변수로는 사용 중인 일반 파일, 명명된 파이프 또는 >( grep ... > filtered.txt).

답변3

'|' 파이프 문자는 이 세 가지 프로그램(cat, tee 및 wc)이 매우 특정한 방식으로 실행되어야 한다는 쉘에 대한 명령입니다.

그들은 기본적으로 stdout(이 경우 cat 및 tee)이 터미널 자체가 아닌 다른 것으로 리디렉션된다는 사실을 인식하지 못합니다.

tee와 wc 프로그램의 표준 입력에서도 마찬가지입니다.

관련 정보