Prima edizione:
Ti sto citando:
Le creazioni e le eliminazioni funzionano correttamente. Ma gli aggiornamenti non funzionano. Dopo aver eseguito questo comando, il collegamento simbolico non è più valido.
Il problema Con la struttura di directory indicata:
~ / scripts / test / ~ / scripts / test / remote_loc / ~ / scripts / test / remote_loc / site1 / ~ / scripts / test / remote_loc / site1 / stuff1.txt ~ / script / test / remote_loc / site2 / ~ / scripts /test/remote_loc/site2/stuff2.txt ~ / scripts / test / remote_loc / site2 / ~ / scripts / test / remote_loc / site3 / stuff3.txt
e usando il comando:
ln -s /remote_loc/site1 test_link
È che crea un link simbolico nel tuo $ PWD, o presente directory di lavoro, che punta a un file inesistente al di fuori di /, o root, su / remote_loc / site1
Se il tuo PWD è in ~ / scripts / allora avresti dovuto usare questo:
ln -s remote_loc/site1 test_link
altrimenti avresti potuto usare l'intero percorso assoluto come:
ln -s /home/yourusername/remote_loc/site1 test_link
Secondo numero:
Ti sto citando:
Ho letto qua e là che non è possibile aggiornare / sovrascrivere un collegamento simbolico. Quindi ci sono informazioni contraddittorie in rete. Chi ha ragione? Se un collegamento simbolico può essere aggiornato / ignorato, come posso raggiungere questo obiettivo?
Per rispondere alla tua domanda "Chi ha ragione", non sono sicuro di cosa tu abbia letto esattamente o di come sia stata compresa. Tuttavia, ciò che segue dovrebbe aiutare a chiarire:
- Cosa può essere aggiornato e
- Cosa non può essere aggiornato senza utilizzare gli switch appropriati.
Aggiornamento di collegamenti simbolici con destinazioni che non sono directory.
-n -sf:
-f o --force rimuovono i file di destinazione esistenti, vengono utilizzati per aggiornare la destinazione o la destinazione di un collegamento.
Esempio:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
Ma, come puoi vedere, fornirà il percorso assoluto se i percorsi assoluti sono negli ln
argomenti di. È necessario fornire un percorso completo quando la directory di lavoro corrente è diversa dalla directory principale del collegamento.
Percorsi relativi:
-nfr:
il -r o --relativo crea collegamenti simbolici relativi alla posizione del collegamento.
Esempio:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
Tuttavia, l'aggiornamento di un collegamento a una directory non funzionerà se la destinazione è una directory.
Esempio:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
Come puoi vedere, nonostante utilizzi nomi di percorso assoluti indicati ln
nell'argomento precedente senza l'opzione -r, il collegamento simbolico è ancora relativo al collegamento.
Aggiorna collegamenti alle directory:
ln -sfrn:
-n o --no-dereference tratta LINK_NAME come un normale file se si tratta di un collegamento simbolico a una directory.
Esempio:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
In contrasto con:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
invece dirm
. Conunlink
te non rischi mai di perdere alcun file in una directory di origine utilizzando accidentalmente switch errati.