Почему 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.