리눅스 셸(명령줄)에서 tee 명령은 애플리케이션의 출력을 분할하여 파일과 STDOUT(콘솔 또는 다른 애플리케이션) 양쪽으로 동시에 전송합니다. 이 글에서는 tee 명령의 사용법을 예제와 함께 자세히 살펴보겠습니다.
tee라는 이름은 배관에 사용되는 T자형 분기관(T-splitter)에서 유래했습니다. 하나의 수원에서 물을 두 방향으로 나누어 보내는 파이프를 떠올리면 명령의 역할을 쉽게 이해할 수 있습니다.
tee 명령 구문
tee는 단순한 목적과 간결한 구문을 가진 명령입니다:
tee OPTIONS FILE
참고할 점은 다음과 같습니다:
- OPTIONS: 아래 표에 정리된 옵션 목록입니다.
- FILE: 출력을 저장할 파일의 경로입니다.
- 입력은 반드시 파이프(|)나 리다이렉션을 통해 tee로 전달되어야 합니다. 그렇지 않으면 tee가 처리할 데이터가 없습니다.
- 표준 입력/출력 리다이렉션을 통해 수행하며, 구체적인 예제는 아래에서 확인할 수 있습니다.
- tee는 전달받은 데이터를 지정된 FILE과 STDOUT(표준 출력) 양쪽 모두로 내보냅니다.
- 기본적으로 콘솔에 출력되지만, 다른 애플리케이션으로 리다이렉트할 수도 있습니다.
주요 옵션
tee 명령에서 가장 많이 사용되는 옵션은 다음과 같습니다:
| 옵션 | 설명 |
|---|---|
| -a, --append | 지정한 파일을 덮어쓰지 않고 내용을 끝에 추가(append)합니다. |
| -i, --ignore-interrupts | 인터럽트 신호(Ctrl+C 등)를 무시합니다. |
오류 진단 방법을 포함한 더 많은 옵션이 필요하다면 아래 명령으로 사용자 매뉴얼을 확인할 수 있습니다:
man tee
tee 명령 예제
아래는 tee 명령을 활용하는 몇 가지 간단한 예제입니다. 모든 예제는 입력받은 텍스트를 그대로 출력하는 echo 명령을 사용합니다.
명령 출력을 새 파일에 보면서 저장하기
echo 명령의 출력이 tee로 파이프되어, 콘솔에 출력되는 동시에 파일에도 저장됩니다:
echo "hello!" | tee hello.txt
만약 hello.txt 파일이 이미 존재한다면 기존 내용은 덮어써집니다.
명령 출력을 기존 파일에 추가하면서 저장하기
위 예제와 동일하지만, 기존 파일을 덮어쓰지 않고 파일 끝에 내용을 추가합니다:
echo "hello again!" | tee -a hello.txt
여러 파일에 출력 저장하기
파일 경로를 공백으로 구분하여 여러 개를 한 번에 지정할 수 있습니다:
echo "hello several files!" | tee hello1.txt hello2.txt hello3.txt
tee 출력 리다이렉트/파이프하기
tee의 표준 출력 역시 파이프하거나 리다이렉트할 수 있습니다. 아래 예제는 echo의 출력을 hello.txt에 저장한 후, 콘솔로 출력하는 대신 grep 명령으로 전달합니다:
echo "hello!" | tee hello.txt | grep hello
예제를 위해 grep 명령(텍스트 검색 도구)은 tee의 출력에서 "hello"라는 단어를 찾는 역할만 수행합니다.
인터럽트 무시하기
인터럽트(예: Ctrl+C로 명령 강제 종료)를 무시하면 tee가 더 깔끔한 출력을 생성할 수 있습니다:
echo "hello!" | tee -i hello.txt
sudo와 함께 tee 사용하기
sudo 명령은 root로 로그인하지 않고도 root 권한으로 명령을 실행할 수 있게 해주는, 매우 널리 쓰이는 도구입니다.
그러나 아래 코드처럼 sudo는 명령의 출력 리다이렉션에는 적용되지 않습니다. sudo가 리다이렉션 기호(>)보다 앞에 위치하기 때문에, 리다이렉션 자체는 sudo의 권한으로 실행되지 않습니다:
sudo echo "hello!" > /root/hello.txt
이 명령은 권한 오류로 실패합니다. /root 디렉터리는 root 권한이 필요하지만, sudo는 echo 명령에만 권한을 부여하고 그 뒤에 오는 리다이렉션에는 적용되지 않기 때문입니다.
이 문제를 우회하는 대표적인 방법이 바로 tee 명령입니다:
echo "hello!" | sudo tee /root/hello.txt
이 명령이 정상 동작하는 이유는, echo의 출력이 tee로 전달되고, 이 tee는 sudo를 통해 관리자 권한으로 실행되기 때문입니다. 따라서 tee가 출력을 파일에 성공적으로 저장할 수 있습니다.