it-swarm-id.com

Bagaimana cara kerja parameter "tail" perintah "-f"?

$ tail -f testfile

perintah ini seharusnya menunjukkan entri terbaru dalam file yang ditentukan, secara real-time bukan? Tapi 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 (karena saya menggunakan -f), Saya membuka file aaa melalui GUI dan mulai menambahkan beberapa baris secara manual. Tetapi terminal tidak menunjukkan baris baru yang ditambahkan dalam file.

Ada apa di sini? tail -f perintah hanya menampilkan entri baru jika hanya ditulis oleh sistem? (seperti file log dll)

62
its_me

Dari tail(1)halaman manual :

   With  --follow  (-f),  tail  defaults to following the file descriptor,
   which means that even if a tail’ed file is renamed, tail will  continue
   to  track  its  end.   This  default behavior is not desirable when you
   really want to track the actual name of the file, not the file descrip-
   tor (e.g., log rotation).  Use --follow=name in that case.  That causes
   tail to track the named file  in  a  way  that  accommodates  renaming,
   removal and creation.

Editor teks Anda mengganti nama atau menghapus file asli dan menyimpan file baru di bawah nama file yang sama. Gunakan -F sebagai gantinya.

66

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.

11

tail "menyegarkan" setiap 1 detik secara default, bukan waktu nyata.

Coba dengan ini (Anda perlu bash4):

  • Buka 2 terminal.
  • Di terminal pertama jalankan touch ~/output.txt dan tail -f ~/output.txt.
  • Di terminal kedua jalankan for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
  • Lihatlah output ekor di terminal pertama.
4
Rufo El Magufo