Quando você tem um link como:
link -> foo/bar
e deseja alterá-lo para:
link -> new/target
Existem dois casos a considerar:
-
foo/bar
não é um diretório ou não existe ou você não tem acesso de pesquisa a foo
. Então
ln -s new/target link
falhará porque link
já existe, mas você pode superar isso usando o padrão:
ln -fs new/target link
-
foo/bar
é um diretório (e você tem permissão de pesquisa para foo
para poder determinar que foo/bar
é um diretório). Nesse caso, quando você faz:
ln -s new/target link
ou
ln -fs new/target link
Isso é entendido como criar um novo symlink target
dentro do diretório link
( link
é um diretório porque é um symlink para o diretório foo/bar
). Então você vai criar um:
foo/bar/target -> new/target
Para superar isso, o GNU ln
tem uma opção -T
para o nome do link ser sempre considerado como nome do link, e não como um diretório para criar o (s) link (s). Assim, com o GNU ln
:
ln -fsT new/target link
funcionará. Como antes, ele removerá o symlink link
original e o criará novamente com new/target
como o destino (e o processo 'euid e egid como o proprietário).
O GNU ln
também possui uma opção -n
. Ele funciona como -T
, exceto quando link
é realmente um diretório real, caso em que ele ainda criará o symlink dentro desse diretório (em vez de falhar com um erro).
Portavelmente, sua melhor opção é remover o link primeiro e depois recriá-lo:
rm -f link && ln -s new/target link
Na maioria dos sistemas, as permissões nos links simbólicos são ignoradas e geralmente corrigidas para rwxrwxrwx
.
Em sistemas onde as permissões de links simbólicos são importantes (como OS / X onde você precisa de permissão de leitura para um symlink para poder resolver seu alvo), geralmente há uma maneira de alterá-las ( chmod -h
no OS / X). p>
Propriedade, embora, como acima, não seja relevante para o acesso ao arquivo apontado pelo link simbólico na maioria dos sistemas, pode ter alguma outra relevância para o t
bit do diretório pai ou das cotas ... ) e há um comando padrão para alterá-lo:
chown -h user[:group] the-link
chgrp -h group the-link