Sự khác biệt giữa đuôi đuôi -F và đuôi đuôi -F là gì?


41

Tôi không bao giờ sử dụng tail -Flệnh thay vì luôn luôn sử dụng tail -ftuy nhiên ai đó nói với tôi rằng -Ftốt hơn mà không cần giải thích nhiều.

Tôi tìm trang man cho lệnh đuôi.

-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

Thật dễ hiểu những gì cấp dưới -flàm nhưng tôi không làm theo những gì viết hoa -Fđang cố gắng làm. Tôi đánh giá cao ai đó có thể giải thích cho tôi sự khác biệt.

Câu trả lời:


75

Bạn mô tả tailtiện ích GNU . Sự khác biệt giữa hai cờ này là nếu tôi mở một tệp, ví dụ như tệp nhật ký, như sau:

$ tail -f /var/log/messages

... và nếu tiện ích xoay vòng nhật ký trên máy của tôi quyết định xoay tệp nhật ký đó trong khi tôi đang xem tin nhắn được ghi vào nó ("xoay" nghĩa là xóa hoặc di chuyển đến một vị trí khác, v.v.), đầu ra mà tôi thấy sẽ chỉ dừng lại.

Nếu tôi mở tập tin tailnhư thế này:

$ tail -F /var/log/messages

... Và một lần nữa, tệp được xoay, đầu ra sẽ tiếp tục chảy trong bảng điều khiển của tôi vì tailsẽ mở lại tệp ngay khi có sẵn một lần nữa, tức là khi (các) chương trình ghi vào nhật ký bắt đầu ghi vào mới /var/log/messages .

Trên các hệ thống BSD miễn phí, không có -Ftùy chọn nào , nhưng tail -fsẽ hoạt động giống như tail -Ftrên các hệ thống GNU, với sự khác biệt là bạn nhận được thông báo

tail: file has been replaced, reopening.

trong đầu ra khi tệp bạn đang theo dõi biến mất và xuất hiện lại.


BẠN CÓ THỂ KIỂM TRA NÀY

Trong một phiên shell, làm

$ cat >myfile

Điều đó bây giờ sẽ chờ bạn gõ công cụ. Chỉ cần đi trước và gõ một số từ vô nghĩa, một vài dòng. Tất cả sẽ được lưu vào tập tin myfile.

Trong một phiên shell khác (có thể trong một thiết bị đầu cuối khác, mà không làm gián đoạncat ):

$ tail -f myfile

Điều này sẽ hiển thị (cuối của) nội dung myfiletrong bảng điều khiển. Nếu bạn quay lại phiên shell đầu tiên và nhập thêm thứ gì đó, đầu ra đó sẽ ngay lập tức được hiển thị tailtrong phiên shell thứ hai.

Bây giờ bỏ catbằng cách nhấn Ctrl+D, và loại bỏ các myfiletập tin:

$ rm myfile

Sau đó chạy lại con mèo:

$ cat >myfile

... và gõ một cái gì đó, một vài dòng.

Với GNU tail, các dòng này sẽ không hiển thị trong phiên shell thứ hai (nơi tail -fvẫn đang chạy).

Lặp lại bài tập với tail -Fvà quan sát sự khác biệt.


Ồ..tôi thấy. Tôi có một tệp nhật ký hệ thống như foo.log sau đó tôi thấy đôi khi foo_06242016.log cùng với foo.log. Vì vậy, tôi chạy đuôi -f foo.log, nó sẽ trỏ đến foo_06242016.log?
DaeYoung

1
@DaeYoung Không, không hẳn. Nếu bạn chạy tail -f foo.logvà hệ thống của bạn chuyển foo.logsang ví dụ foo.log.0.gzđầu ra mà bạn thấy sẽ chỉ dừng lại. Nếu bạn sử dụng -Fmặt khác, bạn sẽ thấy nội dung của cái mới foo.log mà không có bất kỳ sự ngắt quãng nào.
Kusalananda

4
+1 ... cảm ơn bạn vì đã không giới hạn câu trả lời của bạn đối với việc triển khai GNU, nhưng cũng cho mọi người biết những gì có thể được mong đợi trong môi trường khác.
TUYỆT VỜI

2
Minh họa rất đẹp với ví dụ.
CVn

1
@Kusalananda: Cảm ơn bạn đã tập thể dục. Tôi đã quan sát sự khác biệt và nó giúp tôi hiểu rõ hơn về đuôi -f và đuôi -F làm gì. chúc một ngày tốt lành
DaeYoung

14

Đơn giản hóa, khi bạn mở một tệp, bạn sẽ nhận được nút có chứa một số siêu dữ liệu về nơi chính xác tệp nằm trên đĩa của bạn. Tail sẽ lắng nghe những thay đổi của tập tin đó.

Nếu bạn xóa tệp và tạo một tệp mới có cùng tên, tên tệp sẽ giống nhau nhưng đó là một nút khác (và có thể được lưu trữ ở một vị trí khác trên đĩa của bạn). tail -fđiền không thử lại và tải inode mới, tail -Fsẽ phát hiện điều này.

Hiệu ứng tương tự sẽ xảy ra nếu bạn đổi tên / di chuyển tệp. Nếu bạn ví dụ như sau /var/log/messagesvà logrotate xoay nhật ký /var/log/messages.1. đuôi với -fvẫn sẽ lắng nghe inode cũ mà trỏ đến messages.1. đuôi với -Fsẽ nhận ra điều này và đọc inode mới.


Cảm ơn lời giải thích của bạn. Nó có nhiều ý nghĩa với tôi bây giờ.
DaeYoung

2
Không sao đâu. Tôi hiểu rằng một cái đuôi như vậy có thể là một sai lầm dễ mắc phải. Tôi đặc biệt thích thú với việc lỗi chính tả trước đó của bạn đã được sửa và thừa nhận ... với một lỗi chính tả khác. :)
TUYỆT VỜI
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.