개요
어떤 디렉터리에 저장된 파일 목록을 확인할 때는 ls -al 등의 명령을 사용한다.
이 결과를 파일로 저장하고 싶을 때는 파일 리다이렉션을 사용한다.
COMMAND > FILE
# 예시
ll /var/ > tee ll_var_20230813.txt
이 경우 표준 출력을 파일로 리다이렉션 했기 때문에 터미널로 실행 결과를 확인할 수 없다. 실행 결과를 확인하기 위해서는 저장한 파일을 읽어야 한다.
만약 어떤 명령어의 실행 결과를 터미널로 확인하면서 파일로 저장하고 싶다면 tee 명령을 사용할 수 있다.
tee
표준 입력을 읽어 표준 출력과 파일에 쓰는 명령어
tee [OPTION]... [FILE]...
보통 어떤 명령어와 tee 명령어를 파이프로 연결하여 명령어의 실행 결과를 특정 파일에 기록함과 동시에 터미널을 통해 확인하고 싶을 때 사용하는 것 같다.
COMMAND | tee FILE
# 예시
ll /var/ | tee ll_var_20230813_2.txt
ll 실행 결과를 터미널로 확인할 수 있고, 그 내용이 파일로 저장된 것을 확인할 수 있다.
만약 결과를 파일에 누적하고 싶다면 -a 옵션을 주어 사용한다.
COMMAND | tee -a FILE
# -a, --append :
# 예시
ll /var/ | tee -a ll_var_20230813_2.txt
만약 명령어 실행 결과를 한 번에 여러 파일로 저장하고 싶다면, 파일을 공백으로 구분하여 나열한다.
COMMAND | tee FILE FILE...
활용 예시
다음과 같이 sudo 권한을 부여받은 일반 사용자가 있다고 하자. 확인해 보니 이 사용자에게는 crontab 사용이 허용되지 않은 상태다.
sudo echo 'splunk' > /etc/cron.allow
sudo 권한으로 /etc/cron.allow에 계정명을 추가하여 crontab 사용 권한을 획득하려고 했으나, 권한이 없다는 메시지와 함께 권한 획득에 실패했다.
쉘에서 출력을 리다이렉션 하는 경우 sudo를 사용해도 일반 사용자로 전환되기 때문에 root가 소유자인 파일에 쓰는 경우에는 제대로 동작하지 않을 수 있다. 이런 경우, tee 명령어를 사용하면 정상적으로 sudo 권한을 이용해 root가 소유자인 파일에 내용을 쓸 수 있다.
echo 'splunk' | sudo tee -a /etc/cron.allow
이제 crontab 편집을 시도하면 crontab 사용 권한이 부여된 것을 확인할 수 있다.
참고 문서
https://phoenixnap.com/kb/linux-tee
https://www.lesstif.com/lpt/linux-tee-89556049.html