Estou tentando usar links simbólicos. Eu li 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. Após 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 fazer isso?
Atualizar
Aqui está a 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 no nível de vários diretórios?
update
symbolic-link
Jérôme Verstrynge
fonte
fonte
unlink
vez derm
. Comunlink
você nunca corre o risco de perder todos os arquivos em um diretório de origem acidentalmente usando chaves erradas.-n
? (pode ser o problema). Além disso, se o seu ln suportar-t
, use-o, nesses casos e-T
oudestination/
em outros casos.Respostas:
Usar
-f
comln
substituirá qualquer link que já estava lá, desde que você tenha as permissões corretas, ele deve funcionar ... Sempre funcionou para mim. Qual sistema operacional você está usando?fonte
ln
parâmetros, como estou propenso a fazer, o-f
switch destruirá seus arquivos existentes (destinos de link)? Nos dois casos, também temos o-i
parâmetro (que solicitará a substituição do usuário), se você quiser um pouco de segurança.-f
apenas chamaunlink()
elink()
sob o capô: stackoverflow.com/a/1466570/157385 . Eu gostaria de lembrar a ordem correta, no entanto!-n
. Veja a resposta aceita.Ok, descobri 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.
fonte
relative
caminho (sem o líder /) e o outro é umabsolute
caminho (com o líder /). Se você estiver administrando um sistema Linux, é CRÍTICO entender as diferenças. Por exemplo, a diferença entrerm -rf ./*
erm -rf /.*
decide se você manter o seu emprego ou não :)-n
parâmetro para substituir o link do símbolo.Primeira edição:
Citando você:
O problema com a estrutura de diretórios fornecida:
e usando o comando:
É que ele cria um link simbólico no seu $ PWD, ou diretório de trabalho atual, que aponta para um arquivo não existente fora do /, ou root, em / remote_loc / site1
Se o seu PWD estiver em ~ / scripts /, você deverá 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 caminhos absolutos estiverem nos
ln
argumentos de. É necessário fornecer um caminho completo quando o diretório de trabalho atual for 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 caminhos absolutos dados no
ln
argumento acima sem a opção -r, o link simbólico ainda é relativo ao link.Atualizar links para diretórios:
Exemplo:
Em contraste com:
fonte
fonte