Bagaimana saya bisa melihat seluruh file dan juga menunggu lebih banyak data ditambahkan ke file itu?

21

Saya ingin membaca seluruh file dan membuatnya menunggu input, sama seperti tail -f tetapi dengan file lengkap ditampilkan.

Panjang file ini akan selalu berubah, karena ini adalah .logfile.

Bagaimana saya bisa melakukannya, jika saya tidak tahu panjang file?

cacing gelang
sumber
2
Anda sudah tahu bahwa ekornya dekat dengan yang Anda inginkan. apakah Anda membaca halaman manual untuk itu?
njzk2
1
lessmemiliki kunci "F". Berguna jika Anda membutuhkan interaksi.
Thorbjørn Ravn Andersen

Jawaban:

33

tailmemungkinkan Anda menambahkan -nuntuk menentukan jumlah garis untuk ditampilkan dari ujung, yang dapat digunakan bersamaan -f. Jika argumen untuk -nmulai dengan +itu adalah jumlah baris dari awal ( 0dan 1menampilkan seluruh file, 2menunjukkan lewati baris pertama, seperti yang ditunjukkan oleh @Ben). Jadi lakukan saja:

tail -f -n +0 filename

Jika file log Anda diputar, Anda dapat menambahkan --retry(atau menggabungkan -f and --retryke dalam -Fseperti yang disarankan oleh @Hagen)

Perhatikan juga bahwa di terminal grafis, Anda dapat menggunakan mouse dan PageUp/ PageDownuntuk menggulir kembali ke riwayat (dengan asumsi buffer Anda cukup besar), informasi ini tetap di sana bahkan jika Anda menggunakan Ctrl+ Cuntuk keluar tail. Jika Anda menggunakan lessini jauh lebih mudah dan AFAIK Anda harus menggunakan keyboard untuk menggulir dan saya tidak tahu cara untuk mencegah lessdeinitialising termcap jika Anda lupa untuk memulainya -X.

Anthon
sumber
1
+1 Jawaban Anda muncul segera setelah saya mengeposkan milik saya dan meskipun pun saya berhasil, jawaban Anda lebih baik.
Julie Pelletier
1
Saya mendapat pesan sementara saya masih mengetik bahwa ada jawaban lain dan saya harus mengklik untuk menyegarkan. Jawaban Anda akan menyelesaikan pekerjaan, tetapi saya tidak akan terkejut bahwa penghitungan sejak awal (dipaksakan dengan +) diterapkan lebih efisien.
Anthon
1
+1untuk mengajari saya tentang +0. Anda mungkin ingin -Falih-alih -fmemutar file log
Hagen von Eitzen
Saya pikir ada satu-per-satu di sini. tail -n +1menunjukkan awal file untuk saya, dan tail -n +2melompati satu baris. Saya pikir nomor tersebut adalah nomor baris dari baris yang ditampilkan pertama kali.
Ben Millwood
1
@Anthon terima kasih! Inilah yang saya butuhkan!
Malworm
37

Ada cara yang lebih baik untuk mencapai ini:

less +F <file>

Ini akan menunjukkan kepada Anda seluruh file, memiliki kekuatan penuh lessdan akan menunggu input baru. Jika Anda ingin berhenti menunggu input, dan membaca bagian tertentu, Anda dapat menghentikannya ^Cdan melanjutkan F.

The Fperintah selalu tersedia di less, jika Anda memutuskan untuk melihat perubahan sementara memiliki file yang terbuka di less, memukul Fakan menyalakannya. Terima kasih kepada hiergiltdiestfu dan wildcard untuk menunjukkannya.

Leandros
sumber
2
Ini memang jauh lebih baik daripada tail. Terima kasih atas tipnya; Saya tidak akan pernah berpikir lessuntuk menggunakan ini. Catatan untuk orang lain: Anda juga bisa menjalankan less <file>dan kemudian mengetik F.
Wildcard
3

Selain jawaban / u / Anthon, Anda dapat melakukan sesuatu seperti:

{ cat filename; tail -0f filename; }

Itu -0pilihan untuk ekor setara dengan -n 0, yang berarti: dispaly 0 baris. Tetapi -fakan menampilkan baris baru.

Anda tidak membutuhkan kawat gigi { }. Saya menggunakan mereka karena kadang-kadang Anda ingin mengarahkan para pendaftar dalam beberapa cara. Contohnya:

{ cat ; tail -0f -; } < /var/log/messages

Dicatat oleh Ben Milwood: Anda dapat memiliki kondisi balapan di mana file tumbuh antara akhir catoperasi dan awal tailoperasi. Tetapi sekali lagi, ini adalah masalah "akademis" untuk solusi akademis.

Otheus
sumber
3
Jika file tumbuh di antara saat catselesai dan tailmulai, Anda tidak akan melihat baris itu. Tidak mungkin menjadi masalah besar, tetapi alasan untuk memilih tailsolusi murni .
Ben Millwood
Saya pikir { cat; tail -n +0 -f; } < fileakan memperbaiki balapan, karena tail akan mencetak data baru yang muncul antara cat's exit dan tail' s startup. Tentu saja, itu membuat catmubazir. Pengalihan hanya terjadi sekali, dan tailstdin adalah deskriptor file yang catsudah dibacakan ke EOF, sehingga posisinya saat ini adalah di mana catdihentikan. Anda dapat mengujinya dengan meletakkan bagian echo foo >> filedalam {}, untuk membuat balapan setiap saat.
Peter Cordes
2

watch Perintah harus melakukan itu untuk Anda.

Anda juga bisa mencoba

less +FG 

Anda akan memiliki lebih banyak opsi dengan lessperintah untuk menggulir file Anda seperti yang Anda katakan itu file besar.

RajuBhai
sumber
Kurang juga tidak mengikuti file yang tumbuh.
Shadur
7
@ Safur, itu, itulah +Fpilihan untuk
glenn jackman