표준 입력으로 받아서 표준 출력과 파일에 쓰는 명령어로 개인적으로는 shell 개발 시 log를 찍을 때 자주 사용합니다.
lsblk | tee my_devices.log
cat 명령어로 my_devices.log 파일을 출력해보면 터미널에서와 동일하게 저장되어 있는 걸 볼 수 있습니다.
tee 명령어는 기본적으로 파일을 덮어씌우는데 기존 내용은 유지하고 추가하고 싶다면 -a 옵션을 사용합니다.
lsblk | tee -a my_devices.log
화면에 출력하지 않고 파일로만 저장하고 싶을때는 출력을 /dev/null로 redirect 합니다.
lsblk | tee my_devices.log > /dev/null
root가 소유자인 파일에 sudo 명령어로 내용을 추가하려고 하면 permission denied에러가 나는 것을 볼 수 있다 sudo를 사용해도 일반 사용자로 전환이 되기 때문인데, tee는 sudo 사용 권한을 그대로 가져간다
sudo echo -e "10.0.20.4 psndata02" >> /etc/hosts # permission denied
echo -e "10.0.20.4 psndata02" | sudo tee -a /etc/hosts
vi 편집기로 read-only 메시지와 함께 override가 안될 경우에도 sudo 권한이 있다면 tee 명령어를 이용해서 변경 사항을 저장할 수 있습니다.
:w !sudo tee %