У меня установлено приложение в /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/
и покажите нам используемые вами команды (если это снова не сработает).