"tail -f"와 "tail -F"의 차이점은 무엇입니까?

"tail -f"와 "tail -F"의 차이점은 무엇입니까?

나는 tail -F명령을 사용한 적이 없고 항상 명령을 사용했지만 별다른 설명 없이 이것이 더 낫다는 tail -f말을 들었습니다 .-F

tail 명령에 대한 매뉴얼 페이지를 찾아보았습니다.

-f output appended data as the file grows;

-F Same as --follow=name --retry

--retry Keep trying to open a file even when it is or becomes inaccessible

소문자의 기능을 이해하기는 쉽지만 대문자의 기능을 -f이해하지 못합니다 . -F누군가 나에게 이러한 차이점을 설명해 주시면 감사하겠습니다.

답변1

GNU 유틸리티를 설명하셨습니다 tail. 이 두 플래그의 차이점은 다음과 같이 파일(예: 로그 파일)을 열면 다음과 같다는 것입니다.

$ tail -f /var/log/messages

...내 컴퓨터의 로그 회전 기능이 메시지가 기록되는 동안 해당 로그 파일을 회전하기로 결정하면("회전"은 삭제 또는 다른 위치로 이동 등을 의미함) 내가 보는 출력이 중지됩니다.

tail다음과 같이 파일을 열면:

$ tail -F /var/log/messages

tail...다시 말하지만, 파일이 다시 사용 가능해지면(즉, 로그를 작성하는 프로그램이 쓰기 시작하면) 파일이 회전되고 출력이 내 콘솔에서 계속 흐릅니다.새로운 /var/log/messages.

-F무료 BSD 시스템에는 옵션이 없지만 메시지가 표시된다는 점을 제외하면 tail -f동작은 GNU 시스템의 동작과 유사합니다 .tail -F

tail: file has been replaced, reopening.

모니터링 중인 파일이 사라졌다가 다시 나타날 때 출력에 표시됩니다.


당신은 그것을 테스트할 수 있습니다

쉘 세션에서 다음을 실행하십시오.

$ cat >myfile

이제 귀하의 입력을 기다립니다. 몇 줄의 횡설수설을 계속 입력하십시오. 그것은 모두 파일에 저장됩니다 myfile.

존재하다다른쉘 세션(아마도 다른 터미널에서,중단 없이cat):

$ tail -f myfile

myfile그러면 콘솔에 콘텐츠가 (끝) 표시됩니다. 첫 번째 셸 세션으로 돌아가서 more를 입력하면 tail두 번째 셸 세션에 출력이 즉시 나타납니다.

이제 cat종료를 누른 Ctrl+D다음제거하다문서 myfile:

$ rm myfile

그런 다음 cat을 다시 실행하십시오.

$ cat >myfile

...그리고 몇 줄을 입력해 보세요.

GNU를 사용하면 tail다음 줄은 다음과 같습니다.아니요두 번째 셸 세션에 표시됩니다( tail -f아직 실행 중).

운동을 반복 tail -F하고 차이점을 관찰하십시오.

답변2

간단히 말해서, 파일을 열면 디스크에 있는 파일의 정확한 위치를 나타내는 일부 메타데이터가 포함된 inode를 얻게 됩니다. 그러면 Tail은 해당 파일의 변경 사항을 수신합니다.

해당 파일을 삭제하고 동일한 이름으로 새 파일을 생성하면 파일 이름은 동일하지만 inode가 달라집니다(디스크의 다른 위치에 저장될 수도 있음). 인구는 tail -f새 inode를 재시도하고 로드하지 않고도 tail -F이를 감지할 수 있습니다 .

파일 이름을 바꾸거나 파일을 이동해도 동일한 효과가 발생합니다. 예를 들어 /var/log/messageslogrotate를 따라 로그를 /var/log/messages.1.tail로 회전하면 을 -f가리키는 이전 인덱스 노드를 계속 수신합니다 messages.1. tail을 사용하면 -F이를 인식하고 새 inode를 읽을 수 있습니다.

관련 정보