Ketika Anda menghapus file, Anda benar-benar menghapus tautan ke file (ke inode). Jika seseorang sudah membuka file itu, mereka harus menjaga deskriptor file yang mereka miliki. File tetap di disk, mengambil ruang, dan dapat ditulis dan dibaca jika Anda memiliki akses ke sana.
The unlink
Fungsi didefinisikan dengan perilaku ini dengan POSIX:
Ketika jumlah tautan file menjadi 0 dan tidak ada proses membuka file, ruang yang ditempati oleh file akan dibebaskan dan file tidak lagi dapat diakses. Jika satu atau lebih proses membuka file saat tautan terakhir dihapus, tautan tersebut akan dihapus sebelum tautan balik kembali () kembali, tetapi penghapusan konten file akan ditunda hingga semua referensi ke file ditutup .
Saran ini karena perilaku itu. Daemon akan membuka file, dan tidak akan melihat bahwa itu telah dihapus (kecuali jika dipantau secara khusus, yang tidak umum). Ini akan terus menulis dengan rapi ke deskriptor file yang ada: Anda akan tetap mengambil (lebih banyak) ruang pada disk, tetapi Anda tidak akan dapat melihat pesan apa pun yang ditulisnya, sehingga Anda benar-benar dalam keadaan terburuk. dari kedua dunia. Jika Anda memotong file ke panjang nol, maka ruang akan segera dibebaskan, dan pesan baru akan ditambahkan di ujung file yang baru di mana Anda dapat melihatnya.
Akhirnya, ketika daemon mengakhiri atau close
file , ruang akan dibebaskan. Tidak ada yang baru dapat membuka file dalam waktu yang berarti (selain melalui antarmuka reflektif spesifik sistem seperti Linux/proc/x/fd/...
). Juga dijamin bahwa:
Jika jumlah tautan file adalah 0, ketika semua deskriptor file yang terkait dengan file ditutup, ruang yang ditempati oleh file akan dibebaskan dan file tidak lagi dapat diakses.
Jadi Anda tidak kehilangan ruang disk Anda secara permanen, tetapi Anda tidak mendapatkan apa-apa dengan menghapus file dan Anda kehilangan akses ke pesan baru.
/proc/x/fd/y
? Apakah itu menyebabkan proses gagal menulis ke deskriptor file, atau apakah itu operasi ilegal?