Я пытаюсь создать символическую ссылку в моем домашнем каталоге, которая указывает на каталог на моем внешнем жестком диске.
Это работает нормально, когда я указываю это так:
cd ~
ln -s /run/media/name/exhdd/Data/ Data
Однако он создает неисправную ссылку, когда я пытаюсь это:
cd /run/media/name/exhdd
ln -s Data/ ~/Data
Это создает ссылку, на которую я не могу cd
.
Когда я пытаюсь, Баш жалуется:
bash: cd: Data: Too many levels of symbolic links
Символическая ссылка «Данные» в моем доме также окрашена в красный цвет, если ls
она настроена на отображение цветного вывода.
Почему это происходит? Как я могу создать ссылку таким образом? (Я хочу создать символическую ссылку на каталог в моем рабочем каталоге в другом каталоге.)
Изменить: согласно этому ответу StackOverflow, если второй аргумент (в моем случае это ~ / Data) уже существует и является каталогом,
ln
создаст символическую ссылку на цель внутри этого каталога.
Тем не менее, я испытываю ту же проблему с:
ln -s Data/ ~/
cd ~
обычно такой же, какcd
.ls -l ~/Data
помог бы вам увидеть, что не так с «красной» ссылкой.cat
это сделать, но я забыл, каков был результат ... (Я не дома в тот момент.)/run/media/name/exhdd/Data/
чтобыData
затем использовать следующееln -s /run/media/name/exhdd/Data/* Data
Ответы:
Вот что происходит. Если вы создадите символическую ссылку с относительным путем, она будет относительной. Симлинки просто хранят пути, которые вы им даете. Они никогда не разрешают пути к полным путям. Бег
создает символическую ссылку с именем
ls2
в/usr/bin
кls
( а именно./usr/bin/ls
) по отношению к каталогу , в котором символический находится в (/usr/bin
). Приведенная выше команда создаст функциональную символическую ссылку из любого каталога.Если вы переместите символическую ссылку в другой каталог, она перестанет указывать на файл в
/usr/bin/ls
.Вы делаете символическую ссылку, которая указывает на
Data
, и называете ееData
. Это указывает на себя. Вы должны сделать символическую ссылку с абсолютным путем к каталогу.источник
У меня была такая же проблема. Google привел к этому ответу, но самое простое решение здесь не задокументировано:
-Т делает трюк
man ln:
Просто добавьте это здесь, так что любой с таким же вопросом может найти это :)
источник
ln
Поведение с относительными путями не интуитивно понятно. Чтобы восстановить здравомыслие, используйте-r
флаг.Объяснение:
Это значит, что
ln
будет делать то, что вы ожидаете. Он будет учитывать, в каком каталоге вы находитесь, в каком каталоге находится цель, и создаст путь относительно каталога, в котором будет находиться ссылка. Поведение по умолчанию (без-r
) - интерпретировать первый параметр (цель) буквально , в В этом случае вы должны сами построить путь, чтобы он действовал в каталоге ссылки.В качестве альтернативы используйте абсолютный путь, как упомянуто @SmithJohn
или же
источник
Очень просто вы можете создать ссылку на папку. Смотри мою команду
ln -s / home / targatedfolder / var / www / html / link_name
источник