Quelqu'un peut-il m'expliquer les options suivantes de readlink
commande en langage simple :
-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
Réponse acceptée :
Je pense que c'est assez explicite, donc je ne connais pas vraiment la partie qui vous semble ambiguë…
Voyons avec un exemple :
–canoniciser
$ 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
Quelles que soient les options, readlink
va :
– traduire le chemin relatif en chemin absolu
– traduire le nom du lien symbolique en chemin réel
Et comme vous pouvez le voir ci-dessus, avec -f
, readlink
ne se soucie pas si la dernière partie de ce chemin (ici nonexistentfile.txt
) existe ou non.
Si une autre partie de ce chemin n'existe pas, readlink
n'affichera rien et aura un code de retour différent de 0 (ce qui signifie qu'une erreur s'est produite). Voir :
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
–canonicaliser-existant
Si vous essayez la même chose avec -e
:
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
Avec -e
, si l'un des composants du chemin n'existe pas, readlink
n'affichera rien et aura un code de retour différent de 0.
–canonicaliser-manquant
-m
l'option est l'opposé de -e
. Aucun test ne sera fait pour vérifier si les composants du chemin existent :
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar