Cómo crear un enlace simbólico a root

13

Quiero crear un enlace simbólico a la /carpeta raíz ( ) en mi directorio de inicio. Sin embargo, si intento esto, me sale

~$ ln -s /
ln: failed to create symbolic link './': File exists

Puedo hacer esto usando Nautilus Ctrl+ D, por supuesto, así que sé que es posible.

¿Cómo hacerlo usando el terminal?

Ankur S
fuente
Si bien esta es una buena pregunta, quiero saber la razón por la que querrías hacer esto. ¿Es muy difícil escribir cd /? ¿O le gusta crear un enlace que siga pasando por un ciclo una y otra vez? ejemplo: cd root/home/terrance/root/home/terrance/root/home/terrance/root. . . etc.
Terrance
en realidad no. podría hacer esto sin necesidad de vincular a la raíz. En realidad, tenía curiosidad de por qué no puedes hacerlo
Ankur S
Lo suficientemente justo. Gracias por responder a mi pregunta. =)
Terrance

Respuestas:

17

Te falta el nombre del enlace, debería ser:

cd ~
ln -s / root

Lo que luego crearía un enlace simbólico llamado raíz en su directorio de inicio. Entonces el uso correcto es:

ln -s <target> <link-name>

El mensaje de error que ve es que ./siempre existe y que no se puede crear un enlace con este nombre, lo mejor es usar el lncomando 2 con ambos parámetros para evitar un enlace incorrecto.

De man ln:

SINOPSIS

(1st form) ln [OPTION]... [-T] TARGET LINK_NAME  
(2nd form) ln [OPTION]... TARGET  
(3rd form) ln [OPTION]... TARGET... DIRECTORY  
(4th form) ln [OPTION]... -t DIRECTORY TARGET...  

DESCRIPCIÓN

En el primer formulario, cree un enlace TARGETcon el nombre LINK_NAME. En el segundo formulario, cree un enlace TARGETen el directorio actual. En la 3ª y 4ª formas, crear enlaces a cada uno TARGETde DIRECTORY. Cree enlaces duros por defecto, enlaces simbólicos con --symbolic. Por defecto, cada destino (nombre del nuevo enlace) no debería existir 4 . Al crear enlaces duros, cada uno TARGETdebe existir. Los enlaces simbólicos pueden contener texto arbitrario; si luego se resuelve, se interpreta un enlace relativo en relación con su directorio padre.

Los argumentos obligatorios para las opciones largas también son obligatorios para las opciones cortas.

OPCIONES

El parámetro final <link-name>, por defecto es la última parte del objetivo. Entonces, cuando el destino es /path/direl nombre del enlace, se establecerá de manera predeterminada dirsi no se especifica. 1 Y si, por ejemplo, crea ~/etccon mkdir ~/etcy luego ejecuta ln -s /etcen ~él, no puede crear el enlace porque el nombre / directorio ya existe. 3

Y puede ver el enlace creado en su directorio de inicio (aquí como ejemplo, por supuesto, puede nombrarlo como desee):

$ ls -l ~/root
lrwxrwxrwx 1 videonauth videonauth 1 Dez 14 00:28 root -> /

1 Gracias a @thomasrutter por señalarlo.
2 Ver también man linky man symlink
3 Gracias a @steeldriver por proporcionar un ejemplo en los comentarios.
4 Parte enfatizada para que el texto señale, ya que es relevante para la pregunta.

Videonauth
fuente
mi única duda es por qué un comando debería ln -s /etcfuncionar, pero no este. Gracias por la respuesta,
Ankur S
Se crea porque tiene un nombre de directorio, /puede ser root o puede ser un componente de ruta, por lo que el programa no puede saber qué significa ahora. /etces solo un camino distinguible explícito.
Videonauth
77
@AnkurSonawane porque ./será siempre existirá - ./etcno tan probable. Intente mkdir etcprimero y luego ln -s /etc, también obtendráFile exists
steeldriver
8
El parámetro final, nombre-enlace, por defecto es la última parte del objetivo si se omite. Entonces, cuando el destino es /some/direl nombre del enlace, se establecerá de manera predeterminada dirsi no se especifica. /Sin embargo, cuando el objetivo es justo , esto no va a funcionar.
thomasrutter
No creo que esto sea extremadamente significativo, pero la explicación de @steeldriver suena más razonable dada la File Existssalida. No es que importe de todos modos, ya que este es el caso degenerado
Ankur S