I collegamenti simbolici tendono ad apprezzare i percorsi completi o relativi al collegamento, altrimenti spesso possono cercare file-1.txt
localmente (stranamente).
Vai a proper
ed eseguire ls -l
e puoi vedere che il collegamento simbolico sta cercando actual/file-1.txt
, quando dovrebbe essere ../actual/file-1.txt
.
Quindi hai due opzioni:
-
Indica il percorso completo
ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
-
Passare alla cartella in cui si desidera inserire il collegamento e collegarsi da lì
cd proper ln -s ../actual/file-1.txt ../actual/file-2.txt ./
Modifica :Un suggerimento per salvare la digitazione.
Potresti semplicemente fare ln -s ~/actual/file-{1,2}.txt ~/proper
Gli elementi nelle parentesi graffe vengono sostituiti e posizionati uno dopo l'altro, creando il comando
ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
che collega entrambi i file alla directory di destinazione. Risparmia alcune digitazioni importanti man mano che avanzi nella shell.
Il problema è l'utilizzo di percorsi relativi. Se specifichi la creazione del collegamento con il percorso esplicito completo, funziona.
$ ln -s ~/actual/file1.txt ~/actual/file2.txt ~/proper/
$ cat corretto/file1.txt
file 1
$
Il tuo esempio crea collegamenti in proper
che cercano una sottodirectory chiamata actual sotto la directory corrente, piuttosto che il genitore previsto di entrambi.
I collegamenti simbolici possono essere complicati. In sostanza, un collegamento simbolico è un file che contiene un nome file/percorso per un altro file (e che è contrassegnato per un trattamento speciale). Se il percorso nel file di collegamento inizia con "/
', quindi viene trattato come un percorso assoluto e le cose sono abbastanza semplici. Se non inizia con una barra, viene trattato come un percorso relativo, relativo alla directory in cui si trova il collegamento. (Questo è vero indipendentemente dal fatto che il nome contenga o meno le barre.) Quindi, hai creato proper/file–1.txt
come collegamento a "actual/file–1.txt
", e quando hai provato ad accedervi, il sistema ha tentato di accedere a proper/actual/file–1.txt
. Avresti dovuto dire
ln –s ../actual/file–1.txt ../actual/file–2.txt proper
A proposito, non ti serviva il touch
comandi. echo "file 1" > actual/file–1.txt
è sufficiente per creare actual/file–1.txt
.