Bagaimana saya mengurangi nama file daripada nomor inode?

11

Saya memiliki perangkat lunak yang memutar file log ketika restart. Namun, selama pengembangan, saya banyak me-restart, jadi saya ingin memonitor file log terbaru kapan saja.

Jika saya mulai secara lessnormal dengan less program.logdan menekan Shift+ funtuk mengekor, ketika file log diputar, saya terus memantau file log yang lama. Saya berasumsi ini karena nomor inode tetap sama dan lessmemiliki pegangan file terbuka untuk inode itu.

Apakah mungkin untuk memantau aktivitas terbaru pada file log apa pun yang saat ini dipanggil program.log?

Secara khusus, saya sedang mengerjakan Sun OS, jadi solusi yang berfungsi di sana akan ideal.

Alex Chamberlain
sumber
mungkin tail -F program.log | lessakan bekerja
sendmoreinfo
tail -f program.log Sudahkah Anda mencoba ini?
Rahul Patil

Jawaban:

17

Gunakan less --follow-namejika versi Anda lessmendukungnya. Opsi itu diperkenalkan di versi 416.

Stéphane Chazelas
sumber
Balasan luar biasa. Baik Solaris 10 dan Solaris 11 menggunakan versi 436 lebih sedikit sehingga opsi ini memang tersedia.
unixhacker2010
5

The lesspilihan --follow-namehanya bagian dari solusi;
Untuk mengganti tail -F, diperlukan argumen lain:

less --follow-name +F file.log

Opsi sendirian seperti less --follow-name file.logsebenarnya tidak mulai mengikuti pembaruan file. Anda harus masuk ke mode ikuti menekan ShiftF.
(Keluar dari mode untuk menavigasi ControlC.)

Alih-alih mengikuti file, --follow-name ubah perilaku kurang.
Itu membuat kunci perintah ShiftFdi dalam lesstindak berdasarkan pada nama file, bukan deskriptor file.

Juga, tidak ada opsi normal untuk memulai lessdalam mode ikuti.
Tetapi Anda dapat menggunakan baris perintah untuk memberikan penekanan tombol untuk dieksekusi setelah startup, dengan mengawali dengan +.
Menggabungkan opsi pengubah dengan +F, lesssebenarnya akan mulai dalam mode ikuti (dimodifikasi).

Gunakan +Fsendiri untuk setara dengan polos tail -f:

less +F file.log
Volker Siegel
sumber
1

Saya baru saja menemukan jawabannya di T&J T&J yang berjudul: Bagaimana cara melakukan tail -ffile yang diputar log? .

Menggunakan tail:

(jika menginstal GNU tail pada sistem Anda adalah suatu pilihan)

tail -F program.log

Dari halaman manual tail :

   -f,      --follow[={name|descriptor}]
            output appended data as the file grows; -f, 
            --follow, and --follow=descriptor are equivalent

   -F       same as --follow=name --retry

   --retry  keep  trying  to  open  a  file even when it is or becomes
            inaccessible; useful when following by name, i.e., with
            --follow=name

Kuncinya adalah --retrysakelar. Ini memberi tahu tailperintah untuk terus mencoba mengikuti file dengan nama. The -Fsaklar tidak baik -fdan --retry.

Menggunakan less

Seperti @StephaneChazela tunjukkan dalam komentar berikut ini tidak akan berfungsi.

tail -F program.log | less

Satu-satunya pilihan lain yang Anda miliki adalah menggunakan lebih sedikit secara langsung dengan asumsi itu mendukung --follow-namesakelar dan lessfile secara langsung, tidak menggunakan tailsepenuhnya.

less --follow-name program.log
slm
sumber
Saya sangat tidak suka Sun OS kadang-kadang ...
Alex Chamberlain
Saya setuju, saya bekerja selama bertahun-tahun, itu membuat Anda gila bahwa tooling seperti 10 tahun untuk beberapa aplikasi. Tidak masuk akal. Situs ini sangat berharga untuk menjaga kewarasan Anda di Solaris: sunfreeware.com/introduction.html
slm
jika Anda menginginkan lebih banyak kewarasan, lihat pkgsrc.org :)
sendmoreinfo
Itu tidak akan bekerja dengan baik. Karena lessakan hang jika Anda melakukan "G" pr "F". Yang Anda dapat menyela dengan melakukan "Ctrl-C", tetapi kemudian membunuh ekornya. Anda kemudian dapat kebal ekor ke Ctrl-C, tapi itu masih belum bisa digunakan.
Stéphane Chazelas
Sehubungan dengan ekor GNU: Periksa ini untuk informasi tentang alat apa yang harus tersedia pada host Solaris. (Sebenarnya ekor GNU ada secara default di Solaris 11). Sysadmin Solaris sering mempersulit para penggunanya karena mereka membiarkan instalasi pada instalasi yang sangat sederhana sementara alat-alat GNU untuk Solaris sekarang ini tersedia secara langsung dari Oracle atau dalam beberapa kasus bagian dari instalasi default. Tidak ada alasan untuk tidak menjadikannya bagian dari pemasangan Anda. Tidak ada alasan untuk pergi ke repo 'tidak resmi'. Lihat tautan.
unixhacker2010