Wiele narzędzi uniksowych traktuje dowiązania symboliczne w różny sposób w zależności od tego, czy występuje ukośnik końcowy.
To zachowanie jest opisane w dokumentacji POSIX Symbolic Link i jest również wspomniane w dokumentacji GNU coreutils .
Zasadniczo ukośnik końcowy oznacza śledzenie (lub „dereferencję”) dowiązania symbolicznego.
Na przykład w poniższym kodzie dirlink
oznacza dowiązanie symboliczne, ale dirlink/
oznacza katalog, do którego prowadzi dowiązanie symboliczne. rm
nie usunie katalogu, chyba że powiesz rm -r
, ale rm
bez opcji z przyjemnością usunie dowiązanie symboliczne.
$ mkdir dir
$ ln -s dir dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ rm dirlink/
rm: cannot remove `dirlink/': Is a directory
$ rm dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
Jest także przydatny do przeglądania uprawnień do katalogu, bez konieczności zawracania sobie głowy tym, czy katalog jest prawdziwym katalogiem, czy tylko dowiązaniem symbolicznym do katalogu.
$ ls -ld dirlink
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:46 dirlink -> dir
$ ls -ld dirlink/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dirlink/
i nadal działa dla zwykłych katalogów:
$ ls -ld dir
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir
$ ls -ld dir/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir/
Innym przykładem jest find
polecenie. Jeśli path
poprosisz go o wyszukiwanie, jest to dowiązanie symboliczne, domyślnie nie podąży ono za dowiązaniem symbolicznym, co oznacza, że przetwarza tylko dowiązanie symboliczne. Dodanie ukośnika powoduje, że traktuje dowiązanie symboliczne jako katalog, do którego prowadzi dowiązanie.
$ find dir
dir
dir/file
$ find dirlink
dirlink
$ find dirlink/
dirlink/
dirlink/file
(niektóre wersje find mają opcję -follow
lub -L
, ale dzięki temu podążają za wszystkimi dowiązaniami symbolicznymi, nie tylko pierwszymi)
To rsync
, czy powinieneś dodać ukośnik, zależy od tego, czy chcesz, aby katalog, który kopiujesz, był podkatalogiem, czy nie.
$ mkdir dir
$ touch dir/file
$ rsync -r dir dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/dir
./dir.bak/dir/file
$ rm -r dir.bak
$ rsync -r dir/ dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/file
Innymi słowy:
rsync dir dir.bak
kopiuje dir
do dir.bak
, robiąc w dir
środkudir.bak
rsync dir/ dir.bak
kopiuje całą zawartość dir
bez robienia w dir
środkudir.bak