Je voulais connaître la différence entre les liens durs et les liens symboliques.
L'environnement est ici.
# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
Un lien physique est l'une des fonctions du système de fichiers, dans lequel plusieurs noms sont donnés à la substance d'un certain fichier ou répertoire afin que chacun d'eux fonctionne de la même manière que le nom de fichier / nom de répertoire réel. Si vous créez un lien physique, vous aurez le même fichier. La différence avec le lien symbolique est que le lien symbolique crée un fichier avec le chemin menant au fichier spécifié, mais le lien physique contient les mêmes données que le fichier spécifié lui-même.
Un fichier avec le chemin de fichier spécifié est créé. Par conséquent, il est nouvellement créé en tant que fichier.
Vous pouvez créer un lien physique à l'aide de la commande ln. Nom du lien physique du fichier d'origine Si vous créez un lien physique, vous pouvez voir que le fichier d'origine et le numéro d'inode du lien physique (numéro le plus à gauche) sont identiques. Ici, c'est 8409199. Puisque le numéro d'inode est l'état réel du fichier, il semble qu'il y ait deux fichiers, mais en réalité, on peut dire qu'il s'agit d'un seul fichier.
# echo "hogehoge2" > test
# ln test hardlink
# ls -li
8409199 -rw-r--r--2 racine racine 10 24 juin 21:13 hardlink
8409199 -rw-r--r--2 racine racine 10 24 juin 21:13 test
Ensuite, essayez de créer un lien symbolique. Vous pouvez créer un lien symbolique avec ln -s. À partir des résultats ci-dessous, vous pouvez voir que des fichiers avec des numéros d'inode différents ont été créés. On peut considérer qu'un fichier a été créé pour faire référence au fichier spécifié.
# ls -il test symblink hardlink
8409199 -rw-r--r--2 racine racine 10 24 juin 21:13 hardlink
8409209 lrwxrwxrwx 1 racine racine 5 24 juin 21:53 symblink -> test
8409199 -rw-r--r--2 racine racine 10 24 juin 21:13 test
En passant, si vous regardez le contenu de chaque fichier, vous pouvez voir qu'ils sont tous identiques. Parce qu'ils font tous référence au même fichier!
# cat test
hogehoge2
# cat hardlink
hogehoge2
# cat symblink
hogehoge2
Même si vous modifiez le contenu du fichier de lien symbolique, tous les fichiers seront modifiés. Parce qu'ils font tous référence au même fichier! !!
# echo "add hoge" >> symblink
# cat test
hogehoge2
add hoge
# cat hardlink
hogehoge2
add hoge
# cat symblink
hogehoge2
add hoge
Les liens physiques se voient attribuer des numéros d'inœuds uniques dans le système de fichiers et les liens physiques ne peuvent pas être créés dans différents systèmes de fichiers. Voyons comment il se comporte.
Tout d'abord, essayez de créer un fichier.
# touch fileA
# ls -i fileA
8409208 fileA
Vérifiez le système de fichiers avec la commande df. Comme je travaillais dans mon répertoire personnel, le système de fichiers avec fileA a une position de montage de /. Cette fois, voyons le comportement lorsqu'un lien physique est créé sous / dev / shm.
# df
Filesys 1K-Le bloc peut être utilisé peut être utilisé%Position de montage
devtmpfs 495352 0 495352 0% /dev
tmpfs 507412 0 507412 0% /dev/shm
tmpfs 507412 6876 500536 2% /run
tmpfs 507412 0 507412 0% /sys/fs/cgroup
/dev/mapper/centos-root 6486016 1198776 5287240 19% /
/dev/sda1 1038336 139372 898964 14% /boot
tmpfs 101484 0 101484 0% /run/user/0
J'obtiens une erreur lorsque je crée un lien physique. Il s'avère que cela rend impossible la création de liens physiques sur différents systèmes de fichiers. Dans le cas de liens symboliques, vous pouvez créer des liens sur différents systèmes de fichiers. Cependant, le lien est rompu.
# ln fileA /dev/shm/fileA-2
ln: `/dev/shm/fileA-2'De`fileA'Échec de la création d'un lien physique vers:Lien inter-appareils non valide
# ln -s fileA /dev/shm/fileA-2
# cat /dev/shm/fileA-2
cat: /dev/shm/fileA-2:Trop de hiérarchies de liens symboliques
# file /dev/shm/fileA-2
/dev/shm/fileA-2: broken symbolic link to `fileA'
Créez trois liens physiques pour fileA et déplacez l'un d'entre eux vers un autre système de fichiers.
# ln fileA fileA-2
# ln fileA-2 fileA-3
# ls -li fileA*
8409208 -rw-r--r--3 racine racine 0 24 juin 21:35 fileA
8409208 -rw-r--r--3 racine racine 0 24 juin 21:35 fileA-2
8409208 -rw-r--r--3 racine racine 0 24 juin 21:35 fileA-3
Parmi ceux-ci, essayez de déplacer le fichier-3 sous / dev / shm. D'après le résultat de ls -l, on peut voir que le nombre de liens physiques a diminué après le déplacement. Avant de déménager) 8409208 -rw-r - r-- 3 root root 0 24 juin 21:35 fileA-2 ↑ Ceci est 3, et il est indiqué qu'il y a trois liens durs. Après avoir déménagé) 8409208 -rw-r - r-- 2 root root 0 24 juin 21:35 fileA-2 Le nombre de matériel pour fichier-1 et fichier-2 est 2. 18911 -rw-r - r-- 1 racine racine 0 24 juin 21:35 / dev / shm / fileA-3 Il y en a un pour le fichier-3.
# mv fileA-3 /dev/shm/
# ls -li fileA*
8409208 -rw-r--r--2 racine racine 0 24 juin 21:35 fileA
8409208 -rw-r--r--2 racine racine 0 24 juin 21:35 fileA-2
# ls -li /dev/shm/fileA-3
18911 -rw-r--r--1 racine racine 0 24 juin 21:35 /dev/shm/fileA-3
Lorsque j'édite le contenu du fichier, les modifications ne sont pas reflétées dans le fichier (fileA-3) déplacé vers un système de fichiers différent.
# echo "hello" > fileA
# cat fileA
hello
# cat fileA-2
hello
# cat /dev/shm/fileA-3
((Rien ne s'affiche !!))
À partir de là, il a été constaté que lorsque le lien physique est déplacé par la commande mv, il est supprimé du système de fichiers d'origine et un nouveau fichier est créé dans le système de fichiers spécifié.
Cette fois, j'ai étudié les liens physiques et les liens symboliques et vérifié leur comportement. Il y a beaucoup de choses que je ne comprends toujours pas les bases, mais je vais les étudier une par une.
référence) https://qiita.com/lnznt/items/6178e1c5f066f22fe9c2#%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%B8%E3%81%AE-mv
Recommended Posts