Linux (และ UNIX อื่น ๆ ) วาดความแตกต่างระหว่างชื่อไฟล์ ( ลิงค์ ), ไฟล์ตัวเอง (มักถูกระบุด้วยไอโหนด ) และเปิดการจัดการกับไฟล์ เมื่อคุณไปลบไฟล์คุณโทรunlink()
ออก - นี่เป็นการลบลิงค์ไปยังไฟล์ (คุณสามารถใช้rename()
เพื่อเขียนทับไฟล์ด้วย inode อื่น) อย่างไรก็ตามถ้าเปิดจัดการกับไฟล์ (หรือลิงค์อื่น ๆ - ไฟล์สามารถมีหลายฮาร์ดลิงก์) ยังคงinodeยังคงและเนื้อหาของไฟล์เช่นนั้นจนกว่าการเชื่อมโยงและจัดการทั้งหมดจะหายไป
ดังนั้นการรันโปรแกรมโดยใช้ไลบรารี่หรืออะไรก็ตามที่คอยจัดการกับเวอร์ชั่นเก่า (มักจะผ่านการแม็พหน่วยความจำ) ดังนั้นมันจึงยังคงอยู่บนดิสก์ มันไม่มีชื่อไฟล์อีกต่อไปและจะถูกล้างเมื่อทุกโปรแกรมที่ใช้ปิด (หรือในการรีบูตครั้งถัดไปในระหว่างการตรวจสอบระบบไฟล์หรือการเล่นซ้ำเจอร์นัล)
นอกจากนี้โปรดทราบว่าโปรแกรมที่คาดหวังว่า 'ห้องสมุดเก่า' จะสามารถใช้งานได้ดีกับห้องสมุดรุ่นใหม่กว่า ไลบรารี Linux ถูกกำหนดชื่อไฟล์ ('soname') ที่สะท้อนถึงเวอร์ชันของ ABI (Application Binary Interface) ที่เสนอโดยห้องสมุด ยกตัวอย่างเช่นห้องสมุด C libc.so.6
ในระบบของฉันคือ โปรแกรมใด ๆ ที่คอมไพล์กับ libc เวอร์ชันเก่า แต่ยังคงเป็น libc เวอร์ชันที่ใช้เวอร์ชัน 6 ABI จะทำงานได้ดี จริงๆโปรแกรมเก่าจะมองหาlibc.so.5
หรือlibc.so.4
หรือสิ่งแทน; ในกรณีนี้คุณจะต้องเก็บเวอร์ชันเก่าไว้ด้วย - แต่เนื่องจากชื่อไฟล์นั้นแตกต่างกันจึงไม่เป็นปัญหา