Почему ln -sf не перезаписывает существующую ссылку на каталог

Согласно документации, команда ln -f удаляет существующий файл назначения Означает ли это, что если я создаю символическую ссылку, -f должен удалить перезаписать любую существующую символическую ссылку в месте назначения?

У меня есть символическая ссылка, скажем, L, указывая на DIR1 и введите ln -sf DIR2 L, Но L все еще указывает на DIR1. Только после rm L эта команда создает ссылку, указывающую на DIR2.

С символическими ссылками на файлы он ведет себя как ожидалось.

Что не так со ссылками на каталоги? (bash 4.3.48 в Ubuntu 16.04.2 LTS и Windows WSL)

1 ответ

Решение

Когда вы бежите:

ln -sf DIR2 L

Это создает символическую ссылку внутри DIR1, потому что L указывает на DIR1 и разыменовывает ее, создавая L/DIR2 -> DIR1,

Следующие:

rm -fr DIR1 DIR2 L
mkdir DIR1 DIR2
ln -v -s DIR1 L
ls -la L
ln -v -f -s DIR2 L
ls -la L

будет выводить:

'L' -> 'DIR1'
lrwxrwxrwx 1 runner runner 4 Oct 21 18:13 L -> DIR1
'L/DIR2' -> 'DIR2'
lrwxrwxrwx 1 runner runner 4 Oct 21 18:13 L -> DIR1

Чтобы справиться с этим, используйте --no-dereference вариант, как указано в ответе в этой теме на superuser.com.

Другие вопросы по тегам