Linux (y otros UNIX) establece una distinción entre el nombre de un archivo (el enlace ), el archivo en sí (a menudo identificado con el inodo ) y los identificadores abiertos del archivo. Cuando va a eliminar un archivo, llama a la unlink()
llamada; esto borra el enlace al archivo (también puede usar rename()
para sobrescribirlo con un inodo diferente). Sin embargo, si permanecen los identificadores abiertos del archivo (u otros enlaces, los archivos pueden tener múltiples enlaces rígidos ), el inodo permanece, y también el contenido del archivo, hasta que todos los vínculos y identificadores desaparezcan.
Por lo tanto, ejecutar programas utilizando la biblioteca o lo que sea que mantenga un control de la versión anterior (a menudo implícitamente a través de un mapeo de memoria), para que permanezca en el disco. Simplemente ya no tiene un nombre de archivo, y se limpiará cuando todos los programas que lo usan se apaguen (o en el próximo reinicio, durante la verificación del sistema de archivos o la reproducción del diario).
Además, tenga en cuenta que los programas que esperan la 'biblioteca antigua' funcionarán bien con las versiones más recientes de la biblioteca. A las bibliotecas de Linux se les asigna un nombre de archivo ('soname') que refleja la versión de la ABI (interfaz binaria de aplicación) que ofrece la biblioteca. Por ejemplo, la biblioteca C en mi sistema es libc.so.6
. Cualquier programa compilado contra una versión anterior de libc, pero aún una versión de libc que implementa la versión 6 ABI, funcionará bien con él. Muy viejos programas buscarán una libc.so.5
o libc.so.4
o algo en su lugar; en este caso, también necesitaría mantener la versión anterior, pero como el nombre de archivo es diferente, esto no es un problema.