리눅스 명령어 tee 사용법 및 2가지 옵션

리눅스 명령어 tee는 출력 결과를 화면에 출력하면서 동시에 파일에 저장할 수 있는 유용한 도구입니다. 이 글에서는 tee 명령어의 사용법, 옵션, 그리고 활용 방법에 대해 알아보겠습니다.

리눅스 명령어 tee란?

tee 명령어는 기본적으로 파이프(|)와 함께 사용되며, 표준 출력(terminal)에 표시되는 결과를 파일에도 저장하는 역할을 합니다. 일반적으로 명령어의 출력은 한 곳으로만 흐르지만, tee를 사용하면 출력 결과를 두 개 이상의 곳으로 나눌 수 있습니다.

표준 출력과 표준 입력의 이해

리눅스 명령어를 잘 이해하려면 먼저 표준 출력(stdout)과 표준 입력(stdin)에 대한 개념을 알고 있어야 합니다. 표준 출력은 프로그램이 결과를 출력하는 기본 채널로, 주로 터미널에 표시됩니다. 표준 입력은 프로그램이 사용자로부터 데이터를 입력받는 채널입니다.

tee 명령어는 이 표준 출력을 중간에 가로채어 터미널과 파일 모두에 결과를 출력합니다. 이는 로그를 기록하거나 결과를 저장하면서 동시에 실시간으로 결과를 확인할 때 매우 유용합니다.

리눅스 명령어 tee를 사용해야 하는 경우

아래의 그림을 보면 ls -la 결과를 리다이렉션 연산자(>)를 사용해서 output_ls.txt 파일로 저장하는 경우 아무런 출력도 보여주지 않습니다. cat 명령어를 사용해서 파일 내용을 확인해야만 출력이 어떻게 된 것인지 알 수 있습니다. 파일로 저장을 하면서 동시에 출력 결과도 확인하고 싶다면, 바로 리눅스 명령어 tee가 필요한 시점입니다.

그림 1. 리눅스 명령어 tee를 사용하지 않고 리다이렉션(>) 연산자를 사용한 경우
그림 1. 리눅스 명령어 tee를 사용하지 않고 리다이렉션(>) 연산자를 사용한 경우

tee 명령어의 기본 사용법

tee 명령어의 기본적인 사용 방법은 다음과 같습니다.

<명령어> | tee <파일명>
ShellScript

이 명령어는 <명령어>의 결과를 터미널에 출력하면서 동시에 <파일명>에 저장합니다. 예를 들어 ls 명령어의 결과를 output.txt 파일에 저장하고 싶다면 다음과 같이 입력할 수 있습니다.

ls | tee output.txt
ShellScript

위 명령어를 실행하면, ls의 결과가 화면에 표시되면서 동시에 output.txt 파일에 저장됩니다. 이때 주의할 점은, 기존의 파일이 있을 경우 파일을 덮어쓴다는 점입니다. 아래와 같이 output.txt 파일에 출력 결과가 저장된 것을 확인할 수 있습니다.

그림 2. 리눅스 명령어 tee를 사용해서 화면에 출력도 하고 파일로 저장도 한 경우
그림 2. 리눅스 명령어 tee를 사용해서 화면에 출력도 하고 파일로 저장도 한 경우

명령어 실행 결과를 여러 파일에 저장

tee 명령어는 한 번에 여러 파일에 저장할 수 있습니다. 파일명을 쉼표로 구분하지 않고, 각각 명시해주면 됩니다.

<명령어> | tee <파일1> <파일2> <파일3>
ShellScript

예를 들어 uname -a 명령어의 결과를 output1.txtoutput2.txt에 동시에 저장하려면 다음과 같이 사용할 수 있습니다.

uname -a | tee output1.txt output2.txt
ShellScript

실행한 결과는 아래와 같습니다. output1.txt와 output2.txt 파일에 동일한 결과가 저장된 것을 확인할 수 있습니다.

그림 3. 리눅스 명령어 tee로 여러 파일에 출력 결과를 동시에 저장하기
그림 3. 리눅스 명령어 tee로 여러 파일에 출력 결과를 동시에 저장하기

주요 옵션

tee 명령어는 다양한 옵션을 제공하여 더 유용하게 사용할 수 있습니다. 그중 자주 사용하는 몇 가지 옵션을 살펴보겠습니다.

-a (append): 기존 파일에 내용을 추가

기본적으로 tee 명령어는 지정한 파일의 내용을 덮어씁니다. 하지만 -a 옵션을 사용하면 기존 파일의 내용 뒤에 새로운 출력을 추가할 수 있습니다.

<명령어> | tee -a <파일명>
ShellScript

예를 들어, df 명령어의 결과를 disk_usage.txt 파일에 추가하고 싶다면 다음과 같이 입력할 수 있습니다.

df | tee -a output.txt
ShellScript

이렇게 하면 기존의 output.txt 파일이 덮어쓰이지 않고, 새로운 출력이 파일 맨 뒤에 추가됩니다. 앞서 사용한 ls -la 명령어 실행 결과 뒤에 df 실행 결과가 붙어서 저장된 것을 볼 수 있습니다.

그림 4. 리눅스 명령어 tee -a 옵션을 사용해서 출력 결과를 파일 맨 뒤에 추가하기
그림 4. 리눅스 명령어 tee -a 옵션을 사용해서 출력 결과를 파일 맨 뒤에 추가하기

-i (ignore-interrupts): 중단 신호 무시

tee 명령어를 실행 중일 때 Ctrl + C 같은 인터럽트 신호를 무시하도록 할 수 있습니다. 이를 위해 -i 옵션을 사용합니다.

<명령어> | tee -i <파일명>
ShellScript

예를 들어, 긴 실행 시간이 필요한 명령어를 사용할 때 의도치 않은 키보드 신호로 중단되는 것을 방지하고 싶다면 이 옵션을 사용할 수 있습니다.

tee 명령어 활용 팁

tee 명령어는 다양한 상황에서 매우 유용하게 활용될 수 있습니다. 몇 가지 실용적인 활용 팁을 소개합니다.

명령어 실행 결과를 실시간으로 저장

tee 명령어를 사용하면, 명령어 실행 결과를 실시간으로 확인하면서도 저장할 수 있어 로그 파일을 관리하는 데 유용합니다. 예를 들어 시스템 로그를 실시간으로 모니터링하면서 저장하려면 다음과 같이 사용할 수 있습니다.

tail -f /var/log/syslog | tee syslog_backup.txt
ShellScript

이 명령어는 /var/log/syslog 로그 파일의 최신 변경 내용을 실시간으로 모니터링하면서 syslog_backup.txt에 저장합니다. 서버 관리나 시스템 모니터링 작업을 할 때 매우 유용합니다.

그림 5. 리눅스 명령어 tee로 syslog의 최신 변경 내용을 확인하면서 파일로 저장하기
그림 5. 리눅스 명령어 tee로 syslog의 최신 변경 내용을 확인하면서 파일로 저장하기

sudo 명령어와 함께 사용

sudo와 함께 사용할 경우, 출력 결과를 루트 권한으로 파일에 저장할 수 있습니다. 예를 들어, 시스템 설정을 확인하고 그 결과를 파일에 저장하고 싶을 때 sudo와 함께 tee를 사용하면 편리합니다.

ifconfig | sudo tee network_info.txt
ShellScript

이 명령어는 네트워크 설정 정보를 확인하고 그 결과를 network_info.txt에 저장합니다. 만약 다음과 같이 sudo를 제일 앞에 붙여서 실행하는 경우 sudo가 ifconfig에는 적용되고 tee에는 적용되지 않으므로, 주의해서 사용해야 합니다.

sudo ifconfig | tee network_info.txt
ShellScript

사용 시 주의사항

tee 명령어를 사용할 때 몇 가지 주의할 사항이 있습니다.

  1. 파일 덮어쓰기: 기본적으로 tee 명령어는 지정한 파일을 덮어씁니다. 만약 기존 파일을 덮어쓰지 않고 내용을 추가하고 싶다면 -a 옵션을 사용해야 합니다.
  2. 파일 권한: 출력 결과를 저장할 파일에 대한 쓰기 권한이 없을 경우 오류가 발생할 수 있습니다. 이럴 때는 sudo 명령어와 함께 사용하여 권한 문제를 해결할 수 있습니다.
  3. 성능 문제: 매우 많은 데이터를 출력하는 경우, tee 명령어를 사용하면 성능에 영향을 줄 수 있습니다. 특히, 대용량 로그 파일을 저장할 때는 주의해야 합니다.
  4. sudo 사용: sudo를 함께 사용하는 경우에 tee 앞에 작성해야지 tee로 저장하는 파일에 대한 퍼미션 문제를 해결할 수 있습니다. 명령줄 제일 앞에 sudo를 작성하면 해당 명령어에만 sudo가 적용됩니다.

정리

리눅스 tee 명령어는 표준 출력을 터미널에 표시하면서 동시에 파일에 저장할 수 있는 유용한 도구입니다. 기본적인 사용법은 간단하지만, -a 옵션을 활용해 파일에 내용을 추가하거나, 여러 파일에 동시에 저장하는 등 다양한 상황에서 효과적으로 사용할 수 있습니다. 또한 실시간 로그 모니터링이나 권한 관리에도 유용하게 사용할 수 있으니, 리눅스를 사용하면서 자주 활용해 보시기 바랍니다.

참고자료

관련 포스트

Leave a Comment