GNU/Linux >> Tutoriels Linux >  >> Linux

Comment changer atomiquement un lien symbolique vers un répertoire dans busybox?

Cela peut en effet être fait de manière atomique avec rename(2) , en créant d'abord le nouveau lien symbolique sous un nom temporaire, puis en écrasant proprement l'ancien lien symbolique en une seule fois. Comme l'indique la page de manuel :

Si nouveauchemin fait référence à un lien symbolique, le lien sera écrasé.

Dans le shell, vous feriez cela avec mv -T comme suit :

$ mkdir a b
$ ln -s a z
$ ln -s b z.new
$ mv -T z.new z

Vous pouvez strace cette dernière commande pour s'assurer qu'elle utilise bien rename(2) sous le capot :

$ strace mv -T z.new z
lstat64("z.new", {st_mode=S_IFLNK|0777, st_size=1, ...}) = 0
lstat64("z", {st_mode=S_IFLNK|0777, st_size=1, ...}) = 0
rename("z.new", "z")                    = 0

Notez que dans ce qui précède, les deux mv -T et strace sont spécifiques à Linux.

Sur FreeBSD, utilisez mv -h alternativement.


Reprendre là où Arto s'est arrêté ici, c'est tout à fait possible, même sans mv -T , il vous suffit de créer un nouveau lien symbolique avec le même nom que le répertoire cible et mv placez-le dans le répertoire parent de votre cible :

mkdir -p tmp/real_dir1 tmp/real_dir2
touch tmp/real_dir1/a tmp/real_dir2/a
# start with ./target_dir pointing to tmp/real_dir1
ln -s tmp/real_dir1 target_dir
# create a symlink named target_dir in tmp, pointing to real_dir2
ln -sf tmp/real_dir2 tmp/target_dir
# atomically mv it into ./ replacing ./target_dir
mv tmp/target_dir ./

Exemple de code pris via (http://axialcorps.wordpress.com/2013/07/03/atomically-replacing-files-and-directories/)


Avez-vous essayé ln -snf ?

L'option -n écrase la destination plutôt que d'écrire en dessous lorsque la destination est un lien symbolique vers un répertoire.

Bravo


Linux
  1. Comment descendre d'un répertoire ?

  2. Comment changer toutes les occurrences d'un mot dans tous les fichiers d'un répertoire

  3. Comment changer le répertoire de démarrage d'une session tmux ?

  4. Comment changer le répertoire personnel de l'utilisateur dans Ubuntu 9.04 ?

  5. Comment changer le répertoire de démarrage de gnome-terminals ?

Comment changer le répertoire personnel de Jenkins

Comment utiliser la commande Linux cd pour changer de répertoire

Comment modifier les autorisations de fichiers ou de répertoires dans cPanel ?

Comment changer le répertoire des addons

Déplacer un fichier en cours d'utilisation -- Comment ça marche ?

ldd ne trouve pas le chemin, comment ajouter