GNU/Linux >> Tutoriales Linux >  >> Linux

Demasiados niveles de enlaces simbólicos

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 crea su 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 quiere 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, como $(pwd) no se sustituirá si usa comillas simples.


En la superficie, lo que sugirió que intentó funciona para mí.

Ejemplo

$ mkdir -p test/src test/firefox

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

Haga 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 lo haces:

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

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

Ese test/src es relativo al 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/src , tendrí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 ln , puede 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

Linux
  1. Resolución de error de Mysql:Demasiados archivos abiertos

  2. Variables de entorno en enlaces simbólicos

  3. Comportamiento de cd/bash en enlaces simbólicos

  4. ¿Cómo copiar enlaces simbólicos?

  5. Demasiados archivos abiertos en Debian

Una forma sencilla de enumerar enlaces simbólicos en Linux

Cómo eliminar enlaces simbólicos en Linux

Cómo crear enlaces simbólicos en Linux

Solución de problemas:demasiados redireccionamientos

Cómo obtener una lista de enlaces simbólicos en Linux

rsync y enlaces simbólicos