/
linux tee 명령어 사용법

linux tee 명령어 사용법

개요

tee 는 표준 입력(standard input)에서 읽어서 표준 출력(standard output) 과 파일에 쓰는 명령어입니다.


다음 명령을 실행하면 OUTFILE 에 hello 라는 내용이 기록됩니다.

echo "hello" | tee OUTFILE


위 명령어를 활용하면 간단한 텍스트 파일 복사를 tee 를 이용해서 구현할 수 있으며 다음 명령어는 OUTFILENEWFILE 로 복사합니다

cat OUTFILE | tee NEWFILE


echo 사용시 shell 의 append 연산자인 >> 를 사용하려면 -a 나  --append 옵션을 사용하면 됩니다.

echo "hello" | tee -a OUTFILE


tee 는 표준 입력에서 읽은 내용을 표준 출력에도 쓰므로 화면에도 표준 입력에서 읽은 내용이 표시됩니다.

즉 다음 명령어를 실행하면 OUTFILE 과 터미널에 모두 "hello world" 가 표시됩니다.

echo "hello world" | tee OUTFILE

hello world


표준 출력에는 쓰지 않으려면 tee 의 맨 마지막에 널 디바이스인 /dev/null 을 연결해 주면 표준 출력 장치(예: 터미널)에는 표시 되지 않습니다.

echo "hello world" | tee -a OUTFILE /dev/null


왜 tee 를 써야 하는가?

tee 의 사용 설명을 읽어도 echo 나 cat 등에 IO redirection 연산자를 사용하면 될텐데 왜 tee 가 필요한지 궁금증이 생길 수 있습니다.


즉 다음과 같이 echo 로 써도 되는데 왜 tee 로 다시 한 번 받아야 하는지 궁금할텐대요.

file 에 append 하기 #1
echo "hello world" >> OUTFILE
file 에 append 하기 #2
echo "hello world" | tee -a OUTFILE


shell 에서 출력을 redirection 할 경우 sudo를 사용해도 일반 사용자로 전환 되므로 root 권한으로 파일에 쓰거나 내용 추가가 필요한 경우 제대로 동작하지 않습니다.

그래서 아래와 같이 root 소유인 파일에 sudo echo 를 실행하면 "permission denied" 에러가 나고 내용 추가에 실패합니다.

sudo echo "validate_password.policy=LOW" >> /etc/mysql/mysql.conf.d/mysqld.cnf 


이럴 경우 echo 를 받아서 sudo tee 를 하면 정상적으로 동작하며 tee 는 shell script 에서 root 권한으로 특정 파일을 쓰거나 append 할때 주로 활용합니다.

echo "validate_password.policy=LOW" | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf 

같이 보기

Ref

Related content

linux cat 명령어 사용법
linux cat 명령어 사용법
More like this
설정 파일 변경 사항을 반영하는 linux source 명령어 사용법
설정 파일 변경 사항을 반영하는 linux source 명령어 사용법
More like this
cat 명령을 대체하는 유용한 유틸리티 linux bat 사용법
cat 명령을 대체하는 유용한 유틸리티 linux bat 사용법
More like this
echo 명령어로 줄바꿈(개행) 문자 입력
echo 명령어로 줄바꿈(개행) 문자 입력
More like this
linux systemctl 명령으로 부팅 타겟(booting target) 지정하기
linux systemctl 명령으로 부팅 타겟(booting target) 지정하기
More like this
문자열을 출력하는 linux echo 명령어 사용법
문자열을 출력하는 linux echo 명령어 사용법
More like this