comment mettre à jour une cible de lien symbolique (ln -f -s ne fonctionne pas)
45
j'utilise
ln -f -s / var / www / html / releases / build1390 app-current
mettre à jour le lien symbolique "app-current" avec une nouvelle destination. Cependant, cela ne fonctionne pas, le lien "app-current" conserve sa destination d'origine, cependant, je ne reçois aucune erreur ...
Je préfère ne pas supprimer le lien et le recréer, il suffit de mettre à jour la cible d'un lien existant. Est-ce possible?
Cela fonctionne pour moi, quelle est la sortie de strace ln -f -s /var/www/html/releases/build1390 app-current?
Oh, puisque c’est un répertoire que vous devez ajouter -nsans déréférence, cela devrait résoudre le problème. -fest vraiment plus pratique puisque l’ajout de -f le dissocie de toute façon. Bien que je suppose que cela se produirait probablement quelques centaines de ms plus rapidement sur un système normalement chargé.
Donc, sans que l' -narf soit déréférencé, il est traité comme si c'était en réalité /. Dans votre exemple particulier, s'il n'y a pas d'erreur, je pense que vous avez probablement créé un nouveau lien symbolique à l'intérieur de /var/www/html/releases/build1390 app-currentet que vous voudrez nettoyer cela.
Vous pouvez utiliser -nou --no-dereferencepour empêcher le déréférencement de la cible s'il s'agit d'un lien symbolique. Vous pouvez également utiliser -Tou --no-target-directorypour vous assurer que le fichier cible sera toujours traité comme un fichier normal.
Celles-ci produisent un comportement légèrement différent, comme le montre l'exemple suivant. Supposons qu'il y srcait un fichier, dirlinkun lien symbolique vers un répertoire et dirun répertoire réel.
Utilisant -n:
ln -sfn src dirlinkécrase dirlinket lie àsrc
ln -sfn src dir crée un lien dir/src -> src
Utilisant -T:
ln -sfT src dirlinkécrase dirlinket lie àsrc
ln -sfT src dir produit un message d'erreur: ln: ‘dir’: cannot overwrite directory
a la réponse la plus correcte et succincte pour les utilisateurs de Linux.
Ross
Existe-t-il un moyen de forcer l’écrasement du répertoire cible pour ne pas recevoir le message d’erreur cannot overwrite directory?
jeudi
@rednaw Vous pouvez le faire en chaînant quelques commandes, mais lnne supprime pas les répertoires. Ce serait probablement une mauvaise idée, car cela exigerait la suppression récursive d'un nombre potentiellement énorme de fichiers.
Vous pouvez utiliser
-n
ou--no-dereference
pour empêcher le déréférencement de la cible s'il s'agit d'un lien symbolique. Vous pouvez également utiliser-T
ou--no-target-directory
pour vous assurer que le fichier cible sera toujours traité comme un fichier normal.Celles-ci produisent un comportement légèrement différent, comme le montre l'exemple suivant. Supposons qu'il y
src
ait un fichier,dirlink
un lien symbolique vers un répertoire etdir
un répertoire réel.Utilisant
-n
:ln -sfn src dirlink
écrasedirlink
et lie àsrc
ln -sfn src dir
crée un liendir/src -> src
Utilisant
-T
:ln -sfT src dirlink
écrasedirlink
et lie àsrc
ln -sfT src dir
produit un message d'erreur:ln: ‘dir’: cannot overwrite directory
la source
cannot overwrite directory
?ln
ne supprime pas les répertoires. Ce serait probablement une mauvaise idée, car cela exigerait la suppression récursive d'un nombre potentiellement énorme de fichiers.