Como funcionam os caminhos relativos em ln (-s or not)
? Por exemplo, se eu digitar ln -s foo bar/banana.txt
o que isso significa? O que é foo em relação a? Porque não parece ser relativo ao caminho atual. Também é diferente se eu remover -s
ou não? Eu testei e o resultado não faz sentido para mim, e a página de manual não parece explicar isso. Alguém poderia explicar?
É diferente com e sem
-s
.Com
-s
em:path/to/file
é definido como o destino do link simbólicosome/dir/link
(ousome/dir/link/file
selink
for um diretório).Um link simbólico é um tipo especial de arquivo que /contém/ um caminho (pode ser qualquer array de bytes diferentes de 0, alguns sistemas até permitem uma string vazia) que é o alvo do link simbólico.
ln
define-o como o primeiro argumento.Ao resolver o link (quando o link for usado posteriormente), o
path/to/file
caminho será relativo ao diretório ao quallink
está vinculado (hard-) (some/dir
aqui quandosome/dir/link
é acessado por meio de seusome/dir/link
caminho).Observe que
path/to/file
não precisa existir no momento em que oln
comando é executado (ou nunca).Enquanto em:
É semelhante a:
O
path/to/file
é relativo ao diretório de trabalho atual do processo em execuçãoln
.Nada o impede de criar vários links (físicos) para um link simbólico. Por exemplo:
b/L
eb/c/L
são o mesmo arquivo: mesmo inode, mas vinculado a dois diretórios diferentes. Ambos são links simbólicos com target../a
. Mas quandob/L
é resolvido, isso aponta para./a
while quandob/c/L
, isso aponta para./b/a
.