Sua pergunta é meio confusa.
-
Você perguntou "Existe alguma maneira que eu possa fazer um link simbólico para ele de ~/dir1
[...]?" Eu suponho que você quis dizer "de ~/dir2
", com base no resto do seu post?
-
Seu primeiro comando
$ ln -s ./dir1/file.txt ./dir2/file.txt
não faz o que você acha que faz. Supondo que você ainda esteja em seu diretório home, o comando acima cria um link simbólico cujo próprio caminho é ~/dir2/file.txt
, e este link simbólico aponta literalmente para o caminho ./dir1/file.txt
. Como o referido link simbólico reside no diretório ~/dir2
, esse caminho de destino é resolvido para ~/dir2/./dir1/file.txt
, o que resolve ainda mais para ~/dir2/dir1/file.txt
(provavelmente inexistente e não o que você deseja). Então duvido porque você disse que resolve ~/dir1/dir2/file.txt
.
-
Seu segundo comando falha porque não há diretório ../dir2
para colocar o link simbólico, e é isso que a mensagem de erro significava.
-
Para responder à sua pergunta, sim. O sistema operacional não se importa se o seu link simbólico aponta para um caminho sem nenhum objeto de sistema de arquivos válido presente.
Provavelmente o que você realmente quer é algo como
ln -s ../dir1/file.txt ./dir2/file.txt
Eu acho? Esse comando cria um link simbólico cujo próprio caminho é ./dir2/file.txt
e seu destino é o caminho relativo literal ../dir1/file.txt
. O caminho final e absoluto apontado pelo link simbólico é ~/dir2/../dir1/file.txt
, que resolve para ~/dir1/file.txt
.
Observe que o símbolo ~
é um caractere expansível do shell que é expandido para o caminho absoluto do seu diretório inicial. A ~
-expansion não faz parte da resolução do caminho do SO.
Leitura sugerida
Manpages do Linux de path_resolution(7)
, symlink(7)
, ln(1)
e ln(1p)
.
Editar
Esclarecimentos e amp; leitura sugerida.