
내가 익숙하지 않다고 생각하는 약 3가지 설명을 접한 후 tee
Linux 초보자를 대상으로 이 명령에 대한 간단하고 일반적이며 단계별 설명을 요청하겠습니다.
파이프를 통해, 명령의 표준 출력에서 또는 특정 파일을 직접 사용하여 이를 사용한다는 것을 이해하지만 명령이 실제로 이 콘텐츠에 대해 수행하는 작업과 유용할 때를 놓친 것 같습니다.
그래서 여기에는 명확하고 단계적인 방식으로 새로 온 사람들에게 제공되는 교훈적인 설명을 찾기 위해 제가 묻는 내용이 있습니다.
명령은 명령의 stdout 또는 파일 자체와 어떻게 작동합니까?
tee
표준 입력을 읽는다고 말하는 것이 일반적인 이유는 무엇입니까 ? 내 말은, 내가 그렇게 하면ls -l
구문tee
자체를 읽는 것이 아니라ls -l
세션에 인쇄된 stdout을 읽는다는 것입니다.
또한 원하시면 일상 업무에서 언제 tee
도움이 되는지에 대한 실제 사례를 공유해 주세요.
답변1
tee
내 시스템의 매뉴얼 에서 :
tee 유틸리티는 표준 입력을 표준 출력으로 복사하여 0개 이상의 파일에 복사본을 만듭니다. 출력은 버퍼링되지 않습니다.
따라서 표준 입력에서 읽고 이를 표준 출력에 복사하며, 동시에 스트림을 하나 또는 여러 파일로 복제합니다.
다음 파이프라인에서는 파이프라인의 첫 번째 명령 출력을 가져와 표준 출력(터미널)에 복사하는 동시에 파일 및 에도 tee
복사본을 만듭니다 .one
two
three
$ somecommand | tee one two three
tee
sudo
많은 용도가 있는데, 하나는 루트가 소유한 파일로 출력을 리디렉션하는 것과 함께 사용됩니다 .
$ somecommand | sudo tee /root/somefile >/dev/null
다음은~ 아니다리디렉션이 권한이 없는 사용자로 발생했기 때문에 작동했습니다( somecommand
원치 않는 루트로 실행될 수도 있음).
$ sudo somecommand >/root/somefile
한 번에 여러 파일에 고정된 행 집합을 추가하는 인위적인 예입니다(모든 사용자 ~/.profile
파일에, *
사용자 이름으로 확장되고 확장된 명령줄이 쉘이 처리하기에 너무 길어지지 않는다고 가정).
$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH
실제 사용 예는 다음과 같습니다 tee
.
time doas box-build.sh 2>&1 | tee build.out | grep '^=*>'
저는 OpenBSD 기본 시스템을 구축하고 있습니다. doas
~이다OpenBSD "동등한"sudo
그리고 box-build.sh
건물(본질적으로 cd /usr/src && make obj && make build
)을 수행하는 작은 쉘 스크립트입니다. 오류나 경고를 포함하여 전체 빌드 프로세스의 출력을 저장하고 싶지만 모든 것이 내 터미널에 쏟아지는 것을 원하지 않습니다. 이를 위해 나는 tee
모든 것을 저장 build.out
한 다음 grep
프로세스에서 우리가 터미널에 있는 위치에 대한 힌트만 얻는 데 사용합니다.
여기에서 태그가 붙은 다른 질문도 참조하세요.티꼬리표.