> 파일 및 디렉토리 관리 > tee

tee -a -i: 표준 입력 내용을 파일에 추가하고 인터럽트 무시

`tee` 명령어는 표준 입력을 읽어 표준 출력과 하나 이상의 파일에 동시에 쓰는 유틸리티입니다. 이 특정 조합(`-a -i`)은 파일에 내용을 덮어쓰는 대신 추가하며, 인터럽트 시그널(SIGINT, 일반적으로 Ctrl+C)을 무시하여 `tee` 프로세스가 중단되지 않도록 합니다. 이 기능은 장시간 실행되는 스크립트의 로그를 지속적으로 기록하거나, 중요한 출력을 보존해야 할 때 매우 유용합니다.

개요

`tee` 명령어는 파이프라인 중간에서 데이터를 가로채어 파일에 저장하면서 동시에 다음 명령어로 전달하는 역할을 합니다. `-a` 옵션은 기존 파일의 내용을 보존하고 새로운 내용을 파일 끝에 추가하며, `-i` 옵션은 `tee` 프로세스가 사용자 인터럽트에 의해 강제로 종료되는 것을 방지하여 안정적인 로깅을 가능하게 합니다.

주요 기능

이 조합의 주요 기능은 다음과 같습니다.

  • 표준 입력 내용을 표준 출력과 지정된 파일에 동시 기록
  • 파일 내용 덮어쓰기 대신 추가(-a 옵션)
  • 인터럽트 시그널(SIGINT) 무시(-i 옵션)
  • 장시간 실행되는 프로세스의 안정적인 로깅에 적합

주요 옵션

`tee` 명령어는 다양한 옵션을 제공하지만, 여기서는 `tee -a -i` 조합에 사용되는 핵심 옵션들을 설명합니다.

파일 출력 및 동작 제어

생성된 명령어:

명령어를 조합해 보세요.

설명:

`tee` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

`tee -a -i` 명령어를 활용한 실제 사용 예시입니다.

명령어 출력 로그 파일에 추가

ls -l | tee -a -i output.log

`ls -l` 명령어의 출력을 `output.log` 파일에 추가하면서 동시에 터미널에도 출력합니다. Ctrl+C를 눌러도 `tee`는 종료되지 않습니다.

스크립트 실행 결과 지속적으로 기록

while true; do echo "$(date): Running..."; sleep 1; done | tee -a -i script_log.txt

무한 루프 스크립트의 출력을 `script_log.txt` 파일에 계속 추가합니다. `-i` 옵션 덕분에 `tee`는 인터럽트 시그널에 영향을 받지 않습니다.

sudo 명령어의 출력 로깅

sudo sh -c 'apt update && apt upgrade -y | tee -a -i /var/log/apt_updates.log'

`sudo`로 실행되는 명령어의 출력을 파일에 기록할 때, `sudo` 자체의 출력이 아닌 실제 명령어의 출력을 `tee`로 받으려면 `sh -c`를 사용하는 것이 안전합니다.

팁 & 주의사항

`tee -a -i` 조합을 사용할 때 유용한 팁과 주의할 점입니다.

활용 팁

  • **백그라운드 작업 로깅**: 장시간 실행되는 백그라운드 프로세스의 출력을 파일에 기록할 때 `nohup command | tee -a -i logfile.log &`와 같이 사용하여 안정적인 로깅 환경을 구축할 수 있습니다.
  • **권한 문제 해결**: `sudo command | tee file`과 같이 사용하면 `tee`가 일반 사용자 권한으로 실행되어 파일 쓰기 권한 문제가 발생할 수 있습니다. 이 경우 `sudo sh -c 'command | tee -a -i file'` 또는 `command | sudo tee -a -i file`과 같이 `tee` 자체를 `sudo`로 실행해야 합니다.
  • **디버깅**: 복잡한 파이프라인에서 중간 단계의 출력을 확인하고 싶을 때 `command1 | tee -a -i debug.log | command2`와 같이 사용하여 디버깅에 활용할 수 있습니다.

주의사항

  • **파일 크기 관리**: `-a` 옵션으로 계속 파일에 추가하면 파일 크기가 무한정 커질 수 있습니다. 주기적으로 로그 파일을 백업하거나 로테이션하는 도구(예: `logrotate`)를 함께 사용하는 것을 고려해야 합니다.
  • **인터럽트 무시의 의미**: `-i` 옵션은 `tee` 프로세스 자체의 종료를 막는 것이지, `tee`로 파이프된 이전 명령어의 종료를 막는 것은 아닙니다. 이전 명령어가 인터럽트에 반응하여 종료되면 `tee`는 더 이상 입력을 받지 못하게 됩니다.

동일 카테고리 명령어