Wann wird ein symbolischer Link als das behandelt, worauf er verweist, und wann als symbolischer Link?
Ein symbolischer Link kann auf eine Datei unterschiedlichen Typs verweisen. Nehmen wir beispielsweise mylk
einen symbolischen Link an, der auf ein Verzeichnis verweist. Die folgenden beiden bewirken unterschiedliche Dinge:
mv mylk ~
mv mylk/ ~
Hängt es davon ab, was ein Befehl von ihm erwartet, oder davon, wie er angegeben wird (unabhängig vom Befehl, der den Link verwendet)? Danke.
Antwort1
Ein Programm, das auf den Inhalt einer Datei einwirkt, wirkt immer auf das Ziel und nicht auf den symbolischen Link, da symbolische Links keinen eigenen Inhalt haben.
Ein Programm, das auf die Metadaten einer Datei (Zeitstempel, Besitzer, Berechtigungen usw.) einwirkt, wirkt normalerweise auf das Ziel, einige Programme verfügen jedoch über Optionen, um stattdessen auf den symbolischen Link einzuwirken (z. B. , chown -h
, touch -h
…).
Ein Programm, das auf einen Verzeichniseintrag einwirkt, wirkt normalerweise auf den symbolischen Link. Operationen wie Umbenennen und Löschen wirken auf einen Verzeichniseintrag ein, egal, um welchen Eintrag es sich handelt. Es gibt separate Systemaufrufe, um auf die Metadaten (einschließlich des Dateityps) einer Datei zuzugreifen, je nachdem, ob das Programm symbolischen Links folgen möchte (stat
) oder nicht (lstat
). Einige Programme, die auf jeden Verzeichniseintragstyp reagieren können, verfügen über Optionen, die ihnen sagen, dass sie auf das Ziel und nicht auf den Link reagieren sollen, wenn sie einen Link finden. Beispielsweise reagieren viele Dienstprogramme, die Verzeichnisse rekursiv durchlaufen ( find
, chown -R
, cp -R
, …), standardmäßig auf symbolische Links, folgen aber allen symbolischen Links, wenn Sie die Option angeben -L
, und folgen den symbolischen Links auf der Befehlszeile, aber nicht den symbolischen Links zu Verzeichnissen, die während der rekursiven Durchquerung gefunden wurden, wenn Sie die Option angeben -H
.
Wenn ein Dateiname einen abschließenden Schrägstrich hat, wird der Dateiname als Verzeichnis interpretiert.. Wenn der Name ein symbolischer Link ist, wird ihm gefolgt. mv mylk ~
Verschiebt also, was auch immer mylk
es ist (symbolischer Link oder etwas anderes), während mv mylk/ ~
verschiebt mylk
, wenn es ein Verzeichnis ist, oder das Ziel, wenn mylk
es ein symbolischer Link zu einem Verzeichnis ist, und beschwert sich, wenn mylk
es weder ein Verzeichnis noch ein symbolischer Link zu einem ist. Dieses allgemeine Verhalten