Computer >> 컴퓨터 >  >> 체계 >> Linux

Linux에서 Tee 명령을 사용하는 방법

Linux에서 Tee 명령을 사용하는 방법

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

다음 이미지와 같이 표시됩니다.

Linux에서 Tee 명령을 사용하는 방법

권한 거부 메시지는 stderr에 기록됩니다. stdout에 쓰여진 유일한 것은 강조 표시된 텍스트입니다. 그렇기 때문에 "somefile"의 내용이 아래 이미지와 같은 내용임을 알 수 있습니다.

Linux에서 Tee 명령을 사용하는 방법

이 경우 grep을 사용하여 텍스트를 검색하는 경우 오류 메시지가 파일로 리디렉션되지 않는 것이 유용합니다. 그들은 파일을 불필요한 쓰레기로 채울 것입니다. 검색된 결과만 보고 싶습니다. 그러나 오류 메시지가 필요한 경우 2>&1을 사용하세요. , stderr을 stdout으로 리디렉션합니다.

grep -r L2TP /etc 2>&1 | tee somefile

이 명령을 사용하면 이제 somefile에 오류 메시지도 포함되어 있음을 알 수 있습니다.

결론

바라건대, 이 튜토리얼은 tee 명령을 최대한 활용하는 데 필요한 모든 것을 다룹니다. 하지만 티가 막히는 상황이 발생하면 아래에 댓글을 남겨주시면 도와드리겠습니다.