Come creare un collegamento simbolico alla radice


13

Voglio creare un collegamento simbolico alla /cartella root ( ) nella mia directory home. Tuttavia, se provo questo, ottengo

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

Posso farlo usando Nautilus Ctrl+ D, ovviamente, quindi so che è possibile.

Come farlo utilizzando il terminale?


Mentre questa è una buona domanda, voglio sapere il motivo per cui vorresti fare questo? È troppo difficile digitare cd /? O ti piace creare un collegamento che continui a passare ripetutamente ancora e ancora? Esempio: cd root/home/terrance/root/home/terrance/root/home/terrance/root. . . ecc.
Terrance

non proprio. potresti farlo senza bisogno di collegarti al root. in realtà, ero solo curioso di sapere perché non puoi farlo
Ankur S

Giusto. Grazie per aver risposto alla mia domanda. =)
Terrance

Risposte:


17

Ti manca il nome del link, dovrebbe essere:

cd ~
ln -s / root

Che quindi creerebbe un collegamento simbolico chiamato root nella tua home directory. Quindi l'uso corretto è:

ln -s <target> <link-name>

Il messaggio di errore che vedi è che ./esiste sempre e non è possibile creare un collegamento con questo nome, la cosa migliore è utilizzare il lncomando 2 con entrambi i parametri per evitare collegamenti errati.

Da man ln:

SINOSSI

(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...  

DESCRIZIONE

Nel 1 ° modulo, creare un collegamento a TARGETcon il nome LINK_NAME. Nel secondo modulo, creare un collegamento TARGETnella directory corrente. Nel 3 ° e 4 ° modulo, creare collegamenti a ciascuno TARGETin DIRECTORY. Crea collegamenti fissi per impostazione predefinita, collegamenti simbolici con --symbolic. Per impostazione predefinita, ogni destinazione (nome del nuovo collegamento) non dovrebbe già esistere 4 . Quando si creano collegamenti fissi, ognuno TARGETdeve esistere. I collegamenti simbolici possono contenere testo arbitrario; se successivamente risolto, un collegamento relativo viene interpretato in relazione alla sua directory padre.

Argomenti obbligatori per le opzioni lunghe sono obbligatori anche per le opzioni brevi.

OPZIONI

Il parametro finale, <link-name>viene impostato automaticamente sull'ultima parte del target. Pertanto, quando la destinazione è /path/diril nome del collegamento verrà dirimpostato automaticamente se non specificato. 1 E se ad esempio si crea ~/etccon mkdir ~/etce quindi si esegue ln -s /etcin ~esso, non è possibile creare il collegamento perché il nome / directory esiste già. 3

E puoi vedere il link creato nella tua home directory (qui come esempio, ovviamente sei libero di nominarlo come preferisci):

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

1 Grazie a @thomasrutter per averlo sottolineato.
2 Vedi anche man linke man symlink
3 Grazie a @steeldriver per aver fornito un esempio nei commenti.
4 Parte enfatizzata per evidenziare il testo in quanto rilevante per la domanda.


il mio unico dubbio rimasto è perché un comando come dovrebbe ln -s /etcfunzionare ma non questo? Grazie per la risposta,
Ankur S

È creato perché ha un nome di directory, /può essere root o può essere un componente del percorso, quindi il programma non può sapere cosa si intende ora. /etcè solo un percorso esplicito distinguibile.
Videonauth,

7
@AnkurSonawane perché ./sarà sempre esiste - ./etcnon è così probabile. Prova mkdir etcprima e poi ln -s /etc- otterrai ancheFile exists
steeldriver il

8
Il parametro finale, nome-link, viene impostato automaticamente sull'ultima parte della destinazione se omesso. Pertanto, quando la destinazione è /some/diril nome del collegamento verrà dirimpostato automaticamente se non specificato. Quando l'obiettivo è giusto /, tuttavia, questo non funzionerà.
thomasrutter,

Non credo che questa spiegazione estremamente significativa ma di @steeldriver sembri più ragionevole dato l' File Existsoutput. Non importa che sia così, poiché questo è il caso degenerato
Ankur S
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.