Назад | Перейти на главную страницу

Относительная символическая ссылка в каталоге с символической ссылкой

У меня установлено приложение в /home/appuser/app/ В этом каталоге есть отдельный каталог confs для файлов конфигурации, которые символически связаны с ../app-confs, вот так:

lrwxrwxrwx  1 appuser appuser    19 Mar 25 15:22 confs -> ../app-confs/

Выглядит нормально, работает нормально.

Теперь я бы хотел, чтобы другие пользователи использовали это приложение из того же каталога (/home/appuser/app/), поэтому обновления можно делать только в одном месте, но в другом каталоге конфигураций.

Итак, я создаю символическую ссылку в /home/user-a/ к /home/appuser/app/. И создаю новый каталог конфигов confs в /home/user-a/.

Когда список /home/user-a/, Я вижу

drwxr-xr-x  8 user-a  user-a   4096 Apr 29 10:57 app
drwxr-xr-x  8 user-a  user-a   4096 Apr 29 10:57 app-confs

И в /home/user-a/app, Я вижу

...
lrwxrwxrwx  1 appuser appuser    19 Mar 25 15:22 confs -> ../app-confs/
...

Но когда я перечисляю /home/user-a/confs/, Я вижу файлы из /home/appuser/confs/, исходный, а не относительный.

Есть ли способ иметь относительную символическую ссылку с каталогом с символической ссылкой?

Попробуй это:

mkdir ~/TEST
cd ~/TEST
mkdir global
cd global
mkdir app
mkdir conf
touch conf/global_conf
cd app
ln -s ../conf conf

cd ~/TEST
mkdir user
cd user
ln -s ~/TEST/global/app app
mkdir conf
touch conf/user_conf
cd app
ls -l conf/

Вы ожидаете, что будет показан файл "user_conf" или нет?

Q: Вы ожидаете, что файл "user_conf" будет показан или нет?

A: Отрицательно!

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

cd ~/TEST/user/app

эффективно

cd ~/TEST/global/app

из-за последней строки

cd ~/TEST
mkdir user
cd user
ln -s ~/TEST/global/app app

И вот доказательство (параметр -P показывает текущий текущий рабочий каталог, т.е. разрешает символические ссылки, тогда как pwd без каких-либо параметров обычно показывает текущий логический рабочий каталог):

pwd -P
/home/rouben/TEST/global/app/conf

pwd
/home/rouben/TEST/user/app/conf

К сожалению, нет возможности съесть торт и съесть его! Я предлагаю вам проявлять осторожность с символическими ссылками, особенно если вы программируете ... такая установка может иметь непредвиденные последствия!

Попробуйте этот более простой пример:

cd ~
ln -s / root_of_everything
cd root_of_everything
pwd
/home/rouben/root_of_everything
pwd -P
/

Первый pwd выводит «поддельный» логический путь. Второй pwd с -P выводит фактический физический путь. Любые символические ссылки, которые я хочу создать в «root_of_everything», должны относиться к физическому, а не логическому пути.

Мне кажется, там что-то пошло не так. Листинг /home/user-a/ должен показать символическую ссылку app и настоящий каталог app-confs. conf должны быть показаны в списке /home/user-a/app только. Поэтому я рекомендую вам удалить все из /home/user-a/ и покажите нам используемые вами команды (если это снова не сработает).