2012-02-01 19 views
216

A continuación se muestra el código para crear un enlace simbólico de un directorio:Crear un enlace simbólico del directorio en Ubuntu

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

ya que creó el directorio /etc/nginx. Solo quiero que los contenidos del directorio de origen (/usr/local/nginx/conf/) estén en el contenido del directorio de destino (/etc/nginx). Pero cuando ejecuto el código, /etc/nginx contiene un directorio llamado conf, en lugar de los contenidos de conf. 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 poner el contenido del directorio en la carpeta de destino?

+0

También puede utilizar los archivos (explorador de archivos por defecto). 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. –

+3

Utilice la función linux 'bind mount'. [ejemplo] (http://backdrift.org/how-to-use-bind-mounts-in-linux) – gkiko

Respuesta

222

Este es el comportamiento de ln si el segundo arg es un directorio. Coloca un enlace al primer arg dentro de él. Si quiere que /etc/nginx sea el enlace simbólico, primero debe eliminar ese directorio y ejecutar el mismo comando.

+1

relacionado: http://unix.stackexchange.com/questions/84175/weird-behavior-of-gnu -ln – corazza

+5

Ese enlace de Unix.SE se resuelve aquí. Parece que tenemos una dependencia circular. – kaiser

27

Eso es lo que se dice que ln hace cuando el destino ya existe y es un directorio. Si quieres /etc/nginx a un enlace simbólico en lugar de contiene un enlace simbólico, ¡es mejor que no lo crees primero como directorio!

+42

Su respuesta solo tiene sentido en el contexto en que el lector ya conoce la respuesta. Es inútil para cualquiera que haga la pregunta –

+1

¿Puedo realmente crear un enlace simbólico a la raíz de un dispositivo USB montado (por lo tanto, no puedo borrar esta carpeta primero)? –

+1

@GrigoryKornilov puede crear un enlace simbólico * a * cualquier cosa que desee, incluso 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 una 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

8

En el guión es muy útil algo como esto:

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

evita que antes de volver a crear "malo" en bucle enlace simbólico después de la escritura de volver a ejecutar

Cuestiones relacionadas