Я пытаюсь лучше понять символические ссылки ... и мне не очень повезло. Это мой фактический вывод оболочки с измененным именем пользователя / хостом:
username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt
Я думал, что символическая ссылка должна работать прозрачно, в том смысле, что вы можете работать с файлом, на который она указывает, как если бы вы обращались к файлу напрямую (за исключением, конечно, в случае rm
где конечно ссылка просто удалена).
linux
ubuntu
bash
symbolic-link
orokusaki
источник
источник
df -T
) - вам тоже странный результат выше?Ответы:
Симлинки, как правило, любят полные пути или относительно ссылки, в противном случае они часто могут искать
file-1.txt
локально (как ни странно).Перейдите к
proper
и выполнитьls -l
и вы можете увидеть, что символическая ссылка ищетactual/file-1.txt
когда это должно быть../actual/file-1.txt
,Итак, у вас есть два варианта:
Дайте полный путь
Перейдите к папке, в которой вы хотите разместить ссылку, и ссылку оттуда
редактировать : Подсказка для сохранения ввода.
Вы могли бы просто сделать
ln -s ~/actual/file-{1,2}.txt ~/proper
Элементы в фигурных скобках подставляются и располагаются друг за другом, создавая команду
который связывает оба файла с целевым каталогом. Сохраняет некоторые основные тип ввода по мере продвижения в оболочке.
источник
rm -rf *
в символическую папку - вы можете стереть папку, на которую она ссылается. Просто сделайте rm symlinkname. Просто несколько вещей, в которых я допустил ошибки: DПроблема заключается в использовании относительных путей. Если вы указываете создание ссылки с полным явным путем, это работает.
Ваш пример создает ссылки в
proper
который ищет подкаталог с именем actual в текущем каталоге, а не в качестве предполагаемого родителя обоих.источник
Символические ссылки могут быть хитрыми. По сути, символическая ссылка - это файл, который содержит имя файла / путь к другому файлу (и который помечен для специальной обработки). Если путь в файле ссылок начинается с ‘
/
», Тогда он рассматривается как абсолютный путь, и все довольно просто. Если он не начинается с косой черты, он рассматривается как относительный путь - относительно каталога, в котором находится ссылка. (Это верно независимо от того, содержит ли имя косые черты.) Итак, вы создалиproper/file–1.txt
в качестве ссылки на «actual/file–1.txt
», И когда вы пытались получить к нему доступ, система пыталасьproper/actual/file–1.txt
, Ты должен был сказатьКстати, вам не нужно
touch
команды.echo "file 1" > actual/file–1.txt
достаточно, чтобы создатьactual/file–1.txt
,источник
Связанная проблема, и она может быть очевидна для многих, но поставила меня в тупик на несколько минут: если вы создаете символическую ссылку в каталоге, который сам является символической ссылкой, или есть символическая ссылка в пути текущего рабочего каталога, вы можете столкнуться с проблемами с неработающими символическими ссылками.
использование
cd ..
а такжеls -l
несколько раз, чтобы увидеть, если ваши родительские каталоги сами символические ссылки.Если вам нужно создать символическую ссылку,
cd
в исходный каталог Target и создайте там новые символические ссылки, чтобы относительные пути были точными.Или, если выразиться иначе: относительный путь - от начала до цели. Если источник впоследствии является символической ссылкой, это нормально. Но вы можете столкнуться с проблемами при настройке нового источника link_name в каталоге, который сам каким-то образом является символической ссылкой.
источник
cd ..
а такжеls -l
неоднократно ", вы могли бы использоватьnamei -mox $PWD
, Другой полезный способ узнать, есть ли символические ссылки на пути, это использоватьpwd -P
, который дает вам путь к текущему каталогу, который не содержит символических ссылок (так что еслиpwd
а такжеpwd -P
дать другой вывод, вы знаете, что есть символическая ссылка где-то по пути).