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