como atualizar um destino de link simbólico (ln -f -s não está funcionando)
45
estou a usar
ln -f -s / var / www / html / releases / build1390 app-current
para atualizar o link simbólico "app-current" com um novo destino. No entanto, isso não funciona, o link "app-current" mantém o destino original, no entanto, não recebo erros ...
Prefiro não remover o link e recriá-lo, basta atualizar o destino de um link existente. Isso é possível?
Isso funciona para mim, qual é o resultado strace ln -f -s /var/www/html/releases/build1390 app-current?
Ah, como é um diretório que você precisa adicionar -nsem nenhuma referência e isso deve resolver o problema. -fé realmente mais uma conveniência, pois adicionar o -f faz com que ele desvincule de qualquer maneira. Embora eu ache que isso provavelmente aconteceria algumas centenas de ms mais rápido em um sistema normalmente carregado.
Portanto, sem o -narf é desreferenciado, então o trata como se fosse realmente /. No seu exemplo em particular, se não houver erro, acho que você provavelmente criou um novo link simbólico /var/www/html/releases/build1390 app-currente desejará limpá-lo.
Você pode usar -nou --no-dereferenceimpedir que o destino seja desreferenciado, se for um link simbólico. Você também pode usar -Tou --no-target-directorypara garantir que o arquivo de destino sempre seja tratado como um arquivo regular.
Isso produz um comportamento ligeiramente diferente, como mostra o exemplo a seguir. Suponha que srchá algum arquivo, dirlinké um link simbólico para um diretório e diré um diretório real.
tem a resposta mais correta e sucinta para usuários do Linux.
19413 ross
Existe alguma maneira de forçar a substituição do diretório de destino para que você não receba a mensagem de erro cannot overwrite directory?
Gitaarik
@rednaw Você pode fazer isso encadeando alguns comandos, mas lnele próprio não remove os diretórios - isso provavelmente seria uma má ideia, porque exigiria a remoção recursiva de um número possivelmente grande de arquivos.
Você pode usar
-n
ou--no-dereference
impedir que o destino seja desreferenciado, se for um link simbólico. Você também pode usar-T
ou--no-target-directory
para garantir que o arquivo de destino sempre seja tratado como um arquivo regular.Isso produz um comportamento ligeiramente diferente, como mostra o exemplo a seguir. Suponha que
src
há algum arquivo,dirlink
é um link simbólico para um diretório edir
é um diretório real.Usando
-n
:ln -sfn src dirlink
substituidirlink
e vincula-o asrc
ln -sfn src dir
cria linkdir/src -> src
Usando
-T
:ln -sfT src dirlink
substituidirlink
e vincula-o asrc
ln -sfT src dir
produz uma mensagem de erro:ln: ‘dir’: cannot overwrite directory
fonte
cannot overwrite directory
?ln
ele próprio não remove os diretórios - isso provavelmente seria uma má ideia, porque exigiria a remoção recursiva de um número possivelmente grande de arquivos.