Двойная символическая ссылка (для раздела и сервера)

Двойная символическая ссылка (для раздела и сервера)

Надеюсь, это не дубликат. Я искал, но не смог найти ответа.

Я использую Linux Mint. У меня есть раздел Data, который автоматически монтируется при загрузке. Я создал символические ссылки с этого раздела на моей /home/userпапке.

Проблема в том, что у меня есть папка 'www' на моем разделе Data (это резервная копия веб-сайтов, которые мне нужно восстановить), и мне нужно сделать на нее символическую ссылку на /home/user. Мне также нужно сделать на нее символическую ссылку, /var/www/htmlчтобы я мог вносить изменения в файлы/папки на моем сервере. Возможно ли это? Как лучше всего это сделать?

Раньше я держал папку 'www' прямо на нем, /home/userпоэтому мне нужна была только одна символическая ссылка. Но теперь, когда у меня есть отдельный раздел Data, я не знаю, как это сделать. Я мог бы иметь только одну символическую ссылку для сервера, но мне пришлось бы вручную копировать/делать резервную копию любой новой добавленной информации, и я бы предпочел делать это автоматически, если есть способ.

решение1

да, можно сделать симлинк одной папки на несколько мест. Насколько я понял ваш вопрос, вам нужны две симлинки:

/home/user/www -> /mnt/partition/www
/var/www/html -> /mnt/partition/www

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

 ln -s /mnt/partition/www /home/user/www
 ln -s /mnt/partition/www /var/www/html

Если вам нужна вся структура каталогов в /mnt/partition/wwwразделах /var/www/htmlи /home/user, например, две идентичные «папки», которые синхронизируются друг с другом, обратите внимание на связывание монтирований.

решение2

Если я правильно понял, то у вас есть (немного отвлеченно):

/data/html/xyz.html

у вас есть ссылка в вашем домашнем каталоге:

/home/user/html -> /data/html

поэтому данные фактически хранятся на отдельном разделе/data

Теперь вы можете использовать файл xyz.html из /var/www/html, указав ссылку:

/var/www/html -> /data/html

Для этого используются следующие команды:

cd /home/user
ln -s /data/html .
cd /var/www
ln -s /data/html .

Однако я вижу две проблемы в этой схеме.

  1. Ваш сервер может быть не настроен на переход по ссылке в /var/www. Например, Apache должен иметь эту +FollowSymLinksопцию в своей конфигурации, так как это потенциальный риск безопасности.
  2. Каждое отредактированное изменение немедленно "отправляется" на веб-сервер. Вероятно, вам следует сделать это через какую-то систему контроля версий, чтобы максимум зафиксированного материала попал на веб-сайт.

Существуют различные способы решения вышеуказанных проблем. Если /причиной размещения всего является пробел, /dataя бы сделал /data/wwwи имел бы веб-сервер оттуда вместо /var/www(устранив необходимость в следующих символических ссылках. Я бы также использовал mercurial для контроля версий материала ниже /data/htmlи клонировал бы это в расположение по умолчанию /data/www, чтобы вы могли зафиксировать из /data/html(или /home/user/html), и как только все станет стабильно, вы делаете коммит и push, чтобы все обслуживалось с веб-сайта.

решение3

В Linux любое физическое хранилище может быть назначено любому пути в файловой системе любое количество раз. Пути к файлам — это просто inodes (дескрипторы/указатели) на физическое хранилище. Вы можете сопоставить один и тот же физический файл/папку с различными путями файловой системы как минимум тремя способами:

1) монтирование. Так же, как вы можете смонтировать весь физический диск в каталог, вы также можете смонтировать произвольный существующий каталог в другое место (связанное монтирование). Это полностью прозрачно для любого приложения в системе, ни одна программа не заметит, что содержимое каталога смонтировано из другого места. В вашем случае вы можете легко сделать

mount --bind /mnt/partition/www/ /var/www/html/

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

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

2) символические ссылки. Символические ссылки — это просто псевдонимы. Это самая слабая привязка. В отличие от монтирования, символические ссылки просто содержат (в основном в текстовой форме) путь, на который они указывают. Это означает, что вам не нужно монтировать его при каждой загрузке (или когда он вам нужен), и путь может даже не существовать. Он также может измениться. Большинство приложений работают с ними как с обычными файлами, но есть оговорки: символические ссылки каталогов имеют некоторые проблемы, потому что когда вы входите и возвращаетесь, вы не обязательно попадаете в то же самое место. Кроме того, приложения знают, что файл/каталог — это ссылка. Чтобы избежать циклов, операционная система ограничивает длину цепочки ссылок для перехода (почти никогда не является проблемой, если вы не злоупотребляете ими слишком сильно). Конечно, у вас может быть столько ссылок, сколько вы хотите, исходный каталог даже не знает о них.

ln -s /mnt/partition/www/ /var/www/html/

ln -s /mnt/partition/www/ /home/user/www/

3) жесткие ссылки. Поскольку файловые системы в Unix-системах спроектированы как набор инодов, которые указывают на физические местоположения на жестком диске, каждый инод — это просто адрес, как туда попасть. Таким образом, у вас может быть много инодов (В ОДНОЙ ФАЙЛОВОЙ СИСТЕМЕ), указывающих на один и тот же адрес. Если вы не используете команду -sswitch on ln, она создает жесткую ссылку (если это возможно). Все имена файлов, которые указывают на одно и то же физическое хранилище, на самом деле эквивалентны. Нет «исходного» файла. Все они являются одним и тем же файлом, есть просто два или более имен для одного и того же. Поскольку удаление на самом деле удаляет только инод (и отмечает пространство как свободное, только если на него НЕТ инодов, указывающих на него), удаление одного файла не удаляет другой. Оно просто удаляет имя. Конечно, если вы удалите все жесткие ссылки, нет инодов, которые сообщают вам, где найти хранилище, и оно в конечном итоге теряется (файловая система затем может использовать пространство для чего-то другого).

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

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

Связанный контент