Primeira edição:
Citando você:
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.
O problema com a estrutura de diretórios fornecida:
~ / 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
e usando o comando:
ln -s /remote_loc/site1 test_link
É 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ê:
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?
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:
- O que pode ser atualizado e
- O que não pode ser atualizado sem o uso de opções apropriadas.
Atualizando links simbólicos com destinos que não são diretórios.
ln -sf:
o -f ou --force remove os arquivos de destino existentes. É usado para atualizar o destino ou destino de um link.
Exemplo:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
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:
ln -sfr:
o -r ou --relative cria links simbólicos em relação à localização do link.
Exemplo:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
Mas, atualizar um link para um diretório não funcionará se o destino for um diretório.
Exemplo:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
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:
ln -sfrn:
A opção -n ou --no-dereference trata LINK_NAME como um arquivo normal se for um link simbólico para um diretório.
Exemplo:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
Em contraste com:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
vez derm
. Comunlink
você nunca corre o risco de perder todos os arquivos em um diretório de origem acidentalmente usando chaves erradas.