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


41

나는 tail -F항상 대신 사용되는 명령을 사용 tail -f하지 않았지만 누군가가 -F많은 설명없이 더 좋다고 말했습니다 .

꼬리 명령에 대한 매뉴얼 페이지를 찾았습니다.

-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가하려는 것을 따르지 않습니다. 나는 누군가가 나에게 차이점을 설명 할 수 있다는 것에 감사드립니다.

답변:


75

GNU tail유틸리티에 대해 설명 합니다. 이 두 플래그의 차이점은 파일을 열면 예를 들어 다음과 같이 로그 파일이라는 것입니다.

$ tail -f /var/log/messages

... 내 기계의 로그 회전 기능이 메시지를 쓰는 동안 로그 파일을 회전하기로 결정하면 ( "회전"은 삭제 또는 다른 위치로 이동하는 것을 의미합니다.), 내가 보는 출력은 단지 중지.

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

$ tail -F /var/log/messages

... 그리고 다시, 파일이 회전되면 파일이 tail다시 사용 가능 해지 자마자, 즉 로그에 쓰는 프로그램이 new에 쓰기 시작했을 때 파일이 다시 열리기 때문에 출력이 콘솔에서 계속 흐릅니다 /var/log/messages.

무료 BSD 시스템에는 -F옵션이 없지만 메시지를 얻는 것과는 달리 GNU 시스템에서와 tail -f같이 동작 tail -F합니다.

tail: file has been replaced, reopening.

모니터링중인 파일이 사라지고 다시 나타날 때 출력에


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

하나의 쉘 세션에서

$ cat >myfile

이제 입력 할 때까지 기다립니다. 그냥 몇 줄로 횡설수설을 입력하십시오. 모두 파일에 저장됩니다 myfile.

에서 또 다른 (아마도 다른 터미널에서, 쉘 세션 가림없이cat ) :

$ tail -f myfile

myfile콘솔 의 (종료) 내용이 표시 됩니다. 첫 번째 셸 세션으로 돌아가서 더 입력 tail하면 두 번째 셸 세션에 해당 출력이 즉시 표시됩니다 .

이제 그만 cat눌러 Ctrl+D제거myfile 파일 :

$ rm myfile

그런 다음 고양이를 다시 실행하십시오.

$ cat >myfile

... 몇 줄을 입력하십시오.

GNU tail에서는 이러한 행이 두 번째 셸 세션 ( 아직 실행중인)에 표시 되지 않습니다tail -f .

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


아. foo.log와 같은 시스템 로그 파일이 있는데 가끔 foo.log와 함께 foo_06242016.log가 표시됩니다. 그래서 tail -f foo.log를 실행하면 foo_06242016.log를 가리킬 것입니까?
DaeYoung

1
@DaeYoung 아뇨. 당신이 실행 tail -f foo.log하고 시스템이 foo.log예를 들어 foo.log.0.gz출력으로 이동 하면 당신은 방금 멈출 것입니다. 당신이 사용하는 경우 -F반면에, 당신의 내용을 볼 것이다 새를 foo.log 에-사이에 휴식없이.
Kusalananda

4
+1 ... GNU 구현에 대한 귀하의 답변을 제한하지 않고 다른 환경에서 예상 할 수있는 것을 사람들에게 알려 주셔서 감사합니다.
TOOGAM

2
예제와 함께 아주 좋은 그림.
CVn

1
@ Kusalananda : 운동 주셔서 감사합니다. 나는 그 차이를 관찰하고 tail -f와 tail -F의 역할을 이해하는 데 도움이되었다. 축복받은 하루 보내세요!
DaeYoung

14

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

파일을 제거하고 같은 이름으로 새 파일을 만들면 파일 이름은 같지만 다른 inode 일 것입니다 (그리고 아마도 디스크의 다른 위치에 저장되어있을 것입니다). tail -f다시 채우지 말고 새 inode를로드하면 tail -F이를 감지합니다.

파일 이름을 바꾸거나 파일을 이동해도 동일한 효과가 발생합니다. 예를 들어 /var/log/messageslogrotate를 수행하면 로그가로 회전합니다 /var/log/messages.1. with with -f는 여전히을 가리키는 오래된 inode를 듣습니다 messages.1. 꼬리 -F는 이것을 깨닫고 새로운 inode를 읽을 것입니다.


설명해 주셔서 감사합니다. 지금 나에게 많은 의미가 있습니다.
DaeYoung

2
괜찮아. 나는 그러한 꼬리가 쉬운 실수라는 것을 이해합니다. 귀하의 이전 맞춤법 오류가 수정되어 다른 맞춤법 오류로 확인되었다는 사실을 특히 즐기고 있습니다. :)
TOOGAM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.