Como eu crio um link simbólico relativo no Linux?

55

Eu preciso de um symlink que resolva relative para o diretório em que ele é colocado. Qual comando é usado para criar uma coisa dessas?

    
por Jeremiah Rose 28.05.2010 / 10:21

5 respostas

67

  1. Ir para o diretório em que você deseja que o link resida em
  2. Execute o comando 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. Não sabe em qual diretório você estava quando criou o link.

    
por 28.05.2010 / 10:23
18

Versões recentes do GNU coreutils 'ln (> = 8.16) suportam a opção --relative (ou -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 descobrirá o caminho relativo correto que deve ser escrito no symlink.

    
por 09.11.2014 / 21:53
1

O que você precisa entender é basicamente que um link simbólico é mais parecido com um arquivo de texto do que com 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 symlink. Quando algo tenta abrir o link simbólico, é quando o sistema tenta resolvê-lo.

Se você estiver usando um shell com conclusão de nome de arquivo, esse recurso pode confundir coisas, permitindo que você complete um nome de arquivo em relação ao seu diretório de trabalho atual, mesmo que você acabe usando isso como destino de um symlink outro diretório.

    
por 25.04.2018 / 09:25
0

Os links relativos foram complicados para mim no OS X, por exemplo

~/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). Eu criei o link desejado usando caminhos absolutos .

~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
    
por 05.10.2011 / 19:42
0

Eu só queria explicar como criar um symlink usando caminhos relativos (com um exemplo detalhado).

Como Ignacio Vazquez-Abrams mencionou nos comentários, você deve especificar a localização do arquivo / pasta em relação ao local onde o link simbólico será criado, e não em relação ao diretório atual.

EXEMPLO

Você está em /usr/share/nginx/html/_src/learn Você criará um link simbólico coding em /usr/share/nginx/html

Criar um link simbólico relativo (teoria):

sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location

Crie uma ligação simbólica 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  
    
por 25.04.2018 / 08:13