J'ai deux disques externes qui ont les mêmes fichiers. L'un est crypté, l'autre ne l'est pas. Le crypté a beaucoup moins d’espace disponible que le non crypté, je suppose maintenant que c’est à cause des liens en dur sur les disques non cryptés.
Je voudrais donc vérifier s’il existe des fichiers à liaison fixe qui pourraient être doublés sur le disque chiffré. Comment puis-je identifier un lien dur?
Si vous avez d'autres idées sur la raison du problème de l'espace libre, je suis ouvert aux idées. Est-il possible que les fichiers nécessitent plus d'espace en raison du cryptage?
$ find -type f -links +1
Cela montrera tous les fichiers ordinaires qui ont plus d’un lien (nom). Il ne vous dira pas quels noms sont liés au même fichier, vous pouvez donc utiliser -samefile
ou -inum
, par exemple. find -samefile "$somefile"
D'un point de vue technique, tous les fichiers (noms de fichiers) sont des liens (durs). C'est simplement que les fichiers avec plus d'un lien pointant vers eux sont intéressants en ce sens. Mais même dans ces cas, il n’ya aucun moyen de dire que l’un d’eux est le fichier "approprié" et l’autre un lien, les liens sont égaux.
Par exemple:
$ touch a b c
$ ln b b2 ; ln c c2
$ find -type f -links +1
./c2
./b
./b2
./c
$ find -samefile b
./b
./b2
Les réponses de @ ilkkachu et de @ barrycarter sont bonnes. Cette réponse est une alternative, qui décrit certains résultats avec plus de détails.
Si le {match is lié/les allumettes sont} liés dans la même arborescence, vous les trouverez directement.
Sinon, vous pouvez effectuer une recherche dans tout le système de fichiers à partir du point de montage, mais uniquement dans le même système de fichiers à l’aide de -xdev
, ce qui est important si vous recherchez la partition racine /
et il existe d'autres partitions montées.
_$ Sudo find / -xdev -type f -links +1 -ls | sort -n > hard-links-in-root.txt
_
Voici un exemple dans lequel une paire liée durement est trouvée dans le répertoire en cours et deux correspondances liées dans un autre répertoire en effectuant une recherche à partir du point de montage _/media/multimed-2
_ de la partition de données.
_$ Sudo find . -xdev -type f -links +1 -ls | sort -n
5242881 648 -rw-rw-r-- 2 olle nio 657936 jun 30 2015 ./like-this.png
5242882 940 -rw-rw-r-- 2 olle nio 957688 jun 30 2015 ./from-here.png
14843905 1620 -rw-r--r-- 2 olle nio 1652803 jun 30 2015 ./img_4810.jpg
14843905 1620 -rw-r--r-- 2 olle nio 1652803 jun 30 2015 ./mid-sommer-night_4810.jpg
$ find /media/multimed-2/ -samefile ./like-this.png
/media/multimed-2/Photos/2015/06/30/like-this.png
/media/multimed-2/Bilder/kartor/like-this.png
$ find /media/multimed-2/ -samefile ./from-here.png
/media/multimed-2/Photos/2015/06/30/from-here.png
/media/multimed-2/Bilder/kartor/from-here.png
_
Différents systèmes de fichiers (ext4, NTFS, FAT32 ...)
Une taille de partition différente, ce qui entraîne des différences de temps système (méta-données).
Taille de secteur différente sur le lecteur (peut-être?)
En théorie, les liens physiques ne devraient pas être distingués des fichiers normaux (c'est en quelque sorte le but). Si "x" est un lien dur vers "y", alors "y" est également un lien dur vers "x". Cela étant dit, la deuxième colonne de ls -l
vous indique le nombre de liens vers un fichier donné. Si ce nombre est supérieur à 1, le fichier est ou a un lien physique quelque part. Cela peut ne pas fonctionner pour les répertoires, mais je ne sais pas pourquoi. Au départ, je disais que chaque fichier d’un répertoire avait un lien vers ce répertoire, mais j’avais tort: j’ai trouvé un répertoire de 10 fichiers dont le "nombre de liens" n’était que de 2.
Une fois que vous avez trouvé le lien physique, vous pouvez utiliser ls -i
pour afficher son inode, puis utiliser l’option inode de find
pour rechercher le ou les autres fichiers avec le même inode (ce qui les rend plus liés). L'une et l'autre). Veillez à limiter find
à un périphérique spécifique, sinon vous risquez d'obtenir des résultats erronés.
Pour trouver tous les liens durs à la fois, faites en sorte que find
crache des inodes pour tous les fichiers d'un périphérique, puis utilisez des objets tels que sort
et uniq
pour rechercher les doublons.
Vous pouvez faire quelque chose comme ça:
find . -type t -ls | grep -v " 1 username"
Cela va lister les fichiers dans le répertoire courant et effectuer un ls
dessus. Comme @barrycarter l'a dit, les liens physiques ne peuvent pas être distingués des fichiers réels, mais dans cette liste, ils apparaîtront comme ayant plus d'un lien. En utilisant grep -v
vous éliminez les fichiers qui n’ont qu’un seul lien. (La username
de la commande grep a pour but de faire en sorte que grep se trouve au bon endroit pour le simple 1
. Remplacez-le par votre propre nom d'utilisateur.)