Как создать относительную символическую ссылку в Linux?

Вопрос или проблема

Мне нужно создать символическую ссылку, которая разрешается относительно каталога, в котором она находится. Какая команда используется для создания такой ссылки?

  1. Перейдите в каталог, в котором хотите создать ссылку
  2. Выполните команду ln -s ../some/other/file linkname

Путь, который вы указываете, сохраняется с файлом. Когда вы обращаетесь к файлу, сохраняемый путь ищется и расширяется относительно файла. Система не знает, в каком каталоге вы находились, когда создали ссылку.

Недавние версии GNU coreutils (>= 8.16) поддерживают опцию --relative (или -r), что означает, что вы можете вызывать ln -s с двумя абсолютными или относительными (относительно вашего рабочего каталога) путями, и она сама определит правильный относительный путь, который должен быть записан в символическую ссылку.

Вам нужно понять, что символическая ссылка больше похожа на текстовый файл, чем на запись каталога, которая содержит файл. Итак, если вы

echo ../poo >/file/name

то это вполне похоже на

ln -s ../poo /file/name

Система не заботится о том, существует ли /file/../poo, это просто кусок текста, который помещается в символическую ссылку. Когда что-то пытается открыть символическую ссылку, именно тогда система пытается разрешить её.

Если вы используете оболочку с автозаполнением имен файлов, эта функция может запутать ситуацию, позволяя вам завершать имя файла относительно вашего текущего рабочего каталога, даже если в итоге вы используете это в качестве цели символической ссылки в совершенно другом каталоге.

Я хотел бы подробнее объяснить, как создать символическую ссылку с использованием относительных путей (с подробным примером).

Как упомянул Игнасио Васкес-Абрамс в комментариях, вы должны указать местоположение файла/папки относительно того, где будет создана символическая ссылка, а не относительно вашего текущего каталога.

ПРИМЕР

Вы находитесь в /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

Дополнительная информация (тот же пример)

текущий путь:                                  /usr/share/nginx/html/_src/learn
символическая ссылка (будет создана) относительно текущего пути:       ../../coding                 
расположение символической ссылки (абсолютное):                   /usr/share/nginx/html/coding
папка/файл относительно расположения символической ссылки:      ./_src/learn/coding
абсолютный путь к папке/файлу:                     /usr/share/nginx/html/_src/learn/coding  

Относительные ссылки были для меня сложными в 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

Предположим, у вас есть следующая структура каталогов:

/project
├── dir1/
│   └── file.txt
└── dir2/

Вы хотите создать символическую ссылку в /project/dir2, которая указывает на /project/dir1/file.txt

Если вы используете ln -r, он автоматически рассчитает правильный относительный путь для вас, даже если вы указываете абсолютные пути:

ln -sr /project/dir1/file.txt /project/dir2/link.txt

Это создаёт символическую ссылку /project/dir2/link.txt, которая внутри указывает на ../dir1/file.txt.

введите описание изображения здесь

Ответ или решение

Как создать относительную символическую ссылку в Linux?

Создание символических ссылок в Linux — это мощный инструмент, позволяющий ссылаться на файлы и каталоги, не копируя их физически. Есть два типа символических ссылок: абсолютные и относительные. В данной статье мы подробно рассмотрим, как создать относительные символические ссылки, а также теоретические и практические аспекты этого процесса.

Теоретическая база

Символическая ссылка — это специальный тип файла, который содержит текстовую запись пути к другому файлу или каталогу. При создании относительной символической ссылки путь сохраняется относительно местоположения самой ссылки, а не рабочего каталога, в котором была выполнена команда.

Важные аспекты:
  1. Относительные пути: Чтобы создать относительную ссылку, вам нужно указать путь к целевому файлу или каталогу относительно директории, где будет создана ссылка. Это означает, что даже если вы находитесь в другом каталоге, ссылка должна быть создана на основе местоположения, в котором она будет размещена.

  2. Инструмент ln: Для создания символических ссылок в Linux используется команда ln. Опция -s указывает на то, что мы создаем символическую ссылку.

  3. Опция --relative: С недавних пор в GNU coreutils (версии 8.16 и выше) добавлена опция --relative (или -r). Эта опция автоматически вычисляет правильный относительный путь для ссылки на основе указанных абсолютных или относительных путей.

Порядок действий по созданию относительной символической ссылки

  1. Перейдите в каталог, в котором вы хотите разместить символическую ссылку.
  2. Используйте команду ln -s с указанием относительного пути к целевому файлу. Например:
    ln -s ../some/other/file linkname

Пример из практики

Допустим, у вас есть следующая структура директорий:

/project
├── dir1/
│   └── file.txt
└── dir2/

Вам необходимо создать символическую ссылку в каталоге /project/dir2, которая будет указывать на файл /project/dir1/file.txt.

Шаги выполнения:
  1. Перейдите в dir2:

    cd /project/dir2
  2. Создайте относительную ссылку:

    ln -s ../dir1/file.txt link.txt

Теперь внутри dir2 будет символическая ссылка link.txt, указывающая на ../dir1/file.txt.

Альтернативный способ с использованием --relative

Если вы хотите создать ссылку, используя абсолютные пути со свёрнутым путем, вы можете воспользоваться опцией --relative:

ln -sr /project/dir1/file.txt /project/dir2/link.txt

Эта команда автоматически создаст относительную символическую ссылку, которая будет указывать на ../dir1/file.txt.

Заключение

Создание относительных символических ссылок в Linux — это полезный навык, позволяющий легко организовывать и управлять файлами. Понимание относительных и абсолютных путей, а также работы с командой ln и ее опциями значительно упростит этот процесс. Используйте указанные советы и примеры, чтобы эффективно создавать символические ссылки в своих проектах и улучшайте свою работу с файловой системой Linux.

Оцените материал
Добавить комментарий

Капча загружается...