Если у вас есть ссылка типа:
link -> foo/bar
и вы хотите изменить ее на:
link -> new/target
Есть два случая, которые следует учитывать:
foo / bar
не является каталогом или не существует, или вы нет доступа для поиска по foo
. Тогда
ln -s новая / целевая ссылка
завершится ошибкой, потому что ссылка
уже существует, но вы можете преодолеть это, используя стандарт:
ln -fs new / целевая ссылка
foo / bar
- это каталог (и у вас есть разрешение на поиск в foo
, чтобы определить, что foo / bar
является каталог). В этом случае, когда вы выполните:
ln -s new / target link
или
ln -fs new / target link
Это понимается как создание новая target
символическая ссылка внутри каталога link
( link
- это каталог, потому что это символическая ссылка на каталог foo / bar
). Итак, вы фактически создадите:
foo / bar / target -> new / target
Чтобы преодолеть это, GNU ln
имеет -T
], чтобы имя ссылки всегда рассматривалось как имя ссылки, а не как каталог для создания ссылки (-ов). Итак, с GNU ln
:
ln -fsT new / target link
будет работать. Как и раньше, он удалит исходную символическую ссылку link
и создаст ее заново с new / target
в качестве цели (и процессом euid и egid в качестве владельца).
GNU ln
также имеет параметр -n
. Он работает как -T
, за исключением случаев, когда ссылка
на самом деле является реальным каталогом, и в этом случае он все равно будет создавать символическую ссылку внутри этого каталога (вместо сбоя с ошибкой).
Наилучший вариант - сначала удалить ссылку, а затем воссоздать ее:
rm -f link && ln -s new / target link
В большинстве систем разрешения на символические ссылки игнорируется и обычно устанавливается на rwxrwxrwx
.
В системах, где важны разрешения символьной ссылки (например, OS / X, где вам нужно разрешение на чтение символьной ссылки, чтобы иметь возможность разрешить ее цель), обычно есть способ изменить их ( chmod -h
в ОС /ИКС).
Право собственности, хотя, как и выше, не имеет отношения к доступу к файлу, на который указывает символическая ссылка в большинстве систем, может иметь другое значение относительно бита t
родительского каталога или квот. . ) и есть стандартная команда для его изменения:
chown -h user[:group] the-link
chgrp -h group the-link