Creé esta estructura de archivos:
test/src
test/firefox
Cuando ejecuto este comando:
ln -s test/src test/firefox
Esperaría test/firefox/srcque se creara un enlace simbólico apuntando a test/src, sin embargo, aparece este error:
-bash: cd: src: Too many levels of symbolic links
- ¿Qué estoy haciendo mal?
- ¿No puede crear un enlace simbólico a una carpeta que está almacenada en un hermano de esa carpeta?
- ¿Cuál es el punto de esto?
linux
filesystems
ln
David Zorychta
fuente
fuente

ls -ld test test/*, o la secuencia exacta de comandos que ejecutó para crear estos archivos.cd test/firefox/srcmostraría el errorcd: no such file or directory: test/firefox/src, porquetest/firefox/srces un enlace simbólico que cuelga. ¿Estás ejecutandocdalgún otro enlace simbólico llamadosrc?ln -sy elcdque no nos dice. Suponiendo que solo hay untestsubdirectorio en su directorio actual, acd src(o lo que sea que haya ejecutado) debería arrojar un error. ¿Pusiste algo entest/firefox?/some/path, aln -s test/src test/firefoxcreará un enlace simbólico que apunta de/some/path/test/firefox/srca/some/path/test/firefox/test/src, no a/some/path/test/src.Respuestas:
En la superficie, lo que has sugerido que has probado funciona para mí.
Ejemplo
Haz el enlace simbólico:
Ejecutarlo por segunda vez normalmente produciría esto:
Entonces, es probable que tenga algo más aquí. Sospecho que tiene una referencia circular donde un enlace apunta hacia sí mismo.
Puedes usarlo
findpara detectar esto un poco:fuente
find -L ./ -mindepth 15reveló el culpableComo Dubu señala en un comentario, el problema radica en sus caminos relativos. Tuve un problema similar al simular mi configuración nginx de
/usr/local/etc/nginxa/etc/nginx. Si crea su enlace simbólico de esta manera: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:
fuente
cygwin. ¡Gracias!cdsi desea ir al directorio de destino desde el directorio donde está el archivo del enlace simbólico.Los enlaces simbólicos son relativos al directorio principal del enlace, no al directorio actual del
lnproceso.Cuando tu lo hagas:
(donde
test/firefoxhay un directorio), estás creando untest/firefox/srcenlace simbólico cuyo objetivo estest/src.Eso
test/srces relativo altest/firefoxdirectorio, por lo que es un enlace simbólico a/top/dir/test/firefox/test/src.Si desea que ese enlace simbólico sea un enlace
/top/dir/test/src, deberá escribir:O
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 se montan los sistemas de archivos en otro lugar.
Con GNU
ln, puede usar su-ropción para permitirle hacer el cálculo por sí mismo:fuente
Use la ruta absoluta en lugar de la ruta relativa, entonces funcionará.
P.ej:
fuente
La respuesta es usar la ruta absoluta. Pero puede ser molesto escribir la ruta completa de algo que está en el directorio actual. Puede usar la sustitución de comandos de pwd para evitar eso. Si su objetivo está en el directorio actual:
Si su enlace debe estar en el directorio actual:
fuente