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