리눅스에서 몇몇 환경을 구축하고 있습니다. 구축을 하면서 프로그램을 실행시킬 때 만들어지는 에러 로그를 trace를 해야 하는 일이 생겼는데요. tail -f 옵션을 이용해 보라는 스택 오버플로우의 글이 있었습니다. 생각보다 유용한 명령어일 줄은 몰랐습니다. 단지, tail이 파일의 끝 몇 줄만 출력하는 줄로만 알았기 때문입니다.

 

 

 tail은 파일의 끝 부분을 출력하는 명령입니다.

 

 

 그런데, -f 옵션을 주면, 파일을 모니터링 합니다. 어떻게 동작하는지 보겠습니다. 문구만 읽어보면, file이 grow함에 따라서, output이 append가 된다는 뜻으로만 보이는데요. 무슨 이야기를 하는지는 잘 모르겠으니, 직접 써 보겠습니다.

 


 터미널 세션 2개를 열겠습니다. 하나는, 1.txt에 append하고, 다른 하나는 tail -f 1.txt를 계속 호출할 겁니다.

 

 

 먼저 터미널 1에서 echo 12345 >> 1.txt를 쳐 보겠습니다. echo 12345의 출력 결과는 12345입니다. 이것이 1.txt로 입력이 되는데, >와 달리 >>는 append를 의미합니다.

 

 

 

그 결과 Hello, 12345, 12345가 차례대로 1.txt에 들어가 있습니다.

 

 

 이제 chogahui를 넣어보겠습니다.

 

 

 그러면 파일에 chogahui가 추가되었다는 것이 거의 실시간으로 표시가 됩니다.

 

 

 그러면 gahui를 1.txt에 그냥 write를 하면 어떨까요? >>와 달리 >는 그냥 새롭게 쓰는 것을 의미합니다.

 

 

 그러면, file truncated라는 문구가 뜨고 gahui가 추가됩니다. log 파일은, 보통 계속 append가 되는 특성이 있는데요. 로그가 쌓이는 것을 실시간으로 봐야 한다면, tail -f log파일 이런 식으로 명령어를 작성하는 게 적합합니다. /var/log 밑에 있는 syslog는 시스템 로그를 저장합니다.

 

 

 이것을 -f 명령으로 보면, mysql이 stop이 되고 다시 시작이 되었고, 뭔가가 error를 리턴했다는 것을 볼 수 있습니다. 그것도 실시간으로요.

 


 그러면 -F 옵션을 붙으면 무엇을 의미할까요?

 

 

 -f와 하는 일은 비슷합니다만, retry를 한다는 것이 다릅니다. 즉 --follow에 --retry가 붙은 셈입니다.

 

 

 --retry 옵션을 보면,  파일이 inaccessible 할 때도 여는 것을 계속 시도한다고 되어 있습니다. 파일이 없을 때에도, 계속 열려고 시도한다고 이해하시면 됩니다.

 

 

 tail -f 2.txt를 해 보니, No such file or directory라고 떠 있었습니다. 즉, 2.txt가 없는 상태이기 때문에, 접근 불가능한 상황입니다. 그리고 나서, no files remaining이 뜨고, 바로 나와 버립니다. 접근을 할 수 없을 때, 재시도를 하지 않습니다.

 

 

 그에 비해서, -F 옵션을 주면 파일이 없더라도, 대기하고 있습니다. 이제 다른 터미널에서 touch 2.txt 명령을 입력한 다음에, 123과 456을 차례대로 2.txt에 써보겠습니다.

 

 

 명령어를 이런 식으로 날려주면 되겠네요.

 

 

 그러면, new file이 생성되었다는 이벤트가 뜨고, 123, 456이 차례대로 터미널에 기록이 되었다는 것을 알 수 있습니다.