$ tail -f testfile
perintah seharusnya menunjukkan entri terbaru dalam file yang ditentukan, secara real-time bukan? Tetapi itu tidak terjadi. Harap perbaiki saya, jika apa yang saya maksudkan salah ...
Saya membuat file baru "aaa" dan menambahkan satu baris teks dan menutupnya. kemudian mengeluarkan perintah ini (baris pertama):
$ tail -f aaa
xxx
xxa
axx
tiga baris terakhir adalah isi file aaa. Sekarang perintahnya masih berjalan (sejak saya gunakan -f
), saya membuka file aaa melalui GUI dan mulai menambahkan beberapa baris lagi secara manual. Tetapi terminal tidak menunjukkan baris baru yang ditambahkan dalam file.
Ada apa di sini The tail -f
perintah hanya menunjukkan entri baru jika mereka ditulis oleh sistem saja? (seperti file log, dll.)
sumber
$ tail -F filename
perintah sepanjang waktu, bukan$ tail -f filename
benar?lsof
dapat menunjukkan hal ini terjadi - misalnyalsof -Fpcftni
akan menunjukkan bahwa inode yang diikutitail
tidak lagi sama dengan yang dibuka oleh editor.Editor Anda memiliki buffer sendiri untuk file tersebut. Saat Anda memodifikasi teks di editor, tidak ada yang ditulis ke file itu sendiri.
Saat Anda menyimpan perubahan, kemungkinan editor menghapus file lama dan membuat yang baru.
tail -f
masih akan terhubung ke file yang dihapus, sehingga tidak akan menampilkan sesuatu yang baru.sumber
tail
"segarkan" setiap 1 detik secara default, bukan waktu nyata.Coba dengan ini (Anda perlu bash4):
touch ~/output.txt
dantail -f ~/output.txt
.for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
sumber
echo $i >> ~/output.txt
? Juga, jawaban ini melewatkan inti pertanyaan.tailf
memiliki implementasi berbasis inotify. Jadi itu akan menyegarkan secara realtime.tailf
, tetapitail
menggunakan inotify ?. Saya tidak tahutailf
. Halaman ekor menunjukkan default 1 detik untuk-s
.tail
diikuti dan sekarang juga menggunakan notifikasi jika tersedia.tailf
sama sekali tidak polling, hanya tidur, ketika tidak ada aktivitas pada file.tail -f
menunjukkan beberapa aktivitas (lihatstrace
output).