Я создал эту файловую структуру:
test/src
test/firefox
Когда я запускаю эту команду:
ln -s test/src test/firefox
Я ожидаю, что будет создана символическая ссылка test/firefox/src
, указывающая на test/src
, но вместо этого я получаю эту ошибку:
-bash: cd: src: Too many levels of symbolic links
- Что я делаю неправильно?
- Разве вы не можете создать символическую ссылку на одну папку, которая хранится в одной папке?
- какой в этом смысл?
linux
filesystems
ln
Давид Зоричта
источник
источник
ls -ld test test/*
или точную последовательность команд, которые вы выполнили для создания этих файлов.cd test/firefox/src
будет отображаться ошибкаcd: no such file or directory: test/firefox/src
, потому чтоtest/firefox/src
это повисшая символическая ссылка. Вы работаетеcd
по какой-то другой символической ссылкеsrc
?ln -s
и тем,cd
что вы не говорите нам. Предполагая, чтоtest
в вашем текущем каталоге есть только подкаталог, acd src
(или все, что вы выполняли) должно выдать ошибку. Вы положили что-то вtest/firefox
?/some/path
, aln -s test/src test/firefox
создаст символическую ссылку, указывающую/some/path/test/firefox/src
на/some/path/test/firefox/test/src
, а не на/some/path/test/src
.Ответы:
На первый взгляд, то, что вы предлагали попробовать, работает для меня.
пример
Сделайте символическую ссылку:
Запуск его во второй раз обычно приводит к следующему:
Так что, вероятно, здесь происходит что-то еще. Я подозреваю, что у вас есть круговая ссылка, где ссылка указывает на себя.
Вы можете использовать это,
find
чтобы вывести это из себя:источник
find -L ./ -mindepth 15
раскрыл виновникаКак отмечает Дубу в комментарии, проблема заключается в ваших относительных путях. У меня была похожая проблема с символической ссылкой моей конфигурации nginx из
/usr/local/etc/nginx
в/etc/nginx
. Если вы создадите свою символическую ссылку, как это:Фактически вы создадите ссылку / etc / nginx -> / etc / nginx, потому что исходный путь относительно пути ссылки. Решение так же просто, как использование абсолютных путей:
источник
cygwin
. Спасибо!cd
того, как вы захотите перейти в целевой каталог из каталога, в котором находится файл символической ссылки.Символьные ссылки относятся к родительскому каталогу ссылки, а не к текущему каталогу
ln
процесса.Когда вы делаете:
(где
test/firefox
находится каталог), вы делаетеtest/firefox/src
символическую ссылку, целью которой являетсяtest/src
.Это
test/src
относительноtest/firefox
каталога, так что это символическая ссылка на/top/dir/test/firefox/test/src
.Если вы хотите, чтобы эта символическая ссылка была ссылкой
/top/dir/test/src
, вам нужно написать:Или же
хотя вообще плохая идея делать символические ссылки на абсолютные пути, поскольку они легко ломаются, когда каталоги переименовываются или файловые системы монтируются в другом месте.
С помощью GNU
ln
вы можете использовать его-r
опцию, чтобы он мог самостоятельно выполнять вычисления:источник
Используйте абсолютный путь вместо относительного пути, тогда он будет работать.
Например:
источник
Ответ заключается в использовании абсолютного пути. Но может быть неприятно вводить полный путь для чего-то, что находится в текущем каталоге. Вы можете использовать команду подстановки pwd, чтобы избежать этого. Если ваша цель находится в текущем каталоге:
Если ваша ссылка должна быть в текущем каталоге:
источник