Eu preciso de um link simbólico que resolva em relação ao diretório em que ele é colocado. Que comando é usado para criar uma coisa dessas?
Eu preciso de um link simbólico que resolva em relação ao diretório em que ele é colocado. Que comando é usado para criar uma coisa dessas?
Respostas:
ln -s ../some/other/file linkname
O caminho que você fornece é armazenado com o arquivo. Quando você acessa o arquivo, o caminho armazenado é pesquisado e expandido em relação ao arquivo. Ele não sabe em que diretório você estava quando criou o link.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
já que .
se refere ao diretório atual.
ln -s somedir/original-dir link-name
não funciona. Ele cria um diretório com o nome link-name
que contém um link inválido. O comando que funciona éln -sr somedir/original-dir link-name
As versões recentes do GNU coreutils 'ln (> = 8.16) suportam a opção --relative
(or -r
), o que significa que você pode chamar ln -s
com 2 caminhos absolutos ou relativos (em relação ao seu diretório de trabalho) e ele descobrirá o caminho relativo correto que deve ser gravado no link simbólico.
-r
opção é útil quando você está compilando em cruz e precisa de caminhos absolutos no host de construção, mas de caminhos relativos no destino.
ln -r -s targetfile myalias
pode ajudá-lo a corrigi-lo
O que você precisa entender é basicamente que um link simbólico é mais um arquivo de texto do que uma entrada de diretório que contém um arquivo. Então, se você
echo ../poo >/file/name
então isso é bem parecido com
ln -s ../poo /file/name
O sistema não se importa se /file/../poo
existe, é apenas um pedaço de texto que é colocado no link simbólico. Quando algo tenta abrir o link simbólico, é quando o sistema tenta resolvê-lo.
Se você estiver usando um shell com preenchimento de nome de arquivo, esse recurso poderá confundir coisas, permitindo que você complete um nome de arquivo relativo ao seu diretório de trabalho atual, mesmo se você acabar usando isso como o destino de um link simbólico em outro diretório.
<
mudar a forma como o sistema de memória alocada. É claro que não há arquivo nomeado <
nesse diretório, é apenas uma maneira barata de criar um arquivo muito pequeno, que possui algumas propriedades atraentes em relação a um arquivo de texto comum nessa plataforma específica.
Links relativos eram complicados para mim no OS X, ou seja,
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
ambos não funcionaram (algo foi criado, mas não era um diretório). Criei o link desejado usando caminhos absolutos .
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
Eu só queria explicar melhor como criar um link simbólico usando caminhos relativos (com um exemplo detalhado).
Como Ignacio Vazquez-Abrams mencionou nos comentários, você deve especificar o local do arquivo / pasta em relação ao local em que o link simbólico será criado, não em relação ao seu diretório atual.
EXEMPLO
Você está dentro /usr/share/nginx/html/_src/learn
Você criará um link simbólico coding
no/usr/share/nginx/html
Crie um vínculo simbólico relativo (teoria):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
Crie um link simbólico relativo real:
sudo ln -s ./_src/learn/coding ../../coding
Mais informações (mesmo exemplo)
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