Подтвердить что ты не робот

Невозможно перезаписать Symbolic Link RedHat Linux

Я создал символическую ссылку:

sudo ln -s /some/dir new_dir

Теперь я хочу переписать символическую ссылку, чтобы указать на новое местоположение, и она не будет перезаписана. Я пробовал:

sudo ln -f -s /other/dir new_dir

Я всегда могу sudo rm new_dir, но я предпочел бы, чтобы он переписывал соответственно, если это было возможно. Любые идеи?

4b9b3361

Ответ 1

ln -sfn /other/dir new_dir

работает для меня. -n не разыскивает символическую ссылку назначения.

Ответ 2

Вы можете создать его, а затем переместить его:

sudo ln -f -s /other/dir __new_dir
sudo mv -Tf __new_dir new_dir

edit: Missing -Tf, чтобы обрабатывать каталог как обычный файл и не запрашивать перезапись.

Таким образом вы перезапишите его.

Ответ 3

Поскольку комментарий Link from mikeytown2s нарушен, я объясню, почему redent84s answer лучше:

В то время как

ln -sfn newDir currentDir

выполняет задание не является атомной операцией, как вы можете видеть с помощью strace:

$ strace ln -snf newDir currentDir 2>&1 | grep link
unlink("currentDir")         = 0
symlink("newDir", "currentDir") = 0

Это важно, когда у вас есть корневой веб-сервер, указывающий на эту символическую ссылку. Это может привести к ошибкам, в то время как символическая ссылка будет удалена и создана снова - даже в период времени микросекунды.

Вместо предотвращения использования ошибок:

$ ln -s newDir tmpCurrentDir && mv -Tf tmpCurrentDir currentDir

Это создаст временную ссылку и после этого перезаписывает currentDir в атомной операции.