Я пытаюсь использовать символические ссылки. Я немного почитал и нашел следующие команды:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
Создания и удаления работают нормально. Но обновления не работают. После выполнения этой команды символическая ссылка становится недействительной.
Я прочитал кое-что, что невозможно обновить / переопределить символическую ссылку. Так что в сети есть противоречивая информация. Кто прав? Если символическая ссылка может быть обновлена / переопределена, как я могу добиться этого?
Обновить
Вот моя структура каталогов:
~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt
От ~/scripts/test/
, когда я выполняю:
ln -s /remote_loc/site1 test_link
a test_link
создан, и я могу ls -l
это сделать, но он кажется сломанным (вопреки тому, что я сказал выше в своем вопросе).
Как выполнить ссылку на несколько каталогов?
update
symbolic-link
Жером Верстринг
источник
источник
unlink
вместоrm
. При этомunlink
вы никогда не рискуете потерять какие-либо файлы в исходном каталоге, случайно используя неправильные ключи.-n
? (может быть проблема). Кроме того, если ваш пер поддерживает-t
затем использовать его для этих случаев, и-T
илиdestination/
для других случаев.Ответы:
Использование
-f
сln
перезапишет любую ссылку, которая уже была там, так что, если у вас есть правильные разрешения, она должна работать ... Это всегда работает для меня. Какую операционную систему ты используешь?источник
ln
параметры, как я склонен,-f
уничтожит ли ваш файл существующие файлы (ссылки цели)? В любом случае, у нас есть-i
параметр (который будет запрашивать у пользователя перезапись), если вы хотите немного безопасности.-f
только звонкиunlink()
иlink()
под капотом: stackoverflow.com/a/1466570/157385 . Хотел бы я просто вспомнить правильный порядок!-n
. Смотрите принятый ответ.Хорошо, я нашел, где моя ошибка: нельзя ставить первое
/
в пути.Другими словами, команды в моих вопросах должны быть:
вместо
рассматривая мой случай.
источник
relative
путь (без ведущего /), а другое - этоabsolute
путь (с ведущим /). Если вы управляете системой Linux, КРИТИЧЕСКИ вы понимаете разницу. Например, разница междуrm -rf ./*
иrm -rf /.*
решает, сохранить ли вам работу или нет :)-n
параметром для замены символьной ссылки.Первая проблема:
Цитирую вас:
Проблема с заданной структурой каталогов:
и с помощью команды:
Это создает символическую ссылку в вашем $ PWD или текущем рабочем каталоге, которая указывает на несуществующий файл из /, или root, в / remote_loc / site1
Если ваш PWD находится в ~ / scripts /, то вы должны были использовать это:
ln -s remote_loc/site1 test_link
иначе вы могли бы использовать полный абсолютный путь, например:
ln -s /home/yourusername/remote_loc/site1 test_link
Второй выпуск:
Цитирую вас:
Отвечая на ваш вопрос «Кто прав», я не уверен, что именно вы прочитали или как это поняли. Но следующее должно помочь прояснить ситуацию:
Обновление символических ссылок с целями, которые не являются каталогами.
Пример:
Но, как вы можете видеть, он даст абсолютный путь, если в
ln
аргументах есть абсолютные пути . Указание полного пути необходимо, когда текущий рабочий каталог отличается от родительского каталога ссылки.Относительные пути:
Пример:
Но обновление ссылки на каталог не будет работать, если целью является каталог.
Пример:
Как вы можете видеть, несмотря на использование абсолютных путей, указанных в
ln
аргументе выше, без опции -r, символическая ссылка по-прежнему относительно ссылки.Обновить ссылки на каталоги:
Пример:
В отличие от:
источник
источник