OVH Cloud OVH Cloud

[débutant] inodes

5 réponses
Avatar
november
Bonjour,

J'ai enfin décidé à me mettre à Linux. Cependant, je butte sur le concept
d'Inode.

J'ai déjà consulté pas mal de pages sur internet concernant les Inodes, les
liens physiques et symboliques.

Venant du monde Windows, en fait, je n'arrive pas du tout à comprendre la
réelle différence entre physique et symbolique, pour moi (pour l'instant) un
lien n'est rien d'autre qu'un raccourci (windows).

Pouvez-vous m'éclairer s'il vous plaît? (j'ai l'impression que windows
habitues ses utilisateurs à beaucoup trop de simplicité...)

Merci.

5 réponses

Avatar
Marc Boyer
Le 24-01-2007, november a écrit :
J'ai enfin décidé à me mettre à Linux. Cependant, je butte sur le concept
d'Inode.


Est-il bien utile ?

J'ai déjà consulté pas mal de pages sur internet concernant les Inodes, les
liens physiques et symboliques.

Venant du monde Windows, en fait, je n'arrive pas du tout à comprendre la
réelle différence entre physique et symbolique, pour moi (pour l'instant) un
lien n'est rien d'autre qu'un raccourci (windows).


Lien symbolique win/linux:

Ben, un lien symbolique est comme un raccourci Windows, mais
au niveau du système de fichier, car dans mon souvenir, en windows,
un raccourci n'est qu'un fichier .lk qui contient le nom d'un
autre fichier. Résultat, si tu ouvres le fichier depuis un
programme (fopen en C), tu lis le nom du fichier ciblé,
alors qu'en Linux (et les Unix), tu ouvres vraiment le fichier.

Lien symbolique / physique

Si tu as un fichier toto.txt, et que tu fait un lien symbolique
titi.txt sur toto.txt, et que tu effaces toto.txt, ben, titi.txt
ne désigne plus rien.

A contrario, si tu as un fichier toto.txt et un lien physique
titi.txt sur toto.txt, et que tu effaces toto.txt, ben, le
fichier est toujours là, accessible depuis le nom titi.txt.

Marc

--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)

Avatar
lhabert
"november" :

J'ai déjà consulté pas mal de pages sur internet concernant les Inodes, les
liens physiques et symboliques.

Venant du monde Windows, en fait, je n'arrive pas du tout à comprendre la
réelle différence entre physique et symbolique, pour moi (pour l'instant) un
lien n'est rien d'autre qu'un raccourci (windows).


Un inode, c'est en gros un fichier : un enregistrement contenant
- des propriétés (propriétaires, droits d'accès, diverses dates)
- un type (fichier normal, répertoire, lien symbolique, device, pipe,
socket, ...)
- optionellement un flux d'octets.

Un répertoire, c'est un inode qui a le type répertoire. Son flux d'octets
contient, dans un certain codage, une liste de couples (nom, numéro d'inode).
Un tel couple (s,y) constitue un lien dur de nom s vers l'inode y. Ce flux
d'octets n'est pas manipulable directement par les programmes, ils y
accèdent à plus haut niveau : en demandant à l'OS la liste des noms des
liens, ou d'ouvrir l'inode du lien portant un certain nom.

Un fichier, c'est un inode qui a le type fichier. Son flux d'octets peut
être lu et modifié directement par les programmes.

Un lien symbolique, c'est un inode qui a le type lien symbolique. Son flux
d'octets peut être lu par les programmes mais pas modifié (il est fixé lors
de sa création). En pratique, ce flux d'octets est interprété comme un
chemin d'accès : quand on essaye d'ouvrir un lien symbolique, c'est en fait
le fichier pointé par le chemin d'accès contenu dedans qui va se faire
ouvrir.

Bref :
- lien dur = entrée d'un nom de fichier dans un répertoire
- lien symbolique ~ racourci.

Avatar
Stephane Dupille
Bonjour,


Hello,

J'ai enfin décidé à me mettre à Linux. Cependant, je butte sur le concept
d'Inode.


C'est pas forcément très compliqué.

J'ai déjà consulté pas mal de pages sur internet concernant les Inodes, les
liens physiques et symboliques.


Oui ?

Venant du monde Windows, en fait, je n'arrive pas du tout à comprendre la
réelle différence entre physique et symbolique, pour moi (pour l'instant) un
lien n'est rien d'autre qu'un raccourci (windows).


N'essayez pas de faire un parallèle entre Windows et Unix, des
concepts apparemment identiques cachent des choses fort différentes.

Pouvez-vous m'éclairer s'il vous plaît? (j'ai l'impression que windows
habitues ses utilisateurs à beaucoup trop de simplicité...)


Un inode est grosso-modo un fichier. Ce fichier est stocké qqpart
(où n'a pas d'importance). Pour y accéder il faut connaître son numéro
d'inode.

D'un autre côté, un peu à part, il y a une hiérarchie de
répertoires. Un répertoire est simplement une association entre un nom
et un inode. Le nom permet simplement d'y accéder plus facilement.

Quand on fait référence à un inode, on incrémente son compteur de
liens (en fait on fait un lien entre le répertoire et l'inode). Quand
on enlève un fichier d'un répertoire, on décrémente le nombre de
liens. Lorsque ce nombre devient 0, l'inode n'est plus accessible, le
fichier est supprimé.

Donc, faire un lien consiste à attacher un inode dans un répertoire.
On peut créer autant de liens qu'on veut vers une inode (c'est un lien
physique, ou hard). On a plusieurs entrées vers le même fichier.

Par exemple :
Je crée un fichier :
echo "aaa" > a.txt
On vérifie qu'il existe :

ls -i a.txt
3958120 a.txt


L'option -i de ls permet d'afficher le numéro d'inode. Le fichier
a.txt est en fait l'inode 3958120.

On fait un lien hard de a.txt vers b.txt :
ln a.txt b.txt
ls -i a.txt b.txt
3958120 a.txt 3958120 b.txt


On remarque que les deux fichiers ont le même inode, ce sont dont
deux entrées dans le répertoire vers un et un seul fichier. Donc quand
on en modifie un, on modifie le second (ben oui, c'est le même
fichier !) :
echo "bbb" >> b.txt
cat a.txt
aaa

bbb


Il y a une limitation aux inodes : leur numéro est local à une
partition. Et donc on ne peut faire un lien hard que sur une seule
partition. Mais il existe les liens softs.

Un lien soft n'est pas un lien hard. C'est tout simplement un nouvel
inode qui contient le chemin d'un autre fichier.

Par exemple, on crée un lien soft de c vers a :
ln -s a.txt c.txt
ls -li a.txt c.txt
3958120 -rw-r--r-- 2 dust users 8 24 jan 13:42 a.txt

3957863 lrwxr-xr-x 1 dust users 5 24 jan 13:43 c.txt -> a.txt

Les deux fichiers n'ont pas la même inode. Et le système se
débrouille pour que quand on accède à c, en fait on accède à a :
echo "ccc" >> c.txt
cat a.txt
aaa

bbb
ccc

Le pb de ce machin, c'est si on déplace a :
mv a.txt d.txt
ls -la c.txt
lrwxr-xr-x 1 dust users 5 24 jan 13:43 c.txt -> a.txt

(donc c.txt existe !)
cat c.txt
cat: c.txt: No such file or directory


C'est exactement comme pour les liens Windows, dans le
fonctionnement.


En résumé : un inode est un fichier stocké dans une structure que
l'on ne voit pas (et qui est la table d'inode). La structure des
répertoires est un système permettant de nommer un inode, et de le
retrouver/manipuler plus facilement.

Un lien physique permet de nommer de différentes façon un inode,
et/ou de le mettre dans plusieurs répertoires.

Un lien symbolique crée un autre inode qui permet de pointer sur une
entrée de répertoire.

Merci.


Ah mais de rien ! En espérant vous avoir aidé. Si vous avez d'autres
questions....

Avatar
november
Merci pour vos réponses (très rapides) ! :)

Pour l'instant, non je n'ai pas d'autres questions, je vais tester cela en
pratique et continuer à apprendre le monde UNIX-Linux.

Si j'ai d'autres questions essentielles :) je me permettrai de les poser
ici-même.

Au fait, je débute en ligne de commandes sous Debian.


"november" a écrit dans le message de news:
45b751f8$0$23666$
Bonjour,

J'ai enfin décidé à me mettre à Linux. Cependant, je butte sur le concept
d'Inode.

J'ai déjà consulté pas mal de pages sur internet concernant les Inodes,
les liens physiques et symboliques.

Venant du monde Windows, en fait, je n'arrive pas du tout à comprendre la
réelle différence entre physique et symbolique, pour moi (pour l'instant)
un lien n'est rien d'autre qu'un raccourci (windows).

Pouvez-vous m'éclairer s'il vous plaît? (j'ai l'impression que windows
habitues ses utilisateurs à beaucoup trop de simplicité...)

Merci.



Avatar
Matthieu Moy
"november" writes:

Bonjour,

J'ai enfin décidé à me mettre à Linux. Cependant, je butte sur le concept
d'Inode.


Ça n'est pas très important pour un débutant.

J'ai déjà consulté pas mal de pages sur internet concernant les Inodes, les
liens physiques et symboliques.

Venant du monde Windows, en fait, je n'arrive pas du tout à comprendre la
réelle différence entre physique et symbolique, pour moi (pour l'instant) un
lien n'est rien d'autre qu'un raccourci (windows).


Sous windows, les « raccourcis » sont un vilain hack de l'interface
graphique. Quand tu double-cliques sur un raccourcis, c'est comme si
tu cliquais sur la cible.

Mais depuis une console MS-DOS, si tu fais « notepad
mon_raccourcis.lnk » (je suis plus sûr de l'extension, je crois que
c'est lnk), tu verras que c'est un fichier comme un autre du point de
vue de système.

Sous Linux, ce qui s'en rapproche le plus, c'est le lien symbolique.
Si un lien symbolique pointe vers un fichier, et qu'une application
quelconque essaye d'ouvrir ce lien symbolique, les opérations qu'elle
fera dessus se feront sur la cible. Si tu effaces la cible, le lien
existe toujours, mais ne pointe plus sur rien, on ne peut plus
l'utiliser.

Les liens physiques, c'est un peu plus difficile à comprendre. Un
fichier, c'est un ensemble de données stoquées sur le disque, et pour
qu'on puisse y accéder, on lui donne un nom (on « accroche » une
étiquette avec son nom au répertoire dans lequel il se trouve).
En général, un fichier n'a qu'un seul nom, mais sous Unix, on peut
avoir plusieurs noms pour le même fichier. Dans ce cas, les différents
noms sont des liens en dur (physiques) sur le fichier. Concrêtement,
on a l'impression d'avoir la même chose qu'avec un lien symblique,
(deux choses qui représentent le même fichier), mais la grosse
différence, c'est que si tu en effaces un, l'autre reste. Le fichier
n'est vraiment effacé que lorsque plus personne n'y fait référence.

Et dans tout ça, un Inode, c'est ce que j'appelle plus haut
« fichier », c'est en fait un ensemble de données (le contenu du
fichier) et de méta-données (comment ces données sont organisées sur
le disque, ...). Des liens en dur, c'est plusieurs noms pour le même
inode. Tu peux connaitre le numéro d'Inode avec « ls -i ».

--
Matthieu