Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

리눅스 tee 명령어 완벽 가이드 – 셸 출력 분할 및 저장 방법 [예제 포함]

리눅스 셸(명령줄)에서 tee 명령은 애플리케이션의 출력을 분할하여 파일과 STDOUT(콘솔 또는 다른 애플리케이션) 양쪽으로 동시에 전송합니다. 이 글에서는 tee 명령의 사용법을 예제와 함께 자세히 살펴보겠습니다.

tee라는 이름은 배관에 사용되는 T자형 분기관(T-splitter)에서 유래했습니다. 하나의 수원에서 물을 두 방향으로 나누어 보내는 파이프를 떠올리면 명령의 역할을 쉽게 이해할 수 있습니다.

tee 명령 구문

tee는 단순한 목적과 간결한 구문을 가진 명령입니다:

tee OPTIONS FILE

참고할 점은 다음과 같습니다:

  • OPTIONS: 아래 표에 정리된 옵션 목록입니다.
  • FILE: 출력을 저장할 파일의 경로입니다.
  • 입력은 반드시 파이프(|)나 리다이렉션을 통해 tee로 전달되어야 합니다. 그렇지 않으면 tee가 처리할 데이터가 없습니다.
    • 표준 입력/출력 리다이렉션을 통해 수행하며, 구체적인 예제는 아래에서 확인할 수 있습니다.
  • tee는 전달받은 데이터를 지정된 FILESTDOUT(표준 출력) 양쪽 모두로 내보냅니다.
    • 기본적으로 콘솔에 출력되지만, 다른 애플리케이션으로 리다이렉트할 수도 있습니다.

주요 옵션

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 권한이 필요하지만, sudoecho 명령에만 권한을 부여하고 그 뒤에 오는 리다이렉션에는 적용되지 않기 때문입니다.

이 문제를 우회하는 대표적인 방법이 바로 tee 명령입니다:

echo "hello!" | sudo tee /root/hello.txt

이 명령이 정상 동작하는 이유는, echo의 출력이 tee로 전달되고, 이 teesudo를 통해 관리자 권한으로 실행되기 때문입니다. 따라서 tee가 출력을 파일에 성공적으로 저장할 수 있습니다.