GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Linux faisant différemment qui me permet de supprimer/remplacer des fichiers là où Windows se plaindrait que le fichier est actuellement utilisé ?

L'exemple que j'ai est Minecraft. Lors de l'exécution de Bukkit sur Linux, je peux supprimer ou mettre à jour les fichiers .jar dans le dossier /plugins et exécuter simplement la commande "reload".

Sous Windows, je dois arrêter tout le processus du serveur car il se plaindra que le fichier .jar est actuellement utilisé lorsque j'essaie de le supprimer ou de le remplacer.

C'est génial pour moi, mais pourquoi cela arrive-t-il ?
Qu'est-ce que Linux fait différemment ici ?

Réponse acceptée :

Linux supprime un fichier complètement différemment de la façon dont Windows le fait. Tout d'abord, une brève explication sur la façon dont les fichiers sont gérés dans les systèmes de fichiers natifs *unix.

Le fichier est conservé sur le disque dans la structure à plusieurs niveaux appelée i-node . Chaque i-node a un numéro unique sur le système de fichiers unique. La structure i-node conserve différentes informations sur un fichier, comme sa taille, les blocs de données alloués pour le fichier, etc., mais pour les besoins de cette réponse, l'élément de données le plus important est un link counter . Les directories sont les fichiers qui conservent des enregistrements sur les fichiers. Chaque enregistrement a le numéro d'i-node auquel il se réfère, la longueur du nom de fichier et le nom de fichier lui-même. Ce schéma permet d'avoir des "pointeurs", c'est-à-dire des "liens" vers le même fichier à différents endroits avec des noms différents. Le compteur de liens de l'i-node conserve en fait le nombre de liens qui font référence à cet i-node.

Que se passe-t-il lorsqu'un processus ouvre le fichier ? D'abord le open() la fonction recherche l'enregistrement du fichier. Ensuite, il vérifie si la structure d'i-node en mémoire pour cet i-node existe déjà. Cela peut arriver si une application a déjà ouvert ce fichier. Sinon, le système initialise une nouvelle structure d'i-node en mémoire. Ensuite, le système augmente le compteur d'ouverture de la structure i-node en mémoire et renvoie à l'application son descripteur de fichier.

L'appel de la bibliothèque Linux pour supprimer un fichier s'appelle unlink . Cette fonction supprime l'enregistrement de fichier d'un répertoire et décrémente le compteur de liens de l'i-node. Si le système détecte qu'une structure i-node en mémoire existe et que son compteur d'ouverture n'est pas nul, cet appel renvoie le contrôle à l'application. Sinon, il vérifie si le compteur de liens est devenu zéro et si c'est le cas, le système libère tous les blocs alloués pour l'i-node et l'i-node lui-même et retourne à l'application.

Que se passe-t-il si une application ferme un fichier ? La fonction close() décrémente le compteur ouvert et vérifie sa valeur. Si la valeur est différente de zéro, la fonction retourne à l'application. Sinon, il vérifie si le compteur de liaison i-node est égal à zéro. S'il est égal à zéro, il libère tous les blocs du fichier et de l'i-node avant de retourner à l'application.

Ce mécanisme permet de « supprimer » un fichier pendant qu'il est ouvert. En même temps, l'application qui a ouvert un fichier a toujours accès aux données du fichier. Ainsi, JRE, dans votre exemple, garde toujours sa version de fichier ouverte alors qu'il existe une autre version mise à jour sur le disque.

Connexe :Un fichier ODBK et comment le restaurer ?

De plus, cette fonctionnalité vous permet de mettre à jour la glibc(libc) - la bibliothèque principale de toutes les applications - de votre système sans interrompre son fonctionnement normal.

Windows

Il y a 20 ans, nous ne connaissions pas d'autre système de fichiers que FAT sous DOS. Ce système de fichiers a une structure et des principes de gestion différents. Ces principes ne vous permettent pas de supprimer un fichier lorsqu'il est ouvert, donc le DOS et dernièrement Windows doivent refuser toute demande de suppression sur un fichier ouvert. NTFS permettrait probablement le même comportement que les systèmes de fichiers *nix, mais Microsoft a décidé de maintenir le comportement habituel de suppression de fichiers.

C'est la réponse. Pas court, mais maintenant vous avez l'idée.

Modifier :
Une bonne lecture sur les sources de Win32 désordre :https://blogs.msdn.microsoft.com/oldnewthing/20040607-00/?p=38993 Crédits à @Jon


Linux
  1. Copier des fichiers dans le terminal Linux

  2. Déplacer des fichiers dans le terminal Linux

  3. Comment utiliser la commande Tar sous Linux

  4. Utilisez la commande Dig sous Linux - Le faire correctement ?

  5. 5 façons d'utiliser la commande move sous Linux

Comment utiliser la commande Linux diff

Comment utiliser la commande Linux ftp pour charger et télécharger des fichiers sur le shell

Les 6 meilleures façons d'afficher des fichiers sous Linux

Outils Sysadmin :11 façons d'utiliser la commande ls sous Linux

Comment utiliser la commande Gzip sous Linux ?

Où se trouve le fichier php.ini sur un PC Linux/CentOS ?