Creé esta estructura de archivos:
test/src
test/firefox
Cuando ejecuto este comando:
ln -s test/src test/firefox
Esperaría test/firefox/src
que 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/src
mostraría el errorcd: no such file or directory: test/firefox/src
, porquetest/firefox/src
es un enlace simbólico que cuelga. ¿Estás ejecutandocd
algún otro enlace simbólico llamadosrc
?ln -s
y elcd
que no nos dice. Suponiendo que solo hay untest
subdirectorio 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/firefox
creará un enlace simbólico que apunta de/some/path/test/firefox/src
a/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
find
para detectar esto un poco:fuente
find -L ./ -mindepth 15
reveló 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/nginx
a/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!cd
si 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
ln
proceso.Cuando tu lo hagas:
(donde
test/firefox
hay un directorio), estás creando untest/firefox/src
enlace simbólico cuyo objetivo estest/src
.Eso
test/src
es relativo altest/firefox
directorio, 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-r
opció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