# Connaître les différents liens durs d'un fichier

**URL:** <https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024>\
**Category:** Support Debian\
**Created:** [Juillet 28, 2021, 2:40 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024 "2021-07-28T14:40:44Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Juillet 28, 2021, 2:40 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/1 "2021-07-28T14:40:44Z")

</div>

Le titre de ce fil était prometteur…  
[Savoir ce qui est pointé par un inode](https://www.debian-fr.org/t/savoir-ce-qui-est-pointe-par-un-inode/9839)

mais ma question est différente:

Un fichier a plusieurs liens physiques, autrement dit, plusieurs path/noms.

Avec _find /home/user/ -samefile Fichier_, on obtient la réponse mais au prix d’une très longue recherche (plus de 800G de données).  
L’inode étant connu, n’y aurait-il pas moyen d’accéder immédiatement à son contenu donc aux différents noms de fichier?

---

<div class="post-metadata">

**Author:** ![anon90668717](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/3e96dc/32.png) [@anon90668717](https://www.debian-fr.org/u/anon90668717)\
**Post date:** [Juillet 28, 2021, 3:35 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/2 "2021-07-28T15:35:14Z")

</div>

```auto
find . -inum inode_number

```

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Juillet 28, 2021, 3:41 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/3 "2021-07-28T15:41:30Z")

</div>

Bonjour

L’inode d’un fichier ne permet d’accéder qu’au informations concernant ce fichier,  
mais pour rechercher les différents noms des chemins de fichier qui utiliseraient cet inode  
il faut parcourir l’arborescence des répertoires du système de fichiers dans lequel ce fichier a été créé.

Pour accélérer la recherche, tu pourrais limiter la recherche au seul système de fichiers contenant ce fichier en utilisant l’option **`xdev`** de la commande **`find`**.

À moins de ne vouloir récupérer que ceux qui sont dans les sous-répertoires d’un chemin donné,  
il vaudra mieux faire commencer la recherche à la racine (point de montage) du système de fichiers contenant le fichier.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 28, 2021, 9:19 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/4 "2021-07-28T21:19:07Z")

</div>

Si c’est un système de fichiers ext\*, `debugfs` peut trouver les chemins associés à un numéro d’inode. Mais j’ignore si c’est beaucoup plus rapide que `find`.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Juillet 28, 2021, 10:50 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/5 "2021-07-28T22:50:00Z")

</div>

**`debugfs`** doit être exécuté avec les privilèges du compte **`root`**

J’ai d’abord créé 2 liens durs sur le fichier **`~/Téléchargements/VMR6512.pdf`**  
puis j’ai fait un test :

```nohighlight
root@debbull:~# cheminFichier="/home/michel/Téléchargements/VMR6512.pdf"
root@debbull:~# debugfs -R 'ncheck '$(stat -c%i "$cheminFichier")'' $(df "$fileName" | awk 'NR>1 {print $1}') 2>/dev/null | awk 'NR>1 {print $2}'
/michel/Images/encoreUnAutreNomPourVMR6512.pdf
/michel/Documents/autreNomDeVMR6512.pdf
/michel/Téléchargements/VMR6512.pdf
root@debbull:~# 

```

**NOTE :**   
Le chemin retourné est relatif au point de montage du système de fichiers dans lequel sont le fichier et les liens durs.

Sur ma machine, les fichiers **`~/Téléchargements ~/Documents`** et **`~/Images`**  
sont des liens symboliques vers les répertoires **`/michel/Téléchargements /michel/Documents`** et **`/michel/Images`** qui sont dans un système de fichiers différent de celui utilisé pour le système debian.  
En fait, le point de montage de ce système de fichiers est /donnees/

* * *

Je ne sais pas si **`debugfs`** sera plus rapide qu’un **`find`**  
pour trouver les liens durs dans le contexte où [**josephtux**](https://www.debian-fr.org/u/josephtux) va utiliser ces lignes de commandes,

ni si il n’y a pas mieux à faire en ce qui concerne la syntaxe que j’ai utilisée  
dans ma ligne de commande **`debugfs`** (c’est la première fois que j’utilise cette commande)

---

<div class="post-metadata">

**Author:** ![anon70622873](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/278dde/32.png) [@anon70622873](https://www.debian-fr.org/u/anon70622873)\
**Post date:** [Juillet 30, 2021, 7:13 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/6 "2021-07-30T07:13:43Z")

</div>

> [@anon29980398](#):
>
> Je ne sais pas si **`debugfs`** sera plus rapide qu’un **`find`**

Je suis en train de tester sur une partition ext4 qui contient une sauvegarde incrémentale (~200Go de données).  
Debugfs a trouvé les 30 liens physiques en 3 minutes, find mouline toujours…

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Juillet 30, 2021, 7:52 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/7 "2021-07-30T07:52:09Z")

</div>

Super !  
Merci pour le retour 😃

Je n’avais pas de quoi tester,  
alors je suis très content de voir que cette ligne de commande soit aussi efficace.

---

<div class="post-metadata">

**Author:** ![anon70622873](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/278dde/32.png) [@anon70622873](https://www.debian-fr.org/u/anon70622873)\
**Post date:** [Juillet 30, 2021, 7:53 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/8 "2021-07-30T07:53:16Z")

</div>

Et 40 minutes plus tard find mouline encore… 😆

–  
Bon résultat des courses :

```auto
# time debugfs -R 'ncheck 29103259' /dev/sda1
…
real 2m50,546s
user 0m33,653s
sys 0m29,071s

```

```auto
# time find . -inum 29103259
…
real 57m5,340s
user 1m11,303s
sys 7m52,196s

```

3 minutes avec debugfs, 1 heure avec find. Il n’y pas photo.

Merci @PascalHambourg et @MicP pour avoir proposé l’utilisation de debugfs.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Août 3, 2021, 11:54 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/9 "2021-08-03T11:54:32Z")

</div>

Bonjour,  
je n’avais pas pris en compte le système de fichier. Mes données sont sur XFS.

J’ai cherché avec les outils XFS, j’ai trouvé «_xfs\_db_ » avec les options _blockget_ n et _nccheck_  
ainsi que la commande « _xfs\_ncheck -i_ »  
mais sans résultat (sans doute n’ais-je pas compris la syntaxe)

Merci à MicP d’avoir rappelé l’option _xdev_ que j’avais omis de signaler.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Août 3, 2021, 12:18 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/10 "2021-08-03T12:18:19Z")

</div>

Bonjour

Une ligne de commandes récupérée dans le fil de discussion suivant  
dans lequel vous trouverez la description détaillée de cette ligne de commandes  
et quelques remarques concernant le système de fichiers XFS et les inodes.

[https://superuser.com/questions/12972/how-can-you-see-the-actual-hard-link-by-ls](https://superuser.com/questions/12972/how-can-you-see-the-actual-hard-link-by-ls)

et testée sur la racine de mon système debian (fs en ext4)

```auto

find / -xdev \! -type d -links +1 -printf '%20D %20i %p\n' 2>/dev/zero | sort -n | uniq -w 42 --all-repeated=separate

```

(Je n’avais même pas remarqué qu’il existait tous ces liens durs sur mon système.)

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Août 3, 2021, 5:41 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/11 "2021-08-03T17:41:04Z")

</div>

Ligne de commande intéressante à étudier.  
(bien que je n’en vois pas bien l’utilité).  
Je préfère « -type f » à « ! type d » puisque ce sont généralement ces fichiers qui sont liés (et jamais les répertoires!)

J’utilise habituellement /dev/null comme sortie et /dev/zero comme entrée. Ai-je raison ou tord?

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Août 3, 2021, 6:45 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/12 "2021-08-03T18:45:05Z")

</div>

> [@josephtux](#):
>
> … Je préfère « -type f » à « ! type d » …

Extrait de la [description de la ligne de commandes](https://superuser.com/questions/12972/how-can-you-see-the-actual-hard-link-by-ls) :

> …  
> `! -type d ` **reject** directories: the `.` and `..` entries mean they’re always linked.  
> …

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Août 6, 2021, 6:15 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/13 "2021-08-06T18:15:42Z")

</div>

`-type f` ne rejette-t-il pas aussi aussi les répertoires ./ et ../ ?

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Août 8, 2021, 3:06 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/14 "2021-08-08T15:06:21Z")

</div>

Bonjour

> [@josephtux](#):
>
> `-type f` ne rejette-t-il pas aussi aussi les répertoires ./ et ../ ?

Oui, mais pas que les répertoires :  
Les liens durs vers un fichier de type lien symbolique ne seraient PAS listés.

* * *

Préparation du contexte pour les tests :

```plaintext
michel@debbull:~/testLiens$ touch fichierAlier
michel@debbull:~/testLiens$ ln --symbolic fichierAlier lienSymboliqueVersFichierAlier
michel@debbull:~/testLiens$ ln --physical lienSymboliqueVersFichierAlier lienDurPhysicalVerslienSymboliqueVersFichierAlier
michel@debbull:~/testLiens$ ln --logical lienSymboliqueVersFichierAlier lienDurLogicalVerslienSymboliqueVersFichierAlier
michel@debbull:~/testLiens$ 
michel@debbull:~/testLiens$ ls -l
total 0
-rw-r--r-- 2 michel michel 0 8 août 16:59 fichierAlier
-rw-r--r-- 2 michel michel 0 8 août 16:59 lienDurLogicalVerslienSymboliqueVersFichierAlier
lrwxrwxrwx 2 michel michel 12 8 août 17:00 lienDurPhysicalVerslienSymboliqueVersFichierAlier -> fichierAlier
lrwxrwxrwx 2 michel michel 12 8 août 17:00 lienSymboliqueVersFichierAlier -> fichierAlier
michel@debbull:~/testLiens$ 

```

Les tests :

```plaintext
michel@debbull:~/testLiens$ find . -xdev -type f -links +1 -printf '%20D %20i %p\n' 2>/dev/zero | sort -n | uniq -w 42 --all-repeated=separate
                2069 261320 ./fichierAlier
                2069 261320 ./lienDurLogicalVerslienSymboliqueVersFichierAlier
michel@debbull:~/testLiens$ 

```

```plaintext
michel@debbull:~/testLiens$ find . -xdev \! -type d -links +1 -printf '%20D %20i %p\n' 2>/dev/zero | sort -n | uniq -w 42 --all-repeated=separate
                2069 261320 ./fichierAlier
                2069 261320 ./lienDurLogicalVerslienSymboliqueVersFichierAlier

                2069 262034 ./lienDurPhysicalVerslienSymboliqueVersFichierAlier
                2069 262034 ./lienSymboliqueVersFichierAlier
michel@debbull:~/testLiens$ 

```

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Août 10, 2021, 11:18 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/15 "2021-08-10T11:18:30Z")

</div>

Ça fait toujours du bien de s’instruire… merci  
Mais j’avoue que mon usage limité et basique de l’ordinateur ne m’avais pas encore confronté à cet usage, d’utiliser (volontairement) des liens durs sur des liens symboliques.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Août 10, 2021, 11:42 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/16 "2021-08-10T11:42:51Z")

</div>

C’est vrai qu’il y a des fonctionnalités dont on ne voit pas du tout l’intérêt …  
…et puis un jour, on se rend compte que c’est exactement ce qu’il nous faut pour résoudre un problème qu’on avait jamais rencontré avant.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Août 10, 2021, 11:55 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/17 "2021-08-10T11:55:42Z")

</div>

> [@josephtux](#):
>
> des liens durs sur des liens symboliques

Je sens que ça peut facilement devenir un piège abscons avec les liens relatifs.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Août 10, 2021, 12:24 UTC](https://www.debian-fr.org/t/connaitre-les-differents-liens-durs-dun-fichier/85024/18 "2021-08-10T12:24:42Z")

</div>

> [@PascalHambourg](#):
>
> … ça peut facilement devenir un piège abscons …

Oui, mais si on était sur un système Windows,  
ce genre de truc pourrait vite devenir «&nbsp;a new feature&nbsp;»
