LINUX.ORG.RU

ln, ключ -n

 


1

1

Не понял, что даёт ключ -n. В справке написано:

-n, --no-dereference treat LINK_NAME as a normal file if it is a symbolic link to a directory

В другой справке:

-f If the target file already exists, then unlink it so that the link may occur. (The -f option overrides any previous -i options.)

-n If the target_file or target_dir is a symbolic link, do not follow it. This is most useful with the -f option, to replace a symlink which may point to a directory.

В opennet:

Считать файл куда обычным файлом, если явно заданный параметр куда является символьной ссылкой на каталог.

Когда куда является каталогом, а не символьной ссылкой на него, неоднозначностей не возникает. Ссылка создается в этом каталоге. Но когда куда является символьной ссылкой на каталог, то возможны две трактовки запроса пользователя. ln может считать dest обычным каталогом и создавать ссылку внутри него. С другой стороны, dest может быть рассмотрен не как каталог — а как собственно ссылка. В этом случае ln должна ее удалить или сделать резервную копию перед созданием новой ссылки. По умолчанию символьная ссылка на каталог считается обычным каталогом.

Но я всё равно не понял:

[root@localhost 000]# mkdir original
[root@localhost 000]# ln -s original linl
[root@localhost 000]# ln -sn linl linl_to_linl
[root@localhost 000]# ln -s linl linl_to_linl_without_n
[root@localhost 000]# ll
total 4
lrwxrwxrwx. 1 root root    8 Aug 26 05:17 linl -> original
lrwxrwxrwx. 1 root root    4 Aug 26 05:18 linl_to_linl -> linl
lrwxrwxrwx. 1 root root    4 Aug 26 05:18 linl_to_linl_without_n -> linl
drwxr-xr-x. 2 root root 4096 Aug 26 05:17 original

Ничего не измениломь, что с ключем -n, что без. Не могли бы вы продемонстировать ситуацию, когда ключ -n повлияет на результат?

★★★

Последнее исправление: iljuase (всего исправлений: 1)
atikhonov@atikhonov-thinkpad /tmp $ mkdir nya1
atikhonov@atikhonov-thinkpad /tmp $ mkdir nya2
atikhonov@atikhonov-thinkpad /tmp $ ln -s nya1 nya
atikhonov@atikhonov-thinkpad /tmp $ ln -s nya2 nya
atikhonov@atikhonov-thinkpad /tmp $ ls -l nya*
lrwxrwxrwx 1 atikhonov atikhonov  4 Aug 26 13:09 nya -> nya1

nya1:
total 0
lrwxrwxrwx 1 atikhonov atikhonov 4 Aug 26 13:09 nya2 -> nya2

nya2:
total 0
atikhonov@atikhonov-thinkpad /tmp $ ln -sn nya2 nya
ln: failed to create symbolic link ‘nya’: File exists
atikhonov@atikhonov-thinkpad /tmp $ ln -snf nya2 nya
atikhonov@atikhonov-thinkpad /tmp $ ls -l nya*
lrwxrwxrwx 1 atikhonov atikhonov  4 Aug 26 13:10 nya -> nya2

nya1:
total 0
lrwxrwxrwx 1 atikhonov atikhonov 4 Aug 26 13:09 nya2 -> nya2

nya2:
total 0
tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

Ключик -n имеет значение, когда уже существует такой симлинк, и он является симлинком на директорию. Без него создастся новый симлинк внутри директории, на которую указывает существующий симлинк, с ним (и с ключом -f) - поменяется существующий симлинк.

tiandrey ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.