files – ¿Cómo se comportan los archivos abiertos en los sistemas Linux?

Pregunta:

Acabo de cambiar el nombre de un archivo de registro a "foo.log.old", y asumí que la aplicación comenzará a escribir un nuevo archivo de registro en "foo.log". Me sorprendió descubrir que rastreaba el archivo de registro hasta su nuevo nombre y seguía agregando líneas a "foo.log.old".

En Windows, no estoy familiarizado con este tipo de comportamiento, no sé si es posible implementarlo. ¿Cómo se implementa exactamente este comportamiento en Linux? ¿Dónde puedo obtener más información al respecto?

Respuesta:

Los programas se conectan a los archivos a través de un número mantenido por el sistema de archivos (llamado inodo en los sistemas de archivos tradicionales de Unix), al cual el nombre es solo una referencia (y posiblemente no una referencia única).

Así que varias cosas a tener en cuenta:

  1. Mover un archivo usando mv no cambia ese número subyacente a menos que lo mueva a través de sistemas de archivos (que es equivalente a usar cp luego rm en el original).
  2. Debido a que más de un nombre puede conectarse a un solo archivo (es decir, tenemos vínculos físicos), los datos de los archivos "eliminados" no desaparecen hasta que desaparecen todas las referencias al archivo subyacente.
  3. Quizás lo más importante: cuando un programa open un archivo sa, hace una referencia a él que es (a los efectos de cuándo se eliminarán los datos) equivalente a tener un nombre de archivo conectado a él.

Esto da lugar a varios comportamientos como:

  • Un programa puede open un archivo para leerlo, pero no leerlo realmente hasta que el usuario lo haya rm en la línea de comando, y el programa seguirá teniendo acceso a los datos .
  • El que encontró: mv a file no desconecta la relación entre el archivo y cualquier programa que lo tenga abierto (a menos que se mueva a través de los límites del sistema de archivos, en cuyo caso el programa todavía tiene una versión del original para trabajar).
  • Si un programa ha open un archivo para escribir, y el usuario rm su último nombre de archivo en la línea de comando, el programa puede seguir colocando cosas en el archivo, pero tan pronto como se cierre, no habrá más referencias a eso. datos y desaparecerá.
  • Dos programas que se comunican a través de uno o más archivos pueden obtener una seguridad parcial burda al eliminar los archivos después de que terminan de open . (Esta no es una mente de seguridad real , solo transforma un enorme agujero en una condición de carrera).

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım