67 votes

Comment puis-je changer tous les fichiers appartenant à un utilisateur pour un autre utilisateur ?

Je cherche une commande Linux qui peut changer la propriété de tous les fichiers appartenant à un utilisateur donné, de préférence dans un répertoire ciblé, pour un autre utilisateur spécifié.

La commande de mes rêves ressemblerait à quelque chose comme ça...

chuser -R --olduser tom --newuser jerry

ou

chuser -R --olduser 1066 --newuser 1492

Voici mon scénario... J'ai un fichier de sauvegarde (.tgz) avec des informations sur les utilisateurs et les groupes préservées. Il a été pris sur un serveur web exécutant Apache et MySQL. Les fichiers de la sauvegarde proviennent de tout le système et contiennent des fichiers de plusieurs utilisateurs différents et de plusieurs comptes de type système. Il est essentiel que les paramètres ne soient pas perdus lors de la restauration sur le nouveau serveur. Le problème est que les utilisateurs de la machine sur laquelle les fichiers sont restaurés ne correspondent pas à ceux du fichier de sauvegarde. Par exemple, les deux machines ont un utilisateur MySQL mais elles ont des identifiants différents et il y a plusieurs identifiants qui existent sur les deux machines et qui appartiennent à des utilisateurs différents. Cela signifie qu'il n'y a aucun moyen de synchroniser les utilisateurs de la nouvelle machine avec ceux de l'ancienne.

Je peux trouver tous les fichiers des utilisateurs avec la commande find comme ceci...

find /decompressed-backup-dir -uid 1050

ou

find /decompressed-backup-dir -user tom

Si, comme je le soupçonne, il n'y a pas moyen de faire ce que je veux avec une seule commande, alors il y a peut-être un moyen d'envoyer les résultats de la commande find à une autre commande pour gérer le changement de propriétaire ?

Je pourrais le faire avec un script PHP mais il y a 4GB et des dizaines de milliers de fichiers dans la sauvegarde donc je ne veux pas utiliser PHP ou Perl mais je serais heureux avec un script script qui pourrait le gérer.

97voto

krainboltgreene Points 231

Je pense que le drapeau --from de la commande chown est probablement le moyen le plus simple.

chown --from=oldguy newguy * -R

47voto

Ben Voigt Points 6887

Quelque chose comme

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

16voto

Solid_I Points 21

Ajoutant à la réponse de SiteKickr , chgrp n'a pas le --from mais vous pouvez obtenir la même chose avec chown en omettant l'utilisateur.

Exemple :

chown -R --from=:currentgroup :newgroup /some/directory

6voto

Digits Points 239

Vous pouvez utiliser find comme quelqu'un d'autre l'a fait, pour faire le chown .

Cependant, vous n'aurez peut-être pas à le faire car tar s'occupera des choses pour vous.

Par exemple, si vous faites un tar en machine A où l'utilisateur tom es uid 500 et ensuite untar le fichier sur machine B où l'utilisateur tom es uid 505 , tar fera ce qu'il faut et rendra les fichiers appartenant à uid 505 .

1voto

Timo Kähkönen Points 193

En responder définit à la fois l'utilisateur et le groupe :

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

mais si vous voulez modifier UN SEUL groupe de fichiers qui appartient à un utilisateur, vous ne pouvez pas utiliser chown (pour autant que je sache), mais utilisent plutôt chgrp :

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

et pour modifier UN SEUL groupe de fichiers appartenant à un certain groupe, vous devez utiliser par exemple.. :

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

Juste pour ajouter des connaissances.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X