GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿Linux funciona de manera diferente que me permite eliminar/reemplazar archivos donde Windows se quejaría de que el archivo está actualmente en uso?

El ejemplo que tengo es Minecraft. Cuando ejecuto Bukkit en Linux, puedo eliminar o actualizar los archivos .jar en la carpeta /plugins y simplemente ejecutar el comando 'recargar'.

En Windows, tengo que desactivar todo el proceso del servidor porque se quejará de que el archivo .jar está actualmente en uso cuando intento eliminarlo o reemplazarlo.

Esto es increíble para mí, pero ¿por qué sucede?
¿Qué está haciendo diferente Linux aquí?

Respuesta aceptada:

Linux elimina un archivo de forma completamente diferente a como lo hace Windows. Primero, una breve explicación sobre cómo se administran los archivos en los *sistemas de archivos nativos de Unix.

El archivo se guarda en el disco en la estructura multinivel llamada i-node . Cada i-nodo tiene un número único en el sistema de archivos único. La estructura i-node mantiene diferente información sobre un archivo, como su tamaño, bloques de datos asignados para el archivo, etc., pero por el bien de esta respuesta, el elemento de datos más importante es un link counter . Los directories son los archivos que guardan registros sobre los archivos. Cada registro tiene el número de i-nodo al que se refiere, la longitud del nombre del archivo y el nombre del archivo en sí. Este esquema permite tener 'punteros', es decir, 'enlaces' al mismo archivo en diferentes lugares con diferentes nombres. El contador de enlaces del i-nodo en realidad mantiene el número de enlaces que se refieren a este i-nodo.

¿Qué sucede cuando algún proceso abre el archivo? Primero el open() función busca el registro del archivo. Luego verifica si la estructura del i-nodo en memoria para este i-nodo ya existe. Esto puede suceder si alguna aplicación ya tenía abierto este archivo. De lo contrario, el sistema inicializa una nueva estructura de i-nodo en memoria. Luego, el sistema aumenta el contador abierto de la estructura i-node en memoria y devuelve a la aplicación su descriptor de archivo.

La llamada de la biblioteca de Linux para eliminar un archivo se llama unlink . Esta función elimina el registro del archivo de un directorio y reduce el contador de enlaces del i-nodo. Si el sistema encontró que existe una estructura de i-nodo en memoria y su contador abierto no es cero, entonces esta llamada devuelve el control a la aplicación. De lo contrario, comprueba si el contador de enlaces llegó a cero y, si es así, el sistema libera todos los bloques asignados para el i-nodo y el propio i-nodo y vuelve a la aplicación.

¿Qué pasa que una aplicación cierra un archivo? La función close() decrementa el contador abierto y comprueba su valor. Si el valor es distinto de cero, la función vuelve a la aplicación. De lo contrario, comprueba si el contador de enlaces i-node es cero. Si es cero, libera todos los bloques del archivo y del i-nodo antes de volver a la aplicación.

Este mecanismo le permite “borrar” un archivo mientras está abierto. Al mismo tiempo, la aplicación que abrió un archivo todavía tiene acceso a los datos del archivo. Entonces, JRE, en su ejemplo, aún mantiene abierta su versión del archivo mientras hay otra versión actualizada en el disco.

Relacionado:¿Un archivo ODBK y cómo restaurarlo?

Además, esta función le permite actualizar glibc(libc), la biblioteca central de todas las aplicaciones, en su sistema sin interrumpir su funcionamiento normal.

Ventanas

Hace 20 años no conocíamos ningún otro sistema de archivos que FAT bajo DOS. Este sistema de archivos tiene una estructura y principios de gestión diferentes. Estos principios no le permiten eliminar un archivo cuando se abre, por lo que DOS y, últimamente, Windows tienen que denegar cualquier solicitud de eliminación en un archivo que está abierto. Probablemente NTFS permitiría el mismo comportamiento que los sistemas de archivos *nix pero Microsoft decidió mantener el comportamiento habitual de eliminación de archivos.

Esta es la respuesta. No es corto, pero ya tienes la idea.

Editar :
Una buena lectura sobre las fuentes de Win32 desorden:https://blogs.msdn.microsoft.com/oldnewthing/20040607-00/?p=38993 Créditos a @Jon


Linux
  1. Copiar archivos en la terminal de Linux

  2. Mover archivos en la terminal de Linux

  3. Cómo usar Netcat para transferir archivos en Linux

  4. Cómo usar el comando find de Linux para buscar archivos

  5. Linux:dónde colocar el archivo de intercambio

Cómo usar el comando diff de Linux

Cómo usar el comando ftp de Linux para cargar y descargar archivos en el shell

Las 6 mejores formas de ver archivos en Linux

Herramientas de administrador de sistemas:11 formas de usar el comando ls en Linux

¿Cómo usar el comando Gzip en Linux?

¿Dónde está el archivo php.ini en una PC con Linux/CentOS?