“tail”명령의“-f”매개 변수는 어떻게 작동합니까? 발행했습니다 (첫 번째 줄). $ tail

$ tail -f testfile

명령은 지정된 파일의 최신 항목을 실시간으로 표시해야합니까? 그러나 그것은 일어나지 않습니다. 내가하려는 일이 잘못되면 나를 바로 잡으십시오.

새 파일 “aaa”를 만들고 한 줄의 텍스트를 추가하고 닫았습니다. 그런 다음이 명령을 발행했습니다 (첫 번째 줄).

$ tail -f aaa
xxx
xxa
axx

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

무슨 일이야? 이 tail -f명령은 시스템에 의해서만 작성된 새 항목 만 표시합니까? (로그 파일 등)



답변

로부터 tail(1) man 페이지 :

   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대신 사용하십시오 .


답변

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

변경 사항을 저장하면 편집기가 단순히 기존 파일을 삭제하고 새 파일을 작성할 가능성이 있습니다. tail -f삭제 된 파일에 계속 연결되므로 새로운 내용이 표시되지 않습니다.


답변

tail 기본적으로 실시간이 아니라 1 초마다 “새로 고침”합니다.

이것으로 시도하십시오 (bash4가 필요합니다).

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

답변