я использую
ln -f -s / var / www / html / Release / build1390 текущее приложение
для обновления символической ссылки "текущее приложение" с новым местом назначения. Однако это не работает, ссылка app-current сохраняет исходное место назначения, однако я не получаю никаких ошибок ...
Я бы предпочел не удалять ссылку и создавать ее заново, а просто обновляю цель существующей ссылки. Это возможно?
Это работает для меня, каков результат strace ln -f -s /var/www/html/releases/build1390 app-current
?
О, так как это каталог, вам нужно добавить -n
без разыменования, и это должно решить проблему. -f
действительно больше удобство, так как добавление -f в любом случае просто приводит к отключению. Хотя я предполагаю, что это могло бы произойти на несколько сотен мс быстрее в нормально загруженной системе.
Например, если arf уже указывает на / home:
strace с -n
:
strace ln -n -f -s / arf
...
symlink("/", "arf") = -1 EEXIST (File exists)
unlink("arf") = 0
symlink("/", "arf") = 0
strace Без -n
:
strace ln -f -s / arf
...
write(2, "ln: "..., 4ln: ) = 4
write(2, "`arf/': cannot overwrite director"..., 34`arf/': cannot overwrite directory) = 34
write(2, "\n"..., 1) = 1
Так что без -n
arf разыменовывается, поэтому ln обрабатывает его как arf, как если бы он был на самом деле /
. В вашем конкретном примере, если ошибки нет, я думаю, вы, вероятно, создали новую символическую ссылку внутри /var/www/html/releases/build1390 app-current
и захочется очистить это.
Ты можешь использовать -n
или --no-dereference
чтобы предотвратить разыменование цели, если это символическая ссылка. Вы также можете использовать -T
или --no-target-directory
чтобы гарантировать, что целевой файл будет всегда рассматриваться как обычный файл.
Они вызывают несколько иное поведение, как показано в следующем примере. Предположим src
это какой-то файл, dirlink
символическая ссылка на каталог, а dir
это актуальный каталог.
С помощью -n
:
ln -sfn src dirlink
перезаписывает dirlink
и связывает его с src
ln -sfn src dir
создает ссылку dir/src -> src
С помощью -T
:
ln -sfT src dirlink
перезаписывает dirlink
и связывает его с src
ln -sfT src dir
выдает сообщение об ошибке: ln: ‘dir’: cannot overwrite directory