7

Я понимаю концепцию ссылок в Linux, жесткую или мягкую.

Может кто-нибудь сказать мне реальный случай использования?

Почему нам нужно хранить несколько ссылок на один и тот же файл? Не является ли их управление проблемой?

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

5 ответов5

9

В любое время, когда вам нужно несколько имен для одной и той же вещи, вам нужна ссылка.

Общие библиотеки в Linux называются с их реальным именем, как в этом примере:

lrwxrwxrwx. 1 root root     16 Dec  2 15:24 /usr/lib64/libcurl.so -> libcurl.so.4.2.0
lrwxrwxrwx. 1 root root     16 Dec  2 15:04 /usr/lib64/libcurl.so.4 -> libcurl.so.4.2.0
-rwxr-xr-x. 1 root root 380864 Sep 19 07:04 /usr/lib64/libcurl.so.4.2.0

Это делается для того, чтобы программы, которым нужна любая версия libcurl, открывали libcurl.so. Если они хотят версию 4, они открывают libcurl.so.4. Если им нужна очень конкретная версия 4.2.0, они могут открыть libcurl.so.4.2.0.

Это также используется для таких программ, как /usr/bin/java . Java может быть предоставлена многими различными источниками. Это может быть IcedTea OpenJDK. Это может быть Sun JRE. Или это может быть версия IBM. Использование символической ссылки позволяет системе указывать на версию по умолчанию, сохраняя каждую версию в своем собственном каталоге.

4

Для упрощения резервного копирования

Вариант использования 1: перемещение документов в отдельный локальный раздел или раздел NFS

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

Обычно я делаю символическую ссылку на папки, которые я хочу сохранить в отдельном разделе. Чтобы восстановить символические ссылки, я просто запускаю быстрый скрипт bash для восстановления ссылок после установки ОС.

Я бы назвал это резервным копированием ваших данных, но на самом деле нет никакого дополнительного шага «резервного копирования». Приятно то, что если вы случайно нажали кнопку noob, например, «rm -rf», в вашей файловой системе, rm не будет следовать символическим ссылкам, поэтому вы не потеряете свои файлы.

Примечание: я понимаю, что вы можете изменить местоположение, где находится /home, с помощью /etc /fstab. Причина, по которой я не использую эту технику, заключается в том, что я хочу лишь выборочно связать части своих пользовательских файлов и оставить позади все накопленное мусор.

Вариант использования 2. Использование кроссплатформенного раздела (простой способ)

Дополнительным преимуществом использования символических ссылок (программных ссылок) является то, что они работают в разных файловых системах.

Некоторые из нас не могут позволить себе роскошь (из-за потребностей бизнеса) использовать Linux в качестве нашей единственной ОС, поэтому мы сильно отходим назад и четвертым. Чтобы расширить Случай 1, я лично использую раздел NTFS для моих пользовательских файлов и символическую ссылку на различные конфигурационные и пользовательские файлы, которые я хочу добавить в Linux. Это хранит все мои вещи в одном месте.

Примечание. Если вы еще не знали, вы также можете создавать символические ссылки в Windows с помощью команды MKLINK.

Представь себе это. У вас есть учетная запись Dropbox, которую вы используете как в Linux, так и в Windows. Чтобы избежать необходимости загружать / синхронизировать две копии одних и тех же файлов, все так же легко использовать в обеих ОС, как символическую ссылку на папку Dropbox в разделе NTFS из папки / home.

Примечание: Для автоматического монтирования диска NTFS (в дистрибутивах на основе Debian, не уверенных в других) вам нужно добавить точку монтирования в /etc /fstab с umask = 000 для привилегий записи.

Вариант использования 3: для одновременной поддержки стандартных и пользовательских структур папок

Допустим, вы веб-разработчик, который отвечает за работу на нескольких сайтах.

Вы правильно настроили свой тестовый сервер в:

/opt/lampp

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

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

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

К счастью, есть гораздо более простой подход. Создайте bash-скрипт для каждого сайта с аргументами --testing и --production. Затем просто сконфигурируйте аргументы, чтобы сбросить соответствующие символические ссылки в папки htdocs и config для конкретной конфигурации. Сайт может находиться под контролем версий, в отдельном разделе или даже на удаленном общем ресурсе. Это не имеет значения, если символические ссылки указывают на правильное место.

Обновление:

За это снова проголосовали, поэтому я решил добавить еще 2 общих варианта использования.

Вариант использования 4. Создание приложений, легко доступных через командную строку

Допустим, вы устанавливаете новое приложение, такое как Sublime Text, в «/opt/Sublime Text», чтобы предоставить доступ на уровне пользователя, не требуя привилегий root.

Чтобы сделать его легко доступным через командную строку, одним из распространенных подходов является изменение переменной $ PATH для включения каталога приложения Sublime. Этот подход может быть менее чем идеальным, потому что $ PATH имеет ограниченную длину, имеет тенденцию загрязняться большим количеством ссылок на пути к общим библиотекам, и его труднее удалить позже.

Поскольку /usr /bin (т. Е. Один из основных каталогов приложений) уже включен в $ PATH, почему бы не использовать его в качестве дополнения?

Самый простой подход - создать символическую ссылку /usr /bin /, указывающую на исполняемый файл Sublime Text.

sudo ln -s "/opt/Sublime Text/sublime" /usr/bin/sublime

Теперь запустить Sublime text editor из командной строки так же просто, как набрать sublime в терминале. Sudo требуется только при создании / удалении символической ссылки, потому что / usr / bin по умолчанию имеет привилегии выполнения на уровне пользователя.

Вариант использования 5: бесшовное резервное копирование и выборочная синхронизация с облаком

Среди ИТ-специалистов один из наиболее распространенных советов - «сделайте резервную копию ваших файлов». Но резервные копии так «2000 и поздно».

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

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

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

Недавно мой основной настольный компьютер (т.е. iMac) испытал сбой внутреннего жесткого диска после 6 лет использования с потерей данных 0. Конечно, мне пришлось переустанавливать ОС, приложения и заново связывать все, но было приятно начать все заново, и я смог написать большую часть процесса, чтобы сделать его проще в будущем.

3

Ссылки обеспечивают слой перенаправления для имени файла и его содержимого. Рассмотрим эту ситуацию, проиллюстрированную Майклом Джаклом в статье об использовании rsync для имитации поведения функции Time Machine от Apple.

Жесткая-ссылка

3

Реальные примеры использования жестких ссылок можно найти в /bin и других каталогах bin. Запустите команду ls -l /bin | grep -v ' 1 ' | sort Это даст вам список команд с несколькими ссылками. Некоторые команды будут действовать по-разному в зависимости от имени, которым вы их называете. (Busybox - крайний случай.) Жесткие ссылки должны быть на одном устройстве и не требовать дополнительного дискового пространства.

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

2

Существует несколько вариантов использования символических ссылок в системах Linux или * nix в целом. Например, если вы хотите переместить физическое местоположение файла, не нарушая существующие или распространенные «общеизвестные» ссылки, вы можете создать символическую ссылку в старом местоположении. Это полезно, когда вы пытаетесь обновить часто используемый инструмент с частной версией, по любой причине. Некоторые утилиты, такие как busybox, используют общий двоичный файл для удовлетворения нескольких потребностей. В некоторых дистрибутивах Linux, таких как OpenWRT, /bin /bash, /bin /ls, /bin /mv и т.д., Все ссылки на /bin /busybox. Этот двоичный файл может вести себя по-разному в зависимости от используемого argv[0] .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .