[LINUX] J'ai étudié le comportement de la différence entre lien dur et lien symbolique

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)

Qu'est-ce qu'un lien physique?

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.

Qu'est-ce qu'un lien symbolique?

Un fichier avec le chemin de fichier spécifié est créé. Par conséquent, il est nouvellement créé en tant que fichier.

J'ai essayé de créer un lien dur

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

J'ai essayé de créer un lien symbolique

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

J'ai essayé de créer des liens physiques et des liens symboliques sur différents systèmes de fichiers!

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'

Essayez ensuite de déplacer le lien physique créé vers un autre système de fichiers

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é.

À la fin

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

J'ai étudié le comportement de la différence entre lien dur et lien symbolique
Caractéristiques du lien symbolique et dur
Quelle est la différence entre les liens symboliques et les liens durs?
Liens physiques et liens symboliques
Prise en compte de la différence entre la courbe ROC et la courbe PR
J'ai étudié le mécanisme de connexion flask!
J'ai étudié la relation entre le LSTM avec état de Keras et l'état caché
Quelle est la différence entre «pip» et «conda»?
À propos du comportement de copy, deepcopy et numpy.copy
Résumé des différences entre PHP et Python
La réponse de "1/2" est différente entre python2 et 3
À propos de la différence entre "==" et "is" en python
J'ai lu et implémenté les variantes de UKR
Modélisation-estimation de Bayes de la différence entre les deux groupes-
À propos de la différence entre PostgreSQL su et sudo
Quelle est la différence entre Unix et Linux?
Le comportement de @property est différent entre la définition de classe et les styles anciens et nouveaux
Différence approximative entre Unicode et UTF-8 (et ses compagnons)
BERT peut-il comprendre la différence entre «Ame (bonbons)» et «Ame (pluie)»?
Différence entre Ruby et Python en termes de variables
Quelle est la différence entre usleep, nanosleep et clock_nanosleep?
Le comportement de retrait de json.dumps est différent entre python2 et python3
J'ai vérifié les versions de Blender et Python
J'ai examiné le mappage de données entre ArangoDB et Java
J'ai vérifié le système d'exploitation et le shell par défaut de docker-machine
Visualisation de la connexion entre le malware et le serveur de rappel
J'ai étudié le temps de calcul de "X dans la liste" (recherche linéaire / recherche dichotomique) et "X dans l'ensemble"
Comment utiliser argparse et la différence entre optparse
J'ai étudié l'algorithme d'apprentissage de renforcement du trading d'algorithmes
Module Python num2words Différence de comportement entre l'anglais et le russe
Comprendre la différence entre l'affectation cumulative aux variables et l'affectation cumulative aux objets
Un résumé approximatif des différences entre Windows et Linux
J'ai essayé un peu le comportement de la fonction zip
Je veux connaître la nature de Python et pip
J'ai essayé d'énumérer les différences entre java et python
Différence entre le processus de premier plan et le processus d'arrière-plan compris par principe
J'ai affiché le chat de YouTube Live et essayé de jouer
Différence entre processus et travail
Différence entre "categorical_crossentropy" et "sparse_categorical_crossentropy"
Différence entre np.array et np.arange
Différence entre MicroPython et CPython
Différence entre ps a et ps -a
Différence entre return et print-Python
J'ai essayé de trouver la différence entre A + = B et A = A + B en Python, alors notez
Je ne suis pas sûr de la différence entre les modules, les packages et les bibliothèques, alors j'ai essayé de les organiser.
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de la régression logistique
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de l'arbre de décision
J'ai étudié la méthode X-means qui estime automatiquement le nombre de clusters
J'ai résumé comment changer les paramètres de démarrage de GRUB et GRUB2
Python> Extraire la valeur de list (unpack)> Add *> Vous m'avez appris la différence entre Python 2 et Python 3 concernant print (* mylist) / print ().
J'ai essayé de comprendre la normalisation spectrale et la décomposition de valeurs singulières qui contribuent à la stabilité du GAN.
J'ai essayé de faire la différence de Config avant et après le travail avec le script pyATS / Genie self-made
Différence entre Ruby et Python Split
Différence entre java et python (mémo)
L'histoire de Python et l'histoire de NaN
Différence entre list () et [] en Python
Différence entre SQLAlchemy filter () et filter_by ()
Différence entre == et est en python