"tail" 명령의 "-f" 매개변수는 어떻게 작동합니까?

"tail" 명령의 "-f" 매개변수는 어떻게 작동합니까?
$ tail -f testfile

이 명령은 지정된 파일의 최신 항목을 실시간으로 표시해야 합니다. 그렇죠? 하지만 그런 일은 일어나지 않았습니다. 제 의도가 틀렸다면 정정해주세요...

새 파일 "aaa"를 만들고 텍스트 한 줄을 추가한 후 닫았습니다. 그런 다음 다음 명령을 실행하십시오(첫 번째 줄).

$ tail -f aaa
xxx
xxa
axx

마지막 세 줄은 aaa 파일의 내용입니다. 이제 명령이 계속 실행 중이므로(사용한 대로 -f) GUI를 통해 aaa 파일을 열고 수동으로 더 많은 줄을 추가하기 시작합니다. 그러나 터미널에는 파일에 추가된 새 줄이 표시되지 않습니다.

어떻게 되어가나요? 이 tail -f명령은 시스템에서만 작성된 새 항목만 표시합니까? (로그 파일 등)

답변1

~에서tail(1) 매뉴얼 페이지:

   With  --follow  (-f),  tail  defaults to following the file descriptor,
   which means that even if a tail’ed file is renamed, tail will  continue
   to  track  its  end.   This  default behavior is not desirable when you
   really want to track the actual name of the file, not the file descrip-
   tor (e.g., log rotation).  Use --follow=name in that case.  That causes
   tail to track the named file  in  a  way  that  accommodates  renaming,
   removal and creation.

텍스트 편집기에서 원본 파일의 이름을 바꾸거나 삭제하고 새 파일을 동일한 파일 이름으로 저장하고 있습니다. 대신 사용하십시오 -F.

답변2

편집기에는 자체 파일 버퍼가 있습니다. 편집기에서 텍스트를 수정하면 파일 자체에는 아무 것도 기록되지 않습니다.

변경 사항을 저장하면 편집기는 이전 파일을 삭제하고 새 파일을 생성할 가능성이 높습니다. tail -f삭제된 파일은 계속 연결되어 있으므로 새로운 내용은 표시되지 않습니다.

답변3

tail기본적으로 실시간이 아닌 1초마다 "새로 고침"됩니다.

이것을 시도해 보십시오(bash4가 필요합니다):

  • 2개의 터미널을 엽니다.
  • touch ~/output.txt실행 및 첫 번째 터미널에서 tail -f ~/output.txt.
  • 두 번째 터미널에서 실행for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
  • 첫 번째 터미널에서 tail의 출력을 살펴보세요.

관련 정보