Eu criei esta estrutura de arquivo:
test/src
test/firefox
Quando executo este comando:
ln -s test/src test/firefox
Eu esperaria que um link simbólico test/firefox/src
fosse criado apontando para test/src
, no entanto, recebo esse erro:
-bash: cd: src: Too many levels of symbolic links
- O que estou fazendo errado?
- Você não pode criar um link simbólico para uma pasta armazenada em um irmão dessa pasta?
- Qual o sentido disso?
linux
filesystems
ln
David Zorychta
fonte
fonte
ls -ld test test/*
ou a sequência exata de comandos que você executou para criar esses arquivos.cd test/firefox/src
mostraria o errocd: no such file or directory: test/firefox/src
, porquetest/firefox/src
é um link simbólico dangling. Você está executandocd
em algum outro link simbólico chamadosrc
?ln -s
e ocd
que não nos diz. Supondo que haja apenas umtest
subdiretório no diretório atual, umcd src
(ou o que você executou) deve gerar um erro. Você colocou alguma coisatest/firefox
?/some/path
, aln -s test/src test/firefox
criará um link simbólico apontando de/some/path/test/firefox/src
para/some/path/test/firefox/test/src
, e não para/some/path/test/src
.Respostas:
Na superfície, o que você sugeriu que tentou funcionou para mim.
Exemplo
Faça o link simbólico:
Executá-lo uma segunda vez normalmente produziria o seguinte:
Então você provavelmente tem algo mais acontecendo aqui. Eu suspeitaria que você tenha uma referência circular onde um link está apontando de volta para si mesmo.
Você pode usar
find
para investigar isso um pouco:fonte
find -L ./ -mindepth 15
revelou o culpadoComo Dubu aponta em um comentário, o problema está nos seus caminhos relativos. Eu tive um problema semelhante ao desvincular minha configuração do nginx de
/usr/local/etc/nginx
para/etc/nginx
. Se você criar seu link simbólico assim:De fato, você criará o link / etc / nginx -> / etc / nginx, porque o caminho de origem é relativo ao caminho do link. A solução é tão simples quanto usar caminhos absolutos:
fonte
cygwin
. Obrigado!cd
se quiser ir para o diretório de destino no diretório em que está o arquivo do link simbólico.Os links simbólicos são relativos ao diretório pai do link, não ao diretório atual do
ln
processo.Quando você faz:
(onde
test/firefox
está um diretório), você está criando umtest/firefox/src
link simbólico cujo destino étest/src
.Isso
test/src
é relativo aotest/firefox
diretório, então é um link simbólico para/top/dir/test/firefox/test/src
.Se você quisesse que o link simbólico fosse um link
/top/dir/test/src
, seria necessário escrever:Ou
embora geralmente seja uma má idéia criar links simbólicos para caminhos absolutos, pois eles são facilmente quebrados quando os diretórios são renomeados ou os sistemas de arquivos montados em outro lugar.
Com o GNU
ln
, você pode usar sua-r
opção para permitir que ele faça o cálculo sozinho:fonte
Use o caminho absoluto em vez do caminho relativo, para que funcione.
Por exemplo:
fonte
A resposta é usar o caminho absoluto. Mas pode ser irritante digitar o caminho completo para algo que esteja no diretório atual. Você pode usar a substituição de comandos do pwd para evitar isso. Se o seu destino estiver no diretório atual:
Se o seu link estiver no diretório atual:
fonte