본문 바로가기

OS/linux&ubuntu

[linux] tee 명령어

반응형

tee

Developer(s) AT&T Bell Laboratories, Mike Parker, Richard Stallman, David MacKenzie, MicrowareJim HallJP SoftwareMicrosoft
Initial release June 1974; 47 years ago
Operating system UnixUnix-likePlan 9InfernoOS-9FreeDOSWindowsReactOSIBM i
Platform Cross-platform
Type Command

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

쉽게 말하면 화면에 출력되는것들을 파일에 같이 작성할 수 있다로 보면 될것 같습니다 (기본적으로..)

출처 : https://zetawiki.com/wiki/리눅스_tee,_화면과_파일에_동시_출력하기

사용법

  • 표준출력을 화면출력·파일기록
명령어 | tee 파일명
echo "hello world" | tee OUTFILE
  • 표준출력을 화면출력·파일기록 (단, 기존내용 유지하고 내용 추가)
명령어 | tee -a 파일명
echo "hello world" | tee -a OUTFILE
  • 출력+오류를 화면출력·파일기록 (오류메시지 포함하여 파일로 저장)
명령어 2>&1 | tee 파일명
echo "hello world" 2>&1 | tee OUTFILE
  • 표준출력 X 파일기록 only save

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

명령어 | tee -a 파일명 /dev/null
echo "hello world" | tee -a OUTFILE /dev/null

tee를 쓰는 이유

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

 

참조 사이트

[제타위키] 리눅스 tee, 화면과 파일에 동시 출력하기

https://www.lesstif.com/lpt/linux-tee-89556049.html (linux tee 명령어 사용법)

[위키피디아] Tee_(command)

 

 

 

 

 

반응형