Estou tentando usar links simbólicos. Fiz algumas leituras e encontrei os seguintes comandos:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
Criações e exclusões funcionam bem. Mas as atualizações não funcionam. Depois de executar este comando, o link simbólico se torna inválido.
Eu li aqui e ali que não é possível atualizar/substituir um link simbólico. Portanto, há informações contraditórias na rede. Quem está certo? Se um link simbólico pode ser atualizado/substituído, como posso conseguir isso?
Atualizar
Aqui está minha estrutura de diretórios:
~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt
De ~/scripts/test/
, quando eu executo:
ln -s /remote_loc/site1 test_link
a test_link
é criado, e eu posso ls -l
, mas parece quebrado (ao contrário do que eu disse acima na minha pergunta).
Como posso executar um link de nível de diretório múltiplo?
Usar
-f
withln
substituirá qualquer link que já estava lá, portanto, desde que você tenha as permissões corretas, deve funcionar... Sempre funcionou para mim. Qual sistema operacional você está usando?Ok, encontrei onde está o meu erro: não se deve colocar o primeiro
/
no caminho.Em outras palavras, os comandos nas minhas perguntas devem ser:
ao invés de
considerando o meu caso.
Primeira questão:
Citando você:
O problema com a estrutura de diretórios fornecida:
e usando o comando:
É que ele cria um link simbólico em seu $PWD, ou diretório de trabalho atual, que aponta para um arquivo inexistente fora do /, ou root, em /remote_loc/site1
Se o seu PWD estiver em ~/scripts/, você deve ter usado isso:
ln -s remote_loc/site1 test_link
caso contrário, você poderia ter usado o caminho absoluto completo como:
ln -s /home/yourusername/remote_loc/site1 test_link
Segunda questão:
Citando você:
Para responder à sua pergunta "Quem está certo", não tenho certeza do que exatamente você leu ou como foi entendido. Mas, o seguinte deve ajudar a esclarecer:
Atualizando links simbólicos com destinos que não são diretórios.
Exemplo:
Mas, como você pode ver, ele fornecerá o caminho absoluto se os caminhos absolutos estiverem nos
ln
argumentos de . É necessário fornecer um caminho completo quando o diretório de trabalho atual é diferente do diretório pai do link.Caminhos Relativos:
Exemplo:
Mas, atualizar um link para um diretório não funcionará se o destino for um diretório.
Exemplo:
Como você pode ver, apesar de usar nomes de caminho absolutos fornecidos no
ln
argumento de 's acima sem a opção -r, o link simbólico ainda é relativo ao link.Atualizar links para diretórios:
Exemplo:
Em contraste com: