1 votos

Enlace simbólico relativo dentro de un directorio con enlaces simbólicos

Tengo una aplicación instalada en /home/appuser/app/ En ese directorio hay otro directorio confs para los archivos de configuración, que está vinculado simbólicamente a ../app-confs así:

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

Se ve bien, funciona bien.

Ahora me gustaría que otros usuarios utilizaran esa aplicación desde el mismo directorio ( /home/appuser/app/ ), por lo que las actualizaciones se pueden hacer en un solo lugar, pero con un directorio configs diferente.

Así que creo un enlace simbólico en /home/user-a/ a /home/appuser/app/ . Y creo un nuevo directorio configs confs en /home/user-a/ .

Cuando lista /home/user-a/ Veo

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

y en /home/user-a/app Ya veo.

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

Pero cuando enumero /home/user-a/confs/ Veo archivos de /home/appuser/confs/ , la confs original y no la relativa.

¿Existe alguna forma de tener un enlace simbólico relativo con un directorio enlazado simbólicamente?

Prueba esto:

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/

¿Es de esperar que se muestre el archivo "user_conf", o no?

3voto

Rouben Puntos 409

P: ¿Es de esperar que se muestre el archivo "user_conf", o no?

R: ¡Negativo!

Los enlaces simbólicos son como cd: cuando entras en un directorio con enlaces simbólicos, estás entrando en el directorio de destino. Por lo tanto, todas las rutas relativas (es decir, enlaces simbólicos) en ese (y cualquier otro) directorio serán relativas a la ubicación física del directorio donde se encuentra el enlace simbólico. En otras palabras...

cd ~/TEST/user/app

es efectivamente

cd ~/TEST/global/app

debido a la última línea de

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

Y aquí está la prueba (el parámetro -P muestra el directorio de trabajo físico actual, es decir, resuelve los enlaces simbólicos, mientras que pwd sin ningún parámetro normalmente muestra el directorio de trabajo lógico actual):

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

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

Por desgracia, no hay manera de comerse el pastel y tenerlo también. Te sugiero que tengas cuidado con los enlaces simbólicos, especialmente si estás programando... ¡este tipo de configuración puede tener consecuencias no deseadas!

Prueba con este ejemplo más sencillo:

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

El primer pwd muestra la ruta lógica "falsa". El segundo pwd, con -P, muestra la ruta física real. Cualquier enlace simbólico que desee crear bajo "root_of_everything" tendrá que ser relativo a la ruta física, no lógica.

0voto

Hauke Laging Puntos 3496

Me parece que algo ha fallado ahí. Listado /home/user-a/ debería mostrar un enlace simbólico app y un directorio real app-confs . conf debe aparecer en un listado de /home/user-a/app sólo. Así que te recomiendo que quites todo de /home/user-a/ y muéstranos los comandos que has utilizado (si no vuelve a funcionar).

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X