In Unix-artigen Systemen wird die Datenstruktur, die Dateisystemobjekte darstellt (mit anderen Worten, die Daten zu einer Datei), in einer sogenannten "Inode" gespeichert.
Ein Dateiname ist nur eine Verknüpfung zu diesem Inode und wird als "harte Verknüpfung" bezeichnet. Es gibt keinen Unterschied zwischen dem Vornamen einer Datei und einem nachfolgenden Link. Die Antwort lautet also "Ja": Ein fester Link ist eine reguläre Datei, und tatsächlich ist eine reguläre Datei ein fester Link.
Der ls
Befehl zeigt Ihnen, wie viele feste Links zu der Datei vorhanden sind.
Beispielsweise:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Hier haben wir eine Datei namens erstellt /tmp/hello.txt
. Das 1
in der Ausgabe von ls -l
gibt an, dass 1 fester Link zu dieser Datei vorhanden ist. Dieser feste Link ist der Dateiname /tmp/hello.txt
.
Wenn wir jetzt einen weiteren festen Link zu dieser Datei erstellen:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Sie können jetzt sehen, dass beide Dateinamen darauf hinweisen, dass es zwei feste Links zu der Datei gibt. Keiner von beiden ist der "richtige" Dateiname, beide sind gleichermaßen gültig. Wir können sehen, dass beide auf dieselbe Inode verweisen (in diesem Fall 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Es gibt ein weit verbreitetes Missverständnis, dass dies für Verzeichnisse anders ist. Ich habe gehört, dass die Anzahl der von ls
einem Verzeichnis zurückgegebenen Links der Anzahl der Unterverzeichnisse entspricht, einschließlich .
und ..
was falsch ist . Oder zumindest, obwohl es Ihnen die richtige Nummer gibt, ist es aus den falschen Gründen richtig!
Wenn wir ein Verzeichnis erstellen und ein tun, erhalten ls -ld
wir:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
Dies zeigt, dass es 2 feste Links zu diesem Verzeichnis gibt. Diese sind:
/tmp/testdir
/tmp/testdir/.
Beachten Sie, dass /tmp/testdir/..
ist nicht ein Link zu diesem Verzeichnis, es ist ein Link zu /tmp
. Und das sagt Ihnen, warum die Sache "Anzahl der Unterverzeichnisse" funktioniert. Wenn wir ein neues Unterverzeichnis erstellen:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
Sie können jetzt sehen, dass es 3 feste Verbindungen zum /tmp/testdir
Verzeichnis gibt. Diese sind:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Jedes neue Unterverzeichnis erhöht also die Anzahl der Links aufgrund des ..
darin enthaltenen Eintrags um eins .