Linux에서 콘솔 Log를 저장할때 사용하는 Redirect, Tee에 대하여

|

Redirect와 Pipe의 차이는 무엇일까?

  • Redirect : 프로그램의 결과나 출력을 파일이나 스트림으로 전달함
  • Pipe : 프로세스 혹은 실행된 프로그램의 결과를 프로그램으로 넘겨줌

Redirect, Pipe는 IPC(Interprocess Communication) 에 속함

콘솔에서는 보이지 않지만 파일에 저장함

echo "logmessage" > log.txt

콘솔에서는 보이지 않지만 이미 있던 파일 뒤에 내용을 이어서 기록함

echo "logmessage" >> tee log.txt

콘솔에서도 보이고 파일에 저장함

echo "logmessage" | tee log.txt

콘솔에서도 보이고 이미 있던 파일 뒤에 내용을 이어서 기록함

echo "logmessage" | tee -a log.txt

tee의 기본적인 사용법

tee [ -a ] [ -i ] [ File ... ]
  • File : 출력을 저장하고 싶은 파일들을 입력해준다.
  • -a : 파일이 존재하는 경우 파일을 지우지 않고 내용을 추가한다.
  • -i : 인터럽트를 무시한다.

stderr를 stdout으로 출력하가

foo.sh 2>&1 output.txt

/dev/null 2>&1 의 의미

표준 출력을 /dev/null로 redirection하라는 의미로, 표준출력을 버리라는 의미이다.

/dev/null 파일은 항상 비어있으며, /dev/null에 전송된 데이터는 버려진다. 따라서 출력이 필요없는 경우는 /dev/null로 출력을 지정한다.

redirect 사용시 표준출력과 표준에러를 분리해서 파일로 저장하고 싶은 경우

  • 0 : 표준입력
  • 1 : 표준출력
  • 2 : 표준에러
foo.sh 1>output.txt 2>error.txt