Kann mir bitte jemand die folgenden Optionen von readlink
erklären Befehl in einfacher Sprache:
-f, --canonicalize
canonicalize by following every symlink in every component of
the given name recursively; all but the last component must
exist
-e, --canonicalize-existing
canonicalize by following every symlink in every component of
the given name recursively, all components must exist
-m, --canonicalize-missing
canonicalize by following every symlink in every component of
the given name recursively, without requirements on components
existence
Akzeptierte Antwort:
Ich denke, es ist ziemlich selbsterklärend, daher kenne ich den Teil, der für Sie zweideutig klingt, nicht wirklich…
Mal sehen mit einem Beispiel:
–kanonisieren
$ mkdir /tmp/realdir
$ mkdir /tmp/subdir
$ ln -s /tmp/realdir /tmp/subdir/link
$ cd /tmp
$ readlink -f ./subdir/link/nonexistentdir/
/tmp/realdir/nonexistentdir
$ readlink -f ./subdir/link/nonexistentfile.txt
/tmp/realdir/nonexistentfile.txt
Was auch immer die Optionen sind, readlink
wird:
– den relativen Pfad in den absoluten Pfad übersetzen
– den Symlink-Namen in den echten Pfad übersetzen
Und wie Sie oben sehen können, mit -f
, readlink
egal ob der letzte Teil dieses Pfades (hier nonexistentfile.txt
) existiert oder nicht.
Wenn ein anderer Teil dieses Pfads nicht existiert, readlink
gibt nichts aus und hat einen anderen Rückgabecode als 0 (was bedeutet, dass ein Fehler aufgetreten ist). Siehe:
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
–canonicalize-existing
Wenn Sie dasselbe mit -e
versuchen :
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
Mit -e
, falls eine der Pfadkomponenten nicht vorhanden ist, readlink
gibt nichts aus und hat einen anderen Rückgabecode als 0.
–canonicalize-missing
-m
Option ist das Gegenteil von -e
. Es wird nicht geprüft, ob die Komponenten von path:
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar