Мені потрібна символьна посилання, яка розв’язується відносно каталогу, в який вона розміщена. Яка команда використовується для створення такої речі?
Мені потрібна символьна посилання, яка розв’язується відносно каталогу, в який вона розміщена. Яка команда використовується для створення такої речі?
Відповіді:
ln -s ../some/other/file linkname
Вказаний шлях зберігається разом із файлом. Коли ви отримуєте доступ до файлу, збережений шлях переглядається та розширюється відносно файлу. Невідомо, в якому каталозі ви знаходилися, коли ви створювали посилання.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
оскільки .
стосується поточного каталогу.
ln -s somedir/original-dir link-name
не працює. Він створює каталог з іменем, link-name
який містить недійсне посилання. Команда, яка працює,ln -sr somedir/original-dir link-name
Останні версії GNU coreutils 'ln (> = 8.16) підтримують опцію --relative
(або -r
), що означає, що ви можете зателефонувати за ln -s
допомогою двох абсолютних або відносних (стосовно вашої робочої каталоги) шляхів, і це з'ясує правильний відносний шлях, який повинен бути записані на симпосилання
-r
параметр корисний, коли ви перехрещуєте компіляцію та потребуєте абсолютних шляхів на хості збірки, але відносних шляхів до цілі.
ln -r -s targetfile myalias
може допомогти вам виправити це
Що вам потрібно зрозуміти, це в основному те, що символьне посилання більше нагадує текстовий файл, ніж як запис у каталозі, який містить файл. Тож якщо ти
echo ../poo >/file/name
то це досить схоже на
ln -s ../poo /file/name
Системі байдуже, чи /file/../poo
взагалі існує, це лише фрагмент тексту, який потрапляє в симпосилання. Коли щось намагається відкрити симпосилання, тоді система намагається її вирішити.
Якщо ви використовуєте оболонку із завершенням імені файлу, ця функція може сплутати речі, дозволяючи вам заповнити ім’я файлу відносно вашого поточного робочого каталогу, навіть якщо ви в кінцевому підсумку використовуватимете його як ціль символьного посилання у зовсім іншому каталозі.
<
змінити те, як систему розподіленої пам'ять. Звичайно, <
в цьому каталозі не знайдено жодного файлу , це просто дешевий спосіб створення дуже маленької речі, схожої на файл, яка має деякі привабливі властивості над звичайним текстовим файлом на цій конкретній платформі.
Відносні посилання були складними для мене на OS X, тобто
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
обидва не працювали (щось було створено, але це не був каталог). Я створив потрібне посилання, використовуючи абсолютні шляхи .
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
Я просто хотів далі пояснити, як створити симпосилання за допомогою відносних шляхів (з докладним прикладом).
Як згадував у коментарях Ігнасіо Васкес-Абрамс, ви повинні вказати місце розташування файлу / папки щодо місця, де буде створено символьне посилання, а не відносно вашого поточного каталогу.
ПРИКЛАД
Ви знаходитесь у /usr/share/nginx/html/_src/learn
Ви створите симпосилання coding
в/usr/share/nginx/html
Створіть відносну симпосилання (теорію):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
Створіть фактичне відносне символьне посилання:
sudo ln -s ./_src/learn/coding ../../coding
Більше інформації (той же приклад)
current path: /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path: ../../coding
symlink location (absolute): /usr/share/nginx/html/coding
folder/file relative to symlink location: ./_src/learn/coding
folder/file absolute path: /usr/share/nginx/html/_src/learn/coding