Může mi někdo prosím vysvětlit následující možnosti readlink
příkaz v jednoduchém jazyce:
-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
Přijatá odpověď:
Myslím, že je to docela samovysvětlující, takže vlastně neznám tu část, která vám zní nejednoznačně...
Podívejme se na příklad:
–kanonizovat
$ 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
Ať jsou možnosti jakékoli, readlink
will:
– přeloží relativní cestu na absolutní cestu
– přeloží název symbolického odkazu na skutečnou cestu
A jak můžete vidět výše, pomocí -f
, readlink
je jedno, jestli poslední část této cesty (zde nonexistentfile.txt
) existuje nebo ne.
Pokud jiná část této cesty neexistuje, readlink
nevypíše nic a bude mít návratový kód jiný než 0 (což znamená, že došlo k chybě). Viz:
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
–canonicalize-existing
Pokud zkusíte totéž s -e
:
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
S -e
, v případě, že některá z komponent cesty neexistuje, readlink
nevypíše nic a bude mít návratový kód jiný než 0.
–canonicalize-missing
-m
volba je opakem -e
. Nebude proveden žádný test, který by zkontroloval, zda existují komponenty cesty:
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar