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

Below is my code for creating a symlink of a directory:

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

I already created the directory /etc/nginx. I just want the contents of the source directory (/usr/local/nginx/conf/) to be in the contents of the target directory (/etc/nginx). But when I execute the code, /etc/nginx contains a directory called conf, instead of the contents of conf. That directory contains the contents I want, but in the wrong location.

Why did it put a directory in the target folder, instead of just putting the contents of the directory in the target folder?

preguntado el 01 de febrero de 12 a las 22:02

You can also use Files (default file browser). Right click on the folder you want to link > "Make Link" option. It will create linked folder which you can move and rename as you need. -

Use linux bind mount . ejemplo -

3 Respuestas

This is the behavior of ln if the second arg is a directory. It places a link to the first arg dentro de eso. Si tu quieres /etc/nginx to be the symlink, you should remove that directory first and run that same command.

Respondido el 19 de diciembre de 13 a las 12:12

That Unix.SE link resolves back here. Seems we got a circular dependency. - emperador

Eso es lo ln is documented to do when the target already exists and is a directory. If you want /etc/nginx a be a symlink rather than contener a symlink, you had better not create it as a directory first!

Respondido 02 Feb 12, 02:02

Your answer only makes sense in the context of the reader already knowing the answer. It is useless to anyone who would ask the question - Ricardo Saporta

Can I actually create a symlink to a root of a mounted USB device (thus I cannot erase this folder first)? - Grigory Kornilov

@GrigoryKornilov you can create a symlink a anything you want, including something that doesn't exist. This question was rather about the place where the symlink is created (not where it points to). A particular pathname in the filesystem is either a regular file or it is a directory or it is a symlink (or it is a socket or pipe or device). It cannot be more than one of those things at the same time (i.e. you cannot have more than one distinct file with the exact same name). - Celada

In script is useful something like this:

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

it prevents before re-create "bad" looped symlink after re-run script

contestado el 17 de mayo de 21 a las 15:05

Excellent! This is the exact solution. no need to create the directory if it already existing. It's a real good tweak to hard link and sink it in the blackhole(/dev/null) - Arun Panneerselvam

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.