Ho bisogno di un collegamento simbolico che si risolva in relazione alla directory in cui si trova. Quale comando viene utilizzato per creare una cosa del genere?
Ho bisogno di un collegamento simbolico che si risolva in relazione alla directory in cui si trova. Quale comando viene utilizzato per creare una cosa del genere?
Risposte:
ln -s ../some/other/file linkname
Il percorso fornito viene archiviato con il file. Quando si accede al file, il percorso memorizzato viene cercato ed espanso rispetto al file. Non sa in quale directory ti trovavi quando hai creato il link.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
poiché si .
riferisce alla directory corrente.
ln -s somedir/original-dir link-name
non funziona. Crea una directory con nome link-name
che contiene un collegamento non valido. Il comando che funziona èln -sr somedir/original-dir link-name
Le versioni recenti di GNU coreutils 'ln (> = 8.16) supportano l' opzione --relative
(o -r
) che significa che puoi chiamare ln -s
con 2 percorsi assoluti o relativi (rispetto alla tua directory di lavoro) e scoprirà il percorso relativo corretto che deve essere scritto nel link simbolico.
-r
opzione è utile quando si esegue la compilazione incrociata e sono necessari percorsi assoluti sull'host di build ma percorsi relativi sulla destinazione.
ln -r -s targetfile myalias
può aiutarti a risolverlo
Quello che devi capire è fondamentalmente che un link simbolico è più simile a un file di testo che a una voce di directory che contiene un file. Quindi se tu
echo ../poo >/file/name
allora è abbastanza simile a
ln -s ../poo /file/name
Al sistema non importa se /file/../poo
esiste, è solo un pezzo di testo che viene inserito nel collegamento simbolico. Quando qualcosa tenta di aprire il collegamento simbolico, ecco quando il sistema tenta di risolverlo.
Se stai usando una shell con il completamento del nome del file, questa funzione può confondere le cose permettendoti di completare un nome di file relativo alla tua directory di lavoro corrente, anche se poi finisci per usarlo come destinazione di un link simbolico in un'altra directory.
<
il cambiamento come il sistema allocata memoria. Ovviamente non esiste un file nominato <
in quella directory, è solo un modo economico per creare una cosa simile a un file molto piccolo che ha alcune proprietà interessanti su un normale file di testo su quella particolare piattaforma.
I collegamenti relativi sono stati difficili per me su OS X, vale a dire
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
entrambi non hanno funzionato (qualcosa è stato creato ma non era una directory). Ho creato il collegamento desiderato utilizzando percorsi assoluti .
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
Volevo solo spiegare ulteriormente come creare un collegamento simbolico usando percorsi relativi (con un esempio dettagliato).
Come Ignacio Vazquez-Abrams ha menzionato nei commenti, è necessario specificare la posizione del file / cartella relativa alla posizione in cui verrà creato il collegamento simbolico, non relativo alla directory corrente.
ESEMPIO
Sei in /usr/share/nginx/html/_src/learn
Creerai un collegamento simbolico coding
in/usr/share/nginx/html
Creare un collegamento simbolico relativo (teoria):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
Crea un vero link simbolico relativo:
sudo ln -s ./_src/learn/coding ../../coding
Ulteriori informazioni (stesso esempio)
current path: /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path: ../../coding
symlink location (absolute): /usr/share/nginx/html/coding
folder/file relative to symlink location: ./_src/learn/coding
folder/file absolute path: /usr/share/nginx/html/_src/learn/coding