[LINUX] Ich untersuchte das Verhalten bezüglich des Unterschieds zwischen Hard Link und Symbolic Link

Ich wollte den Unterschied zwischen harten und symbolischen Links kennen.

Die Umwelt ist hier.

# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

Was ist eine harte Verbindung?

Ein fester Link ist eine der Funktionen des Dateisystems, bei dem einer Datei oder einem Verzeichnis mehrere Namen zugewiesen werden, sodass jeder von ihnen gleichermaßen als tatsächlicher Dateiname / Verzeichnisname fungiert. Wenn Sie einen festen Link erstellen, haben Sie dieselbe Datei. Der Unterschied zur symbolischen Verknüpfung besteht darin, dass die symbolische Verknüpfung eine Datei mit dem Pfad zur angegebenen Datei erstellt, die feste Verknüpfung jedoch dieselben Daten wie die angegebene Datei selbst enthält.

Was ist eine symbolische Verbindung?

Eine Datei mit dem angegebenen Dateipfad wird erstellt. Daher wird es neu als Datei erstellt.

Ich habe versucht, eine feste Verbindung herzustellen

Mit dem Befehl ln können Sie eine feste Verknüpfung erstellen. ln Originaldatei Hardlink-Name Wenn Sie einen Hardlink erstellen, sehen Sie, dass die Originaldatei und die Inode-Nummer des Hardlinks (Nummer ganz links) identisch sind. Hier ist es 8409199. Da die Inode-Nummer der tatsächliche Status der Datei ist, sieht es so aus, als gäbe es zwei Dateien, aber in Wirklichkeit kann man sagen, dass es sich um eine Datei handelt.

# echo "hogehoge2" > test
# ln test hardlink
# ls -li
8409199 -rw-r--r--2 Wurzel Wurzel 10 24. Juni 21:13 hardlink
8409199 -rw-r--r--2 Wurzel Wurzel 10 24. Juni 21:13 test

Ich habe versucht, eine symbolische Verknüpfung herzustellen

Versuchen Sie als Nächstes, eine symbolische Verknüpfung zu erstellen. Sie können eine symbolische Verknüpfung mit ln -s erstellen. Anhand der folgenden Ergebnisse können Sie erkennen, dass Dateien mit unterschiedlichen Inode-Nummern erstellt wurden. Es kann davon ausgegangen werden, dass eine Datei erstellt wurde, die auf die angegebene Datei verweist.

# ls -il test symblink hardlink 
8409199 -rw-r--r--2 Wurzel Wurzel 10 24. Juni 21:13 hardlink
8409209 lrwxrwxrwx 1 root root 5 24. Juni 21:53 symblink -> test
8409199 -rw-r--r--2 Wurzel Wurzel 10 24. Juni 21:13 test

Wenn Sie sich den Inhalt jeder Datei ansehen, sehen Sie übrigens, dass sie alle gleich sind. Weil sie sich alle auf dieselbe Datei beziehen!

# cat test
hogehoge2
# cat hardlink 
hogehoge2
# cat symblink
hogehoge2

Selbst wenn Sie den Inhalt der symbolischen Linkdatei ändern, werden alle Dateien geändert. Weil sie sich alle auf dieselbe Datei beziehen! !!

# echo "add hoge" >> symblink
# cat test
hogehoge2
add hoge
# cat hardlink 
hogehoge2
add hoge
# cat symblink
hogehoge2
add hoge

Ich habe versucht, Hardlinks und symbolische Links auf verschiedenen Dateisystemen zu erstellen!

Hardlinks werden innerhalb des Dateisystems eindeutige Inode-Nummern zugewiesen, und Hardlinks können nicht in verschiedenen Dateisystemen erstellt werden. Mal sehen, wie es sich verhält.

Versuchen Sie zunächst, eine Datei zu erstellen.

# touch fileA
# ls -i fileA 
8409208 fileA

Überprüfen Sie das Dateisystem mit dem Befehl df. Da ich in meinem Home-Verzeichnis gearbeitet habe, hat das Dateisystem mit fileA die Mount-Position /. Sehen wir uns diesmal das Verhalten an, wenn unter / dev / shm ein fester Link erstellt wird.

# df
Filesys 1K-Block kann verwendet werden kann verwendet werden%Montageposition
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

Ich erhalte eine Fehlermeldung, wenn ich einen festen Link erstelle. Es stellt sich heraus, dass dies das Erstellen von Hardlinks auf verschiedenen Dateisystemen unmöglich macht. Bei symbolischen Links können Sie Links auf verschiedenen Dateisystemen erstellen. Die Verbindung ist jedoch unterbrochen.

# ln fileA /dev/shm/fileA-2
ln: `/dev/shm/fileA-2'Von`fileA'Fehler beim Erstellen eines festen Links zu:Ungültige geräteübergreifende Verbindung
# ln -s fileA /dev/shm/fileA-2
# cat /dev/shm/fileA-2
cat: /dev/shm/fileA-2:Zu viele Hierarchien symbolischer Verknüpfungen
# file /dev/shm/fileA-2
/dev/shm/fileA-2: broken symbolic link to `fileA'

Versuchen Sie dann, den erstellten Hardlink in ein anderes Dateisystem zu verschieben

Erstellen Sie drei feste Links für fileA und verschieben Sie einen davon in ein anderes Dateisystem.

# ln fileA fileA-2
# ln fileA-2 fileA-3
# ls -li fileA*
8409208 -rw-r--r--3 root root 0 24. Juni 21:35 fileA
8409208 -rw-r--r--3 root root 0 24. Juni 21:35 fileA-2
8409208 -rw-r--r--3 root root 0 24. Juni 21:35 fileA-3

Versuchen Sie, Datei-3 unter / dev / shm zu verschieben. Aus dem Ergebnis von ls -l ist ersichtlich, dass die Anzahl der festen Verbindungen nach dem Verschieben abgenommen hat. Vor dem Umzug) 8409208 -rw-r - r-- 3 root root 0 24. Juni 21:35 fileA-2 ↑ Dies ist 3, und es wird angegeben, dass es drei feste Verbindungen gibt. Nach dem Umzug) 8409208 -rw-r - r-- 2 root root 0 24. Juni 21:35 fileA-2 Die Anzahl der Hardware für Datei-1 und Datei-2 beträgt 2. 18911 -rw-r - r-- 1 root root 0 24. Juni 21:35 / dev / shm / fileA-3 Es gibt eine für Datei-3.

# mv fileA-3 /dev/shm/
# ls -li fileA*
8409208 -rw-r--r--2 root root 0 24. Juni 21:35 fileA
8409208 -rw-r--r--2 root root 0 24. Juni 21:35 fileA-2
# ls -li /dev/shm/fileA-3 
18911 -rw-r--r--1 Wurzel Wurzel 0 24. Juni 21:35 /dev/shm/fileA-3

Wenn ich den Inhalt der Datei bearbeite, werden die Änderungen nicht in der Datei (Datei A-3) wiedergegeben, die in ein anderes Dateisystem verschoben wurde.

# echo "hello" > fileA
# cat fileA
hello
# cat fileA-2 
hello
# cat /dev/shm/fileA-3 
((Nichts wird angezeigt !!))

Daraus wurde festgestellt, dass der Hardlink, wenn er durch den Befehl mv verschoben wird, aus dem ursprünglichen Dateisystem gelöscht und eine neue Datei im angegebenen Dateisystem erstellt wird.

Am Ende

Dieses Mal habe ich Hardlinks und symbolische Links untersucht und deren Verhalten überprüft. Es gibt viele Dinge, die ich immer noch nicht verstehe, aber ich werde eins nach dem anderen lernen.

Referenz) 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

Ich untersuchte das Verhalten bezüglich des Unterschieds zwischen Hard Link und Symbolic Link
Merkmale der symbolischen und harten Verbindung
Was ist der Unterschied zwischen symbolischen und harten Links?
Harte Links und symbolische Links
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
Ich untersuchte die Beziehung zwischen Keras 'zustandsbehaftetem LSTM und verstecktem Zustand
Was ist der Unterschied zwischen "pip" und "conda"?
Über das Verhalten von copy, deepcopy und numpy.copy
Zusammenfassung der Unterschiede zwischen PHP und Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Über den Unterschied zwischen "==" und "is" in Python
Ich habe die Varianten von UKR gelesen und implementiert
Bayes Modellierung-Schätzung des Unterschieds zwischen den beiden Gruppen-
Über den Unterschied zwischen PostgreSQL su und sudo
Was ist der Unterschied zwischen Unix und Linux?
Das Verhalten von @property unterscheidet sich zwischen Klassendefinition und alten und neuen Stilen
Grober Unterschied zwischen Unicode und UTF-8 (und seinen Begleitern)
Kann BERT den Unterschied zwischen "Ame (Süßigkeiten)" und "Ame (Regen)" verstehen?
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Was ist der Unterschied zwischen usleep, nanosleep und clock_nanosleep?
Das Einrückungsverhalten von json.dumps unterscheidet sich zwischen python2 und python3
Ich habe mir die Versionen von Blender und Python angesehen
Ich habe die Datenzuordnung zwischen ArangoDB und Java untersucht
Ich habe das Standardbetriebssystem und die Shell der Docker-Maschine überprüft
Visualisierung der Verbindung zwischen Malware und dem Callback-Server
Ich habe die Berechnungszeit von "X in Liste" (lineare Suche / dichotome Suche) und "X in Menge" untersucht.
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Ich untersuchte den stärkenden Lernalgorithmus des Algorithmushandels
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
Eine grobe Zusammenfassung der Unterschiede zwischen Windows und Linux
Ich habe ein wenig versucht, das Verhalten der Zip-Funktion
Ich möchte die Natur von Python und Pip kennenlernen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Unterschied zwischen Vordergrundprozess und Hintergrundprozess, prinzipiell verstanden
Ich habe den Chat von YouTube Live angezeigt und versucht zu spielen
Unterschied zwischen Prozess und Job
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Ich bin mir über den Unterschied zwischen Modulen, Paketen und Bibliotheken nicht sicher und habe versucht, sie zu organisieren.
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
[Python] Ich habe die Theorie und Implementierung der logistischen Regression gründlich erklärt
[Python] Ich habe die Theorie und Implementierung des Entscheidungsbaums gründlich erklärt
Ich habe die X-Means-Methode untersucht, mit der die Anzahl der Cluster automatisch geschätzt wird
Ich habe zusammengefasst, wie die Boot-Parameter von GRUB und GRUB2 geändert werden
Python> Extrahieren Sie den Wert von list (entpacken)> Hinzufügen *> Sie haben mir den Unterschied zwischen Python 2 und Python 3 in Bezug auf print (* mylist) / print () beigebracht.
Ich habe mich sehr bemüht, die spektrale Normalisierung und die Singularwertzerlegung zu verstehen, die zur Stabilität von GAN beitragen.
Ich habe versucht, den Unterschied zwischen Config vor und nach der Arbeit mit pyATS / Genie selbst erstelltem Skript zu berücksichtigen
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Die Geschichte von Python und die Geschichte von NaN
Unterschied zwischen list () und [] in Python
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Unterschied zwischen == und ist in Python