Linux (dan UNIX lainnya) menggambar perbedaan antara nama file ( tautan ), file itu sendiri (sering diidentifikasi dengan inode ), dan buka pegangan ke file tersebut. Ketika Anda pergi untuk menghapus file, Anda memanggil unlink()
panggilan - ini menghapus tautan ke file (Anda juga dapat menggunakannya rename()
untuk menimpanya dengan inode yang berbeda). Namun, jika pegangan terbuka ke file (atau tautan lain - file dapat memiliki banyak hardlink ) tetap ada, inode tetap ada, dan demikian juga konten file, sampai semua tautan dan pegangan hilang.
Jadi menjalankan program menggunakan pustaka atau apa pun tetap menggunakan versi lama (sering secara implisit melalui pemetaan memori), sehingga tetap pada disk. Itu hanya tidak memiliki nama file lagi, dan akan dibersihkan ketika semua program menggunakannya mematikan (atau pada reboot berikutnya, selama pemeriksaan filesystem atau replay jurnal).
Lebih lanjut, perhatikan bahwa program yang mengharapkan 'perpustakaan lama' akan baik-baik saja dengan versi perpustakaan yang lebih baru. Perpustakaan Linux diberi nama file ('soname') yang mencerminkan versi ABI (Application Binary Interface) yang ditawarkan oleh perpustakaan. Sebagai contoh, pustaka C pada sistem saya adalah libc.so.6
. Program apa pun yang dikompilasi melawan versi libc yang lebih lama, tetapi masih versi libc yang menerapkan versi 6 ABI, akan berfungsi dengan baik dengannya. Program yang benar-benar lama akan mencari libc.so.5
atau libc.so.4
atau sesuatu sebagai gantinya; dalam hal ini, Anda juga perlu menjaga versi lama - tetapi karena nama filenya berbeda, ini bukan masalah.