GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre les bases des inodes UNIX / Linux avec des exemples

Plusieurs pays fournissent un numéro d'identification unique (par exemple, le numéro de sécurité sociale aux États-Unis) aux personnes qui vivent dans ce pays. Cela facilite l'identification unique d'un individu. Cela facilite la gestion de tous les documents nécessaires pour un individu par divers organismes gouvernementaux et institutions financières.

Semblable au numéro de sécurité sociale, il existe un concept de numéros Inode qui existent uniquement pour tous les fichiers sur les systèmes Linux ou *nix.

Bases sur les inodes

Un numéro d'inode pointe vers un inode. Un Inode est une structure de données qui stocke les informations suivantes sur un fichier :

  • Taille du fichier
  • Identifiant de l'appareil
  • ID utilisateur du fichier
  • ID de groupe du fichier
  • Les informations sur le mode de fichier et les privilèges d'accès pour le propriétaire, le groupe et les autres
  • Indicateurs de protection des fichiers
  • Les horodatages de création, de modification de fichier, etc.
  • compteur de liens pour déterminer le nombre de liens physiques
  • Pointeurs vers les blocs stockant le contenu du fichier

Veuillez noter que la liste ci-dessus n'est pas exhaustive. De plus, le nom du fichier n'est pas stocké dans les Inodes (Nous y reviendrons plus tard).

Lorsqu'un fichier est créé dans un répertoire, le nom du fichier et le numéro d'inode sont attribués au fichier. Ces deux entrées sont associées à chaque fichier d'un répertoire. L'utilisateur peut penser que le répertoire contient le fichier complet et toutes les informations supplémentaires qui s'y rapportent, mais ce n'est pas toujours le cas. On voit donc qu'un répertoire associe un nom de fichier à son numéro d'inode.

Lorsqu'un utilisateur essaie d'accéder au fichier ou à toute information liée au fichier, il utilise le nom du fichier pour le faire, mais en interne, le nom du fichier est d'abord mappé avec son numéro d'inode stocké dans une table. Ensuite, via ce numéro d'inode, l'inode correspondant est accessible. Il existe une table (table Inode) où ce mappage des numéros d'inode avec les inodes respectifs est fourni.

Pourquoi aucun nom de fichier dans les informations d'inode ?

Comme indiqué précédemment, il n'y a pas d'entrée pour le nom de fichier dans l'inode, le nom de fichier est plutôt conservé comme une entrée distincte parallèle au numéro d'inode. La raison pour séparer le nom du fichier des autres informations liées au même fichier est de maintenir des liens physiques vers les fichiers. Cela signifie qu'une fois que toutes les autres informations sont séparées du nom de fichier, nous pouvons avoir différents noms de fichiers qui pointent vers le même Inode.

Par exemple :

$ touch a

$ ln a a1

$ ls -al
drwxr-xr-x 48 himanshu himanshu 4096 2012-01-14 16:30 .
drwxr-xr-x 3 root root 4096 2011-03-12 06:24 ..
-rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a
-rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a1

Dans la sortie ci-dessus, nous avons créé un fichier "a", puis créé un lien physique a1. Maintenant, lorsque la commande 'ls -al' est exécutée, nous pouvons voir les détails de 'a' et 'a1'. Nous voyons que les deux fichiers sont indiscernables. Regardez la deuxième entrée dans la sortie. Cette entrée spécifie le nombre de liens physiques vers le fichier. Dans ce cas, l'entrée a la valeur "2" pour les deux fichiers.

Notez que les liens physiques ne peuvent pas être créés sur différents systèmes de fichiers et qu'ils ne peuvent pas non plus être créés pour des répertoires.

Quand les inodes sont-ils créés ?

Comme nous le savons tous maintenant, Inode est une structure de données contenant des informations sur un fichier. Étant donné que les structures de données occupent le stockage, une question évidente se pose de savoir quand les inodes sont créés dans un système ? Eh bien, l'espace pour les Inodes est alloué lorsque le système d'exploitation ou un nouveau système de fichiers est installé et lorsqu'il effectue sa structuration initiale. Ainsi, de cette façon, nous pouvons voir que dans un système de fichiers, le nombre maximum d'inodes et donc le nombre maximum de fichiers sont définis.

Maintenant, le concept ci-dessus soulève un autre fait intéressant. Un système de fichiers peut manquer d'espace de deux manières :

  • Il ne reste plus d'espace pour ajouter de nouvelles données
  • Tous les inodes sont consommés.

Eh bien, la première façon est assez évidente, mais nous devons examiner la seconde. Oui, il est possible qu'un cas se présente où nous avons de l'espace de stockage libre, mais nous ne pouvons toujours pas ajouter de nouvelles données dans le système de fichiers car tous les inodes sont consommés. Cela peut se produire dans un cas où le système de fichiers contient un très grand nombre de fichiers de très petite taille. Cela consommera tous les inodes et bien qu'il y ait de l'espace libre du point de vue du disque dur, mais du point de vue du système de fichiers, aucun inode n'est disponible pour stocker un nouveau fichier.

Le cas d'utilisation ci-dessus est possible mais moins rencontré car sur un système typique, la taille moyenne du fichier est supérieure à 2 Ko, ce qui le rend plus susceptible de manquer d'espace sur le disque dur en premier. Mais, néanmoins, il existe un algorithme qui est utilisé pour créer un certain nombre d'inodes dans un système de fichiers. Cet algorithme tient compte de la taille du système de fichiers et de la taille moyenne des fichiers. L'utilisateur peut modifier le nombre d'inodes lors de la création du système de fichiers.

Commandes pour accéder aux numéros d'inode

Voici quelques commandes pour accéder aux numéros d'inode des fichiers :

1) Commande Ls -i

Comme nous l'avons expliqué précédemment dans notre article Unix LS Command :15 exemples pratiques, l'indicateur -i est utilisé pour imprimer le numéro d'inode de chaque fichier.

$ ls -i
1448240 a 1441807 Desktop 1447344 mydata 1441813 Pictures 1442737 testfile 1448145 worm
1448240 a1 1441811 Documents 1442707 my_ls 1442445 practice 1442739 test.py
1447139 alpha 1441808 Downloads 1447278 my_ls_alpha.c 1441810 Public 1447099 Unsaved Document 1
1447478 article_function_pointer.txt 1575132 google 1447274 my_ls.c 1441809 Templates 1441814 Videos
1442390 chmodOctal.txt 1441812 Music 1442363 output.log 1448800 testdisk.log 1575133 vlc

Vérifiez que le numéro d'inode pour "a" et "a1" est le même que celui que nous avons créé pour "a1" en tant que lien physique.

2) Commande Df -i

La commande df -i affiche les informations d'inode du système de fichiers.

$ df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            1875968  293264 1582704   16% /
none                  210613     764  209849    1% /dev
none                  213415       9  213406    1% /dev/shm
none                  213415      63  213352    1% /var/run
none                  213415       1  213414    1% /var/lock
/dev/sda2            7643136  156663 7486473    3% /home

Le drapeau -i est utilisé pour afficher les informations d'inode.

3) Commande statistique

La commande Stat est utilisée pour afficher les statistiques du fichier qui affiche également le numéro d'inode d'un fichier

$ stat a
File: `a'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 1448240 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 1000/himanshu) Gid: ( 1001/ family)
Access: 2012-01-14 16:30:04.871719357 +0530
Modify: 2012-01-14 16:29:50.918267873 +0530
Change: 2012-01-14 16:30:03.858251514 +0530

Exemple de scénario d'utilisation d'un numéro d'inode

  1. Supposons qu'il existe un nom de fichier contenant un caractère spécial. Par exemple : "ab*
  2. Essayez de le supprimer normalement à l'aide de la commande rm, vous ne pourrez pas le supprimer.
  3. Cependant, en utilisant le numéro d'inode de ce fichier, vous pouvez le supprimer.

Voyons ces étapes dans cet exemple :

1) Vérifiez si le fichier existe :

$ ls -i
1448240 a 1447274 my_ls.c
1448240 a1 1442363 output.log
1448239 "ab* 1441813 Pictures
1447139 alpha

Nous avons donc un fichier nommé "ab* dans ce répertoire

2) Essayez de le supprimer normalement :

$ rm "ab*
> ^C
$ rm "ab*
> ^C
$

Voyez que j'ai essayé plusieurs fois de supprimer le fichier mais que je n'ai pas pu.

3) Supprimez le fichier en utilisant le numéro d'inode :

Comme nous l'avons vu précédemment dans notre article sur les exemples de commandes de recherche, vous pouvez rechercher un fichier à l'aide du numéro d'inode et le supprimer.

$ find . -inum 1448239 -exec rm -i {} \;
rm: remove regular empty file `./"ab*'? y
$ ls -i
1448240 a 1447274 my_ls.c
1448240 a1 1442363 output.log
1447139 alpha 1441813 Pictures

Nous avons donc utilisé la commande find en spécifiant le numéro d'inode du fichier que nous devons supprimer. Le fichier a été supprimé. Bien que nous aurions pu supprimer le fichier autrement également en utilisant la commande rm \"ab* au lieu d'utiliser l'exemple de commande de recherche compliqué ci-dessus, mais je l'ai quand même utilisé pour démontrer l'une des utilisations des numéros d'inode pour les utilisateurs.


Linux
  1. 10 commandes Linux Tail rapides avec des exemples

  2. Commande de tri sous Linux avec des exemples

  3. 10+ commandes Linux VI avec des exemples

  4. commande chattr sous Linux avec des exemples

  5. exemples de commandes tail sous UNIX/Linux

Horodatages de fichiers Linux expliqués avec des exemples

Utilisation de la commande Linux mv avec des exemples

Que sont les inodes sous Linux ?

Commande de montage Linux avec exemples

Commande Linux gawk avec exemples

Linux make Commande avec des exemples