Caminhos em ln com links físicos e links suaves

1

Como os caminhos relativos funcionam 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 man page não parece explicar isso. Alguém poderia explicar?

    
por Ferus 09.01.2018 / 18:33

1 resposta

2

É diferente com e sem -s .

com -s em:

ln -s path/to/file some/dir/link

path/to/file está definido como o destino do link simbólico de some/dir/link (ou some/dir/link/file if link era um diretório).

Um link simbólico é um tipo especial de arquivo que / contém / um caminho (pode ser qualquer array de bytes não-0, alguns sistemas até permitem uma string vazia) que é o alvo do symlink. ln define o primeiro argumento.

Ao resolver o link (quando o link for usado mais tarde), o caminho path/to/file será relativo ao diretório em que o link está (hard-) vinculado ( some/dir quando some/dir/link é acessado através do seu caminho some/dir/link ).

Observe que o path/to/file não precisa existir no momento em que o comando ln é executado (ou nunca).

Em:

ln path/to/file some/dir/link

É semelhante a:

cp path/to/file some/dir/link

O path/to/file é relativo ao diretório de trabalho atual do processo que está executando ln .

Nada impede que você crie vários links (hard-) para um symlink. Por exemplo:

$ mkdir -p a b/c b/a
$ ln -s ../a b/L # b/L a symlink to "a"
$ ln b/L b/c/L

b/L e b/c/L são o mesmo arquivo: mesmo inode mas vinculado a dois diretórios diferentes. Ambos são links simbólicos com o destino ../a . Mas quando b/L é resolvido, isso aponta para ./a enquanto quando b/c/L , que aponta para ./b/a .

    
por 09.01.2018 / 18:44