Apa perbedaan antara "tail -f" dan "tail -F"?

41

Saya tidak pernah menggunakan tail -Fperintah tetapi selalu digunakan tail -ftetapi seseorang mengatakan kepada saya bahwa -Fitu lebih baik tanpa banyak penjelasan.

Saya mencari halaman manual untuk perintah ekor.

-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

Sangat mudah untuk memahami apa yang lebih rendah -ftetapi saya tidak mengikuti apa -Fyang berusaha dilakukan oleh huruf besar . Saya menghargai seseorang dapat menjelaskan kepada saya perbedaannya.

Daeyoung
sumber

Jawaban:

75

Anda menggambarkan tailutilitas GNU . Perbedaan antara kedua flag ini adalah jika saya membuka file, file log misalnya, seperti ini:

$ tail -f /var/log/messages

... dan jika fasilitas rotasi log pada mesin saya memutuskan untuk memutar file log itu ketika saya sedang menonton pesan yang ditulis padanya ("rotate" berarti menghapus atau pindah ke lokasi lain dll.), output yang saya lihat hanya akan berhenti.

Jika saya membuka file dengan tailseperti ini:

$ tail -F /var/log/messages

... dan sekali lagi, file diputar, output akan terus mengalir di konsol saya karena tailakan membuka kembali file segera setelah tersedia lagi, yaitu ketika program menulis ke log mulai menulis ke yang baru /var/log/messages .

Pada sistem BSD gratis, tidak ada -Fpilihan, tetapi tail -fakan berperilaku seperti tail -Fhalnya pada sistem GNU, dengan perbedaan bahwa Anda mendapatkan pesan

tail: file has been replaced, reopening.

dalam output ketika file yang Anda pantau menghilang dan muncul kembali.


ANDA BISA MENGUJI INI

Dalam satu sesi shell, lakukan

$ cat >myfile

Itu sekarang akan menunggu Anda untuk mengetik. Silakan saja dan ketik beberapa omong kosong, beberapa baris. Itu semua akan disimpan ke dalam file myfile.

Di sesi shell lain (mungkin di terminal lain, tanpa mengganggucat ):

$ tail -f myfile

Ini akan menampilkan (akhir dari) konten myfiledi konsol. Jika Anda kembali ke sesi shell pertama dan mengetik sesuatu yang lebih, output yang akan segera ditampilkan taildi sesi shell kedua.

Sekarang berhenti catdengan menekan Ctrl+D, dan menghapus yang myfileberkas:

$ rm myfile

Kemudian jalankan kucing lagi:

$ cat >myfile

... dan ketik sesuatu, beberapa baris.

Dengan GNU tail, baris-baris ini tidak akan muncul di sesi shell kedua (di mana tail -fmasih berjalan).

Ulangi latihan dengan tail -Fdan amati perbedaannya.

Kusalananda
sumber
Oh begitu. Saya memiliki file log sistem seperti foo.log kemudian saya melihat terkadang foo_06242016.log bersama dengan foo.log. Jadi saya menjalankan tail -f foo.log, itu akan menunjuk ke foo_06242016.log?
DaeYoung
1
@ David Young Tidak, tidak cukup. Jika Anda menjalankan tail -f foo.logdan sistem Anda bergerak foo.logke misalnya foo.log.0.gzoutput yang Anda lihat hanya akan berhenti. Jika Anda menggunakan -Fdi sisi lain, Anda akan melihat konten baru foo.log tanpa jeda di antara keduanya.
Kusalananda
4
+1 ... terima kasih karena tidak membatasi jawaban Anda untuk implementasi GNU, tetapi juga memberi tahu orang-orang apa yang bisa diharapkan di lingkungan lain.
TOOGAM
2
Ilustrasi yang sangat bagus dengan contohnya.
CVn
1
@ Kusalananda: Terima kasih atas latihannya. Saya mengamati perbedaannya dan itu membantu saya lebih baik untuk memahami apa yang dilakukan ekor -f dan ekor -F. semoga harimu diberkati!
DaeYoung
14

Sederhana, ketika Anda membuka file, Anda akan mendapatkan inode yang berisi beberapa metadata di mana tepatnya file tersebut berada di disk Anda. Tail kemudian akan mendengarkan perubahan pada file itu.

Jika Anda menghapus file, dan membuat yang baru dengan nama yang sama nama file akan sama tetapi inode yang berbeda (dan mungkin disimpan di tempat yang berbeda pada disk Anda). tail -fisi tidak coba lagi dan muat inode baru, tail -Fakan mendeteksi ini.

Efek yang sama akan terjadi jika Anda mengganti nama / memindahkan file. Jika Anda misalnya mengikuti /var/log/messagesdan logrotate memutar log /var/log/messages.1. ekor dengan -fmasih akan mendengarkan inode lama yang menunjuk messages.1. ekor dengan -Fakan menyadari ini dan membaca inode baru.

nsg
sumber
Terima kasih atas penjelasan anda Sangat masuk akal bagi saya sekarang.
DaeYoung
2
Tidak masalah. Saya mengerti bahwa bentuk seperti itu bisa menjadi kesalahan mudah. Saya sangat menikmati fakta bahwa kesalahan ejaan Anda sebelumnya telah diperbaiki, dan diakui ... dengan kesalahan ejaan lain. :)
TOOGAM