Linux 셸에서 파이프와 리디렉션을 사용한 적이 있다면 때때로 tee
도 사용해야 할 가능성이 있습니다. 유틸리티.
티는 무엇을 하나요?
다음과 같은 명령
ls
현재 디렉토리의 내용을 표시합니다. 즉, 이러한 내용을 일반적으로 사용자의 화면인 stdout(표준 출력), 더 정확하게는 가상 터미널 디스플레이에 표시합니다.
와 같은 명령
ls > file123
화면에 아무 것도 표시하지 않습니다. >
때문입니다. sign은 모든 출력을 stdout에 표시하는 대신 파일로 리디렉션합니다. file123은 이제 이전에 화면에 표시된 내용으로 채워집니다.
디렉토리의 내용을 화면에 표시하고 이것을 파일에 쓰려면 두 가지 명령을 사용합니다. tee
와 함께 이 두 가지를 동시에 할 수 있습니다.
ls | tee file123
유사한 명령을 두 번 실행할 수 있는데 왜 Tee를 사용합니까?
위의 예에서 ls
를 실행할 수 있다면 분명히 tee가 필요하지 않습니다. 정상적으로 실행한 다음 다시 실행하고 출력을 파일로 리디렉션합니다. 그러나 출력이 고유한 상황이 발생합니다. 문제 진단을 시도하는 시나리오를 상상해 보십시오. diagnose | tee error.log
. 발생하는 오류는 고유할 수 있습니다. 테스트할 때 무슨 일이 일어나는지 볼 수 있도록 화면에 표시하기를 원합니다. 그러나 이러한 오류를 파일에 저장하여 나중에 검토하거나 결과를 토론 포럼에 붙여넣고 이에 대해 질문할 수도 있습니다.
tee가 필요할 때 자주 발생하는 또 다른 상황은 다음과 같습니다. 루트 사용자만 읽거나 쓸 수 있는 위치에 명령의 출력을 쓰려고 합니다. 작동하지 않습니다.
/sbin/blkid > /root/somefile
그러면 "물론 sudo를 사용하세요!"라고 생각할 수 있습니다. 그리고 이것이 작동하지 않는다는 사실에 놀랄 것입니다.
sudo blkid > /root/somefile
sudo blkid
뒤에 있기 때문입니다. 실행해도 여전히 루트가 아닌 일반 사용자로 로그인되어 있습니다. 그리고 쉘(보통 bash)은 /root/somefile
에 쓰려고 합니다. 일반 사용자 자격 증명으로. 이 문제를 해결하려면 tee를 사용할 수 있습니다.
/sbin/blkid | sudo tee /root/somefile
텍스트 추가 및 오류 리디렉션
tee는 유용하지만 간단한 명령입니다. 기본 command | tee somefile
대부분의 경우 충분할 것입니다. 그러나 이러한 팁이 필요한 두 가지 시나리오가 발생할 수 있습니다.
가장 먼저 알아야 할 것은 tee는 기본적으로 항상 파일을 덮어씁니다. 달리면
ls | tee somefile
그리고
ls /tmp | tee somefile
두 번째 명령은 somefile의 내용을 덮어쓰고 마지막으로 실행된 명령의 내용만 볼 수 있습니다. 이 동작을 변경하려면 덮어쓰는 대신 tee가 텍스트를 추가하도록 할 수 있습니다. 그렇게 하려면 -a
를 사용하세요. 명령 스위치.
ls | tee -a somefile
두 번째로 알아야 할 것은 모든 출력이 동일하지는 않다는 것입니다. 오류 메시지는 다르게 처리되며 화면에는 표시되지만 표준 출력으로 간주되지 않으므로 티에 걸리지 않습니다. (표준 오류로 간주됩니다.) 다음은 grep에 대한 예입니다.
grep -r L2TP /etc | tee somefile
다음 이미지와 같이 표시됩니다.
권한 거부 메시지는 stderr에 기록됩니다. stdout에 쓰여진 유일한 것은 강조 표시된 텍스트입니다. 그렇기 때문에 "somefile"의 내용이 아래 이미지와 같은 내용임을 알 수 있습니다.
이 경우 grep을 사용하여 텍스트를 검색하는 경우 오류 메시지가 파일로 리디렉션되지 않는 것이 유용합니다. 그들은 파일을 불필요한 쓰레기로 채울 것입니다. 검색된 결과만 보고 싶습니다. 그러나 오류 메시지가 필요한 경우 2>&1
을 사용하세요. , stderr을 stdout으로 리디렉션합니다.
grep -r L2TP /etc 2>&1 | tee somefile
이 명령을 사용하면 이제 somefile에 오류 메시지도 포함되어 있음을 알 수 있습니다.
결론
바라건대, 이 튜토리얼은 tee 명령을 최대한 활용하는 데 필요한 모든 것을 다룹니다. 하지만 티가 막히는 상황이 발생하면 아래에 댓글을 남겨주시면 도와드리겠습니다.