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


59
$ tail -f testfile

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

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

$ tail -f aaa
xxx
xxa
axx

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

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

답변:


62

로부터 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 filename항상 대신에 명령 을 사용할 수 $ tail -f filename있습니까?
its_me

17
그것이 의도 된 행동 이라면 . 이 대신 파일 이름의 기술자에 의해 수행하려는 경우,하지만 내가 그 많은 건너하지 않은 공정하게.
이그나시오 바스케스-아 브람스

lsof예를 들어 lsof -Fpcftniinode가 뒤 따르는 tail편집기가 더 이상 편집기가 연 것과 동일하지 않음을 보여줍니다 .
Aaron D. Marasco

10

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

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


1
편집기가 파일을 덮어 쓰고 로그에 텍스트가 추가됩니다. 이것은 아마도 문제 일 수 있습니다.
Rufo El Magufo

@Juan : 귀하의 의견을 이해하지 못합니다. "덮어 쓰기"는 내가 대답 한 바를 제외하고는 구체적인 의미가 없습니다.
Stéphane Gimenez

그렇습니다, 나는 당신과 같은 것을 의미했습니다 :)
Rufo El Magufo

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
  • 첫 번째 터미널에서 테일의 출력을보십시오.

당신은 의미 했습니까 echo $i >> ~/output.txt? 또한이 답변은 질문의 요점을 놓치고 있습니다.
이그나시오 바스케스-아 브람스

1
네, 의견을 쓰는 동안 실패를 해결했습니다 :). 내 대답은 문제에 대한 테스트 일뿐입니다 . tail -f 명령은 시스템에 의해서만 작성된 새 항목 만 표시합니까?
Rufo El Magufo

4
@Juan : 요즘 리눅스에서는 tailfinotify 기반 구현이 있습니다. 실시간으로 새로 고침됩니다.
Stéphane Gimenez

tailf, 그러나 tailinotify?를 사용합니다. 몰랐어요 tailf. tail 맨 페이지의 기본값은 1 초입니다 -s.
Rufo El Magufo

3
그렇습니다 tail. 사용 가능한 경우 이제 inotify를 사용하고 있습니다. tailf파일에 활동이 없을 때 전혀 폴링하지 않고 잠자기 상태입니다. tail -f일부 활동을 보여줍니다 ( strace출력 참조 ).
Stéphane Gimenez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.