Linux (ve diğer UNIX'ler) , bir dosyanın adı ( bağlantı ), dosyanın kendisi (genellikle inode ile tanımlanır ) ve dosyaya açılan tutamaçlar arasında bir ayrım yapar . Bir dosyayı silmeye başladığınızda unlink()
aramayı çağırırsınız - bu dosyaya olan bağlantıyı siler ( rename()
farklı bir inode ile üzerine yazmak için de kullanabilirsiniz ). Bununla birlikte, açık dosyaya işlenirse (veya diğer bağlantılar - dosyalarda birden fazla bağlantı olabilir ), inode kalır ve tüm bağlantılar ve tutamaçlar gidene kadar dosya içeriği de kalır.
Bu nedenle, kütüphaneyi kullanarak programları çalıştırmak ya da eski sürüme bir tutamakta tutulan herhangi bir şey (genellikle bir bellek eşlemesi yoluyla dolaylı olarak), bu nedenle diskte kalır. Artık sadece bir dosya adı yok ve onu kullanan tüm programlar kapandığında (veya bir sonraki açılışta, dosya sistemi kontrolü veya günlük tekrarı sırasında) temizleniyor.
Ayrıca, 'eski kütüphaneyi' bekleyen programların, kütüphanenin daha yeni sürümleriyle iyi sonuçlanacağına dikkat edin. Linux kütüphanelerine, kütüphanenin sunduğu ABI'nin (Uygulama İkili Arayüzü) sürümünü yansıtan bir dosya adı ('soname') atanmıştır. Örneğin, sistemimdeki C kütüphanesi libc.so.6
. Daha eski bir libc sürümüne karşı derlenmiş, ancak yine de 6 ABI sürümünü uygulayan bir libc sürümü olan herhangi bir program onunla çalışacaktır. Gerçekten eski programlar a arayacaktır libc.so.5
veya libc.so.4
yerine falan; bu durumda, eski sürümü de burada tutmanız gerekir - ancak dosya adı farklı olduğu için bu bir sorun değildir.