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за исключением случаев, когда linkфактически является реальным каталогом, и в этом случае он все равно будет создавать символическую ссылку внутри этого каталога (вместо сбоя с ошибкой).
Как правило, лучше всего сначала удалить ссылку, а затем воссоздать ее:
rm -f link && ln -s new/target link