Багато утиліти Unix поводяться з посиланнями по-різному залежно від того, чи є косою косою рисою.
Така поведінка описана в документації POSIX Symbolic Link і також згадується в документації на GNU coreutils .
В основному, косою косою рисою означає дотримуватися (або "відкидання") посилання.
Наприклад, у наведеному нижче коді dirlink
означає символьне посилання, але dirlink/
означає каталог, на який вказує символьне посилання. rm
не видалить каталог, якщо ви не скажете rm -r
, але rm
без варіантів радісно видалить посилання.
$ 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
Це також корисно для перегляду дозволів каталогу, не турбуючись, чи справжній каталог чи просто символьне посилання на каталог.
$ 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/
і він як і раніше працює для звичайних каталогів:
$ 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/
Інший приклад - find
команда. Якщо path
ви попросите його шукати в симпосилання, воно за замовчуванням не буде слідувати за цим посиланням, тобто означає, що воно лише обробляє символьне посилання. Додавання останньої косої риси змушує трактувати символьне посилання як каталог, на який вказує посилання.
$ find dir
dir
dir/file
$ find dirlink
dirlink
$ find dirlink/
dirlink/
dirlink/file
(деякі версії знахідки мають опцію -follow
або -L
варіант, але це робить її за всіма посиланнями, а не лише першими)
У випадку з тим rsync
, чи слід додавати косу рису, залежить від того, чи хочете ви, щоб каталог, який ви копіюєте, був підкаталогом чи ні.
$ 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
Іншими словами:
rsync dir dir.bak
копії dir
в dir.bak
, роблячи dir
всерединіdir.bak
rsync dir/ dir.bak
копіює весь вміст dir
, не вносячи dir
всерединуdir.bak