GNU/Linux >> Linux Esercitazione >  >> Linux

Troppi livelli di collegamenti simbolici

Come sottolinea Dubu in un commento, il problema sta nei tuoi percorsi relativi. Ho avuto un problema simile con il collegamento simbolico della mia configurazione nginx da /usr/local/etc/nginx a /etc/nginx . Se crei il tuo collegamento simbolico in questo modo:

cd /usr/local/etc
ln -s nginx/ /etc/nginx

Realizzerai infatti il ​​collegamento /etc/nginx -> /etc/nginx, perché il percorso di origine è relativo al percorso del collegamento. La soluzione è semplice come usare percorsi assoluti:

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

Se vuoi usare percorsi relativi e farli comportare come probabilmente ti aspetti, puoi usare pwd per inserire il percorso della directory di lavoro corrente, in questo modo:

cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx

Vorresti avere le virgolette attorno al percorso, per assicurarti che cose come gli spazi nel tuo percorso attuale siano sfuggiti. Nota che devi usare le virgolette quando lo fai, come $(pwd) non verrà sostituito se utilizzi virgolette singole.


In superficie, quello che hai suggerito di aver provato funziona per me.

Esempio

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

Crea il link simbolico:

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

Eseguendolo una seconda volta normalmente si ottiene questo:

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

Quindi probabilmente hai qualcos'altro da fare qui. Sospetto che tu abbia un riferimento circolare in cui un collegamento punta a se stesso.

Puoi usare find per indagare un po' su questo:

$ cd /suspected/directory
$ find -L ./ -mindepth 15

I collegamenti simbolici sono relativi alla directory principale del collegamento, non alla directory corrente del ln processo.

Quando lo fai:

cd /top/dir
ln -s test/src test/firefox

(dove test/firefox è una directory), stai creando un test/firefox/src link simbolico il cui obiettivo è test/src .

Quel test/src è relativo al test/firefox directory, quindi è un collegamento simbolico a /top/dir/test/firefox/test/src .

Se volevi che quel collegamento simbolico fosse un collegamento a /top/dir/test/src , dovresti scrivere:

ln -s ../src test/firefox/

Oppure

ln -s /top/dir/test/src test/firefox/

anche se in genere è una cattiva idea creare collegamenti simbolici a percorsi assoluti poiché vengono facilmente interrotti quando le directory vengono rinominate o i filesystem vengono montati altrove.

Con GNU ln , puoi utilizzare il suo -r opzione per lasciare che faccia il calcolo da solo:

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src

Linux
  1. Risoluzione dell'errore MySQL:troppi file aperti

  2. Troppi errori di connessione in MySQL

  3. Variabili d'ambiente nei collegamenti simbolici

  4. Comportamento di cd/bash sui collegamenti simbolici

  5. Aggiorna in batch collegamenti simbolici in modo ricorsivo

Un modo semplice per elencare i collegamenti simbolici in Linux

Come rimuovere i collegamenti simbolici su Linux

Come creare collegamenti simbolici su Linux

Risoluzione dei problemi:troppi reindirizzamenti

Come ottenere un elenco di collegamenti simbolici su Linux

rsync e collegamenti simbolici