Crear un enlace simbólico de directorio en Ubuntu [cerrado]

247

A continuación se muestra mi código para crear un enlace simbólico de un directorio:

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

Ya creé el directorio /etc/nginx. Solo quiero que el contenido del directorio de origen ( /usr/local/nginx/conf/) esté en el contenido del directorio de destino ( /etc/nginx). Pero cuando ejecuto el código, /etc/nginxcontiene un directorio llamado conf, en lugar del contenido deconf . Ese directorio contiene los contenidos que quiero, pero en la ubicación incorrecta.

¿Por qué puso un directorio en la carpeta de destino, en lugar de simplemente poner el contenido del directorio en la carpeta de destino?

nbro
fuente
También puede usar Archivos (navegador de archivos predeterminado). Haga clic derecho en la carpeta que desea vincular> opción "Hacer enlace". Creará una carpeta vinculada que puede mover y cambiar de nombre según lo necesite.
John Linhart
44
Use la bind mountfunción de Linux . ejemplo
gkiko

Respuestas:

254

Este es el comportamiento de lnsi el segundo argumento es un directorio. Coloca un enlace al primer argumento dentro de él . Si desea /etc/nginxser el enlace simbólico, primero debe eliminar ese directorio y ejecutar el mismo comando.

Error fatal
fuente
10
Ese enlace Unix.SE se resuelve aquí. Parece que tenemos una dependencia circular.
Kaiser
30

Eso es lo que lnestá documentado cuando el destino ya existe y es un directorio. Si quieres /etc/nginxa ser un enlace simbólico en lugar de contener un enlace simbólico, es mejor que no hubiera crearlo como un directorio primero!

Celada
fuente
51
Su respuesta solo tiene sentido en el contexto del lector que ya sabe la respuesta. Es inútil para cualquiera que haga la pregunta
Ricardo Saporta,
1
¿Puedo realmente crear un enlace simbólico a una raíz de un dispositivo USB montado (por lo tanto, no puedo borrar esta carpeta primero)?
Grigory Kornilov
1
@GrigoryKornilov puedes crear un enlace simbólico a lo que quieras, incluido algo que no existe. Esta pregunta era más bien sobre el lugar donde se crea el enlace simbólico (no hacia dónde apunta). Un nombre de ruta particular en el sistema de archivos es un archivo normal o es un directorio o es un enlace simbólico (o es un socket o tubería o dispositivo). No puede ser más de una de esas cosas al mismo tiempo (es decir, no puede tener más de un archivo distinto con exactamente el mismo nombre).
Celada
10

En script es útil algo como esto:

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi

evita antes de volver a crear un enlace simbólico en bucle "malo" después de volver a ejecutar el script

kayn
fuente
1
¡Excelente! Esta es la solución exacta. no es necesario crear el directorio si ya existe. Es un muy buen ajuste al enlace duro y lo hunde en el agujero negro (/ dev / null)
Cosmo Arun