Saltar al contenido

Demasiados niveles de enlaces simbólicos

Nuestro grupo de redactores ha estado horas investigando la solución a tus preguntas, te dejamos la respuesta de modo que nuestro deseo es servirte de mucha apoyo.

Solución:

Como señala Dubu en un comentario, el problema radica en sus rutas relativas. Tuve un problema similar al enlazar mi configuración nginx desde /usr/local/etc/nginx a /etc/nginx. Si creas tu enlace simbólico así:

cd /usr/local/etc
ln -s nginx/ /etc/nginx

De hecho, creará el enlace /etc/nginx -> /etc/nginx, porque la ruta de origen es relativa a la ruta del enlace. La solución es tan simple como usar rutas absolutas:

ln -s /usr/local/etc/nginx /etc/nginx

Si desea usar rutas relativas y hacer que se comporten de la manera que probablemente espera, puede usar pwd para poner la ruta del directorio de trabajo actual, así:

cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx

Le gustaría tener las comillas alrededor de la ruta, para asegurarse de que se escapen cosas como espacios en su ruta actual. Tenga en cuenta que debe usar comillas dobles al hacer esto, ya que $(pwd) no se sustituirá si utiliza comillas simples.

En la superficie, lo que has sugerido que has probado funciona para mí.

Ejemplo

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

Haz el enlace simbólico:

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

Ejecutarlo por segunda vez normalmente produciría esto:

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

Así que es probable que tengas algo más aquí. Sospecho que tiene una referencia circular donde un enlace apunta hacia sí mismo.

Puedes usar find para investigar esto un poco:

$ cd /suspected/directory
$ find -L ./ -mindepth 15

Los enlaces simbólicos son relativos al directorio principal del enlace, no al directorio actual del ln proceso.

Cuando tu lo hagas:

cd /top/dir
ln -s test/src test/firefox

(dónde test/firefox es un directorio), estás haciendo un test/firefox/src enlace simbólico cuyo objetivo es test/src.

Que test/src es relativo a la test/firefox directorio, por lo que es un enlace simbólico a /top/dir/test/firefox/test/src.

Si quisiera que ese enlace simbólico fuera un enlace a /top/dir/test/srctendrías que escribir:

ln -s ../src test/firefox/

O

ln -s /top/dir/test/src test/firefox/

aunque generalmente es una mala idea hacer enlaces simbólicos a rutas absolutas, ya que se rompen fácilmente cuando se cambia el nombre de los directorios o los sistemas de archivos se montan en otro lugar.

con GNU lnpuedes usar su -r opción para dejar que haga el cálculo por sí mismo:

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src

Si guardas alguna perplejidad o disposición de beneficiar nuestro sección puedes realizar una crónica y con placer lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *