GNU/Linux >> Tutoriels Linux >  >> Linux

Tout ce que vous devez savoir sur le lien physique sous Linux

Avant de voir des liens physiques, je vous conseille de vous renseigner sur les inodes sous Linux. Un système de fichiers Linux a deux composants principaux :un pool de blocs de données où les données sont stockées et un système de base de données pour gérer ce pool de données. L'inode est comme l'index de ce système de base de données.

Un lien dur vers un fichier pointe vers l'inode du fichier au lieu de pointer vers le fichier lui-même. De cette façon, le lien physique obtient tous les attributs du fichier d'origine et pointe vers le même bloc de données que le fichier d'origine.

Si vous vous souvenez du lien symbolique ou du lien symbolique, vous savez qu'il pointe vers le fichier. Un lien physique est une entrée créée manuellement dans un répertoire qui pointe vers un inode déjà existant.

Je vais vous l'expliquer avec des schémas appropriés. Prenons cette structure de répertoires par exemple :

Donc, fondamentalement, le répertoire racine contient les répertoires dir_1 et dir_2. Le répertoire dir_1 contient les fichiers file_1 et file_2 tandis que dir_2 contient file_3 et un lien physique vers le fichier 2.

Voyons à quoi ressemblent les choses dans le système de fichiers. Tout est figuratif. En réalité, le répertoire racine contiendra des milliers de fichiers. Ici, nous supposons qu'il n'a que deux répertoires.

Vous souvenez-vous de la structure des répertoires Linux ? Vous commencez par la racine (/). Le répertoire racine a toujours l'inode 2.

Si vous devez accéder au fichier 3, le chemin absolu serait /dir_2/file_3. Ici, vous pouvez le lire comme ceci :vous commencez à l'inode 2 (racine toujours indoe 2) et suivez la flèche jusqu'à son bloc de données. Ce bloc de données contient les informations sur l'inode du dir_2 (inode 27 dans notre exemple).

Maintenant, vous regardez dans l'inode 27. Son type est répertoire. Vous suivez son bloc de données contenant des informations sur l'inode de file_3 (inode 88). Vous regardez dans l'inode 88. Son type est fichier et si vous suivez son bloc de données, vous accédez au contenu du fichier.

Avez-vous remarqué que le répertoire lui-même ne contient pas les données de son fichier ? Les répertoires sont essentiellement un fichier contenant les informations sur les inodes de leurs fichiers et sous-répertoires.

Vous devez vous poser des questions sur le nombre de liens dans l'image ci-dessus. C'est super important, surtout lorsque vous avez affaire à un lien physique. Le nombre de liens est le nombre d'entrées de répertoire qui pointent vers un inode. Prenez l'inode 27 pour dir_2 par exemple. L'inode 27 est une fois dans le bloc de données du répertoire racine et une fois dans son propre bloc de données (le répertoire spécial .). Et par conséquent, il a un nombre de liens de 2.

Remarquez que tous les fichiers ont un nombre de liens de 1 sauf file_2 ? Si un fichier a un nombre de liens supérieur à 1, cela signifie qu'il existe des liens physiques "vers ce fichier". Étant donné que les liens physiques pointent vers le même inode (inode 17 dans notre exemple) que le fichier cible, vous obtenez 2 listes de répertoires pour l'inode 17 (dans le bloc de données de dir_1 et dir_2).

Vous pouvez utiliser la commande ln afin de créer un lien physique :

ln target_file link_name

Cela créera un lien physique nommé nom_lien vers le fichier_cible. Vous verrez que link_name ressemble à un fichier normal et ses attributs sont les mêmes que le fichier cible.

Si vous utilisez la commande ls -li (l'option -i affiche le numéro d'inode), vous verrez que son nombre de liens est 2. Le nombre de liens se trouve après le champ d'autorisation de fichier.

134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  link_target_file

Les deux ont le même numéro d'inode 134195, évidemment.

Maintenant que vous avez une bonne idée des liens physiques sous Linux, allons un peu plus loin.

Si vous supprimez le fichier cible, vous pouvez toujours accéder à son contenu via le lien physique. C'est parce que le fichier cible et le lien physique ont le même inode et pointent donc vers le même bloc de données.

La suppression de fichiers sous Linux est essentiellement une dissociation. Supposons que vous supprimiez le fichier_1 à l'aide de la commande rm. Le noyau Linux trouvera que file_1 correspond à l'inode 16. Il supprimera l'entrée file_1 de la liste de dir_1 et réduira le nombre de liens de l'inode 16 de 1. Maintenant que le nombre de liens de l'inode 16 est de 0, le noyau sait qu'il n'y a personne qui se lie à ce inode afin qu'il soit sûr de supprimer l'inode et de supprimer le bloc de données qui lui est associé.

Dites maintenant que vous supprimez file_2. Le noyau supprimera le file_2 de la liste de dir_1 et ira à l'inode 17. Il réduira le nombre de liens de l'inode 17 en le ramenant à 1. Puisque le nombre de liens n'est pas nul, le noyau ne supprimera pas l'inode ou les données associées à ce. Et par conséquent, si vous accédez au lien physique, vous pouvez toujours accéder aux données même si le fichier d'origine a été supprimé.

Vous pouvez créer un lien symbolique vers un répertoire, mais lorsque vous essayez de créer un lien physique vers un répertoire, vous verrez une erreur comme celle-ci :

ln: newdir/test_dir: hard link not allowed for directory

Pourquoi les liens physiques ne sont-ils pas autorisés pour l'annuaire ? C'est parce que l'utilisation de liens physiques pour le répertoire peut casser le système de fichiers. Théoriquement, vous pouvez créer un lien physique vers des répertoires en utilisant l'option -d ou -F. Mais la plupart des distributions Linux ne le permettent pas, même si vous êtes un utilisateur root.

Jetons un autre coup d'œil au lien dur que j'ai créé plus tôt :

134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  link_target_file

Ils ont des attributs identiques, mais vous pouvez deviner quel est le lien basé sur le nom dans l'exemple ci-dessus, mais que faire si le nom n'était pas évident ? Comment sauriez-vous si leurs noms étaient target_1 et target_2 ?

Si le fichier et le ou les liens se trouvent dans un répertoire différent, vous pouvez essayer de vérifier mtime et d'autres paramètres pour savoir quand le contenu du répertoire a été modifié, mais même cela n'est pas une certitude. Si le fichier et le lien physique se trouvent dans le même répertoire et que l'historique a été effacé, je ne sais pas comment déterminer quel est le fichier d'origine et quel est le lien physique.

Si vous voyez qu'un fichier a plus d'un nombre de liens, vous pouvez être curieux de connaître les autres liens physiques qui lui sont associés.

Une façon de le trouver consiste à utiliser le numéro d'inode du fichier. Vous pouvez utiliser la commande ls -i ou la commande stat pour obtenir le numéro d'inode.

Une fois que vous avez le numéro d'inode, vous pouvez voir tous les liens qui lui sont associés à l'aide de la commande find.

find . -inum inode_number

Était-il difficile de comprendre les liens physiques ?

J'espère que ce n'était pas trop "difficile" et que vous comprenez mieux le concept de lien physique sous Linux. Si vous avez des doutes ou des suggestions sur ce sujet, veuillez laisser un commentaire ci-dessous.


Linux
  1. Tout ce que vous devez savoir sur Ubuntu 13.04

  2. Qu'est-ce que SteamOS ? Tout ce que vous devez savoir sur cette "distribution de jeux"

  3. Répertoire Linux tmp :tout ce que vous devez savoir

  4. Compression de fichiers Linux :tout ce que vous devez savoir

  5. Autorisations de fichiers Linux :tout ce que vous devez savoir

Tout ce que vous devez savoir sur le système d'exploitation Peppermint Linux

Tout ce que vous devez savoir sur Black Lab Linux

Tout ce que vous devez savoir sur la distribution Linux Mint

Tout ce que vous devez savoir sur les inodes sous Linux

Tout ce que vous devez savoir sur l'UID sous Linux

Tout ce que vous devez savoir sur le répertoire Linux /tmp