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)
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.
Eine Datei mit dem angegebenen Dateipfad wird erstellt. Daher wird es neu als Datei erstellt.
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
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
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'
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.
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