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. Porém isso não funciona, o link "app-current" mantém seu destino original, porém não recebo nenhum erro ...
Prefiro não remover o link e recriá-lo, apenas atualizar o destino de um link existente. Isso é possível?
Responder1
Isso funciona para mim, qual é o resultado de strace ln -f -s /var/www/html/releases/build1390 app-current
?
Ah, já que é um diretório que você precisa adicionar -n
para não desreferenciar e isso deve resolver o problema. -f
é realmente mais conveniente, pois adicionar -f apenas faz com que ele seja desvinculado de qualquer maneira. Embora eu ache que isso provavelmente aconteceria algumas centenas de ms mais rápido em um sistema normalmente carregado.
Por exemplo, se arf já aponta para /home:
strace com -n
:
strace ln -n -f -s / arf
...
symlink("/", "arf") = -1 EEXIST (File exists)
unlink("arf") = 0
symlink("/", "arf") = 0
strace Sem -n
:
strace ln -f -s / arf
...
write(2, "ln: "..., 4ln: ) = 4
write(2, "`arf/': cannot overwrite director"..., 34`arf/': cannot overwrite directory) = 34
write(2, "\n"..., 1) = 1
Portanto, sem que o -n
arf seja desreferenciado, ln o trata como arf como se fosse realmente /
. No seu exemplo específico, se não houver erro, acho que você provavelmente criou um novo link simbólico dentro dele /var/www/html/releases/build1390 app-current
e desejará limpá-lo.
Responder2
Você pode usar -n
ou --no-dereference
para evitar que o alvo seja desreferenciado se for um link simbólico. Você também pode usar -T
ou --no-target-directory
para garantir que o arquivo de destinosempreser tratado como um arquivo normal.
Eles produzem um comportamento ligeiramente diferente, como mostra o exemplo a seguir. Suponha src
que seja algum arquivo, dirlink
seja um link simbólico para um diretório e dir
seja 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