Saya baru saja mengganti nama file log menjadi "foo.log.old", dan mengasumsikan bahwa aplikasi akan mulai menulis file log baru di "foo.log". Saya terkejut menemukan bahwa ia melacak logfile ke nama barunya, dan terus menambahkan baris ke "foo.log.old".
Di Windows, saya tidak terbiasa dengan perilaku semacam ini - saya tidak tahu apakah itu mungkin untuk diterapkan. Bagaimana tepatnya perilaku ini diterapkan di linux? Di mana saya bisa belajar lebih banyak tentang itu?
files
open-files
rename
ripper234
sumber
sumber
Jawaban:
Program terhubung ke file melalui nomor yang dikelola oleh filesystem (disebut inode pada filesystem unix tradisional), yang namanya hanya referensi (dan mungkin bukan referensi unik pada saat itu).
Jadi beberapa hal yang harus diperhatikan:
mv
tidak mengubah nomor bawahan itu kecuali Anda memindahkannya di sistem file (yang setara dengan menggunakancp
kemudianrm
pada aslinya).open
menyimpan file, ia membuat referensi untuknya yang (untuk keperluan kapan data akan dihapus) setara dengan memiliki nama file yang terhubung dengannya.Ini menimbulkan beberapa perilaku seperti:
open
file untuk dibaca, tetapi tidak benar-benar membacanya sampai setelah pengguna sepertirm
mengeditnya di baris perintah, dan program masih akan memiliki akses ke data .mv
file tidak memutuskan hubungan antara file dan program apa pun yang dibuka (kecuali jika Anda bergerak melintasi batas-batas sistem file, dalam hal ini program masih memiliki versi asli untuk dikerjakan).open
file untuk ditulis, danrm
nama file terakhir pengguna pada baris perintah, program dapat tetap dengan benar memasukkan hal-hal ke dalam file, tetapi begitu ditutup, tidak akan ada lagi referensi untuk data itu dan itu akan hilang.open
. (Ini bukan pikiran keamanan yang sebenarnya , itu hanya mengubah lubang menganga menjadi kondisi ras.)sumber
open
file untuk membaca dan menulis (seperti apa yang terjadi dengan file log dalam pertanyaan).Untuk benar-benar melihat bagaimana perilaku ini diterapkan, Anda dapat melihat beberapa buku pemrograman Unix. Mathepic benar karena terkait dengan inode. Pathname yang sebenarnya hanya digunakan untuk membuka file, setelah itu dilakukan program referensi oleh deskriptor file yang dibuka. Deskriptor file pada gilirannya referensi inode, yang dalam hal ini tidak peduli jika nama file yang mendasarinya telah berubah.
Sejauh menerapkan ini di Windows, itu pertanyaan untuk situs lain.
Untuk membaca lebih lanjut tentang ini tanpa memukul buku-buku hanya mencari-cari sistem file dan inode linux. Mungkin tidak ada jawaban yang jelas, tetapi Anda akan dapat memahami alasannya.
sumber