Je recherche une commande Linux capable de changer la propriété de tous les fichiers appartenant à un utilisateur donné, de préférence dans un répertoire ciblé, en 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
C'est mon scénario ... J'ai un fichier de sauvegarde (.tgz) dans lequel sont conservées les informations relatives aux utilisateurs et aux groupes. Il a été pris à partir d'un serveur Web exécutant Apache et MySQL. Les fichiers de la sauvegarde proviennent de l'ensemble du système et contiennent des fichiers de plusieurs utilisateurs différents et de plusieurs comptes de type de 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 sur la machine sur lesquels les fichiers sont en cours de restauration 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 existe plusieurs identifiants sur les deux machines appartenant à 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 machine.
Je peux trouver tous les fichiers 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 aucun moyen de faire ce que je veux avec une seule commande, alors peut-être y a-t-il un moyen de diriger les résultats de la commande find vers une autre commande afin de gérer le changement de propriété?
Je pourrais le faire avec un script PHP mais il y a 4 Go 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 shell capable de le gérer.
la source
-uid
je utilisé-user
Je pense que la commande --from flag on chown est probablement le moyen le plus simple.
la source
brew install coreutils
etgchown
.Ajout à la réponse par SiteKickr ,
chgrp
n'a pas l'--from
argument, mais vous pouvez obtenir la même chosechown
en omettant l'utilisateur.Exemple:
la source
Vous pouvez utiliser
find
, comme quelqu'un l’a posté, pour faire lechown
.Cependant, vous n’avez peut-être pas à vous en
tar
occuper.Par exemple, si vous faites un
tar
surmachine A
où l' utilisateurtom
estuid 500
puisuntar
le fichier surmachine B
lequel l' utilisateurtom
estuid 505
,tar
allez faire la bonne chose et de faire les fichiers appartenant àuid 505
.la source
La réponse définit à la fois l'utilisateur et le groupe:
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
mais si vous voulez changer SEULEMENT le groupe de fichiers qui appartient à un utilisateur, vous ne pouvez pas utiliser
chown
(autant que je sache), mais utilisez plutôtchgrp
:find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +
et pour changer SEULEMENT le groupe de fichiers qui appartient à un groupe que vous devez utiliser, par exemple:
find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +
Juste pour ajouter des connaissances.
la source
newuser
partie. La page de manuel indique: "Si les deux points et le groupe sont indiqués, mais que le propriétaire est omis, seul le groupe des fichiers est modifié. Dans ce cas, ilchown
remplit la même fonction quechgrp
."Si vous devez mapper de manière récursive les anciens / nouveaux identifiants de propriété résolus sur le même
/etc/passwd
utilisateur ,(ce qui pourrait arriver après que vous ayez introduit LDAP sur le serveur et que vous ayez
/etc/passwd
des entrées en double pour chaque utilisateur et groupe),vous pouvez utiliser ce script, j'ai écrit: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
Il crée lui-même le mappage. L'interface du programme est, malheureusement, dans le code. Ajoutez quelques instructions de débogage si vous devez rechercher comment il fait quoi. Mais c’est plutôt un chown glorifié avec une cartographie créée à partir de doublons de
/etc/passwd
. Si cela peut être utile à quiconque, ce serait vraiment cool. :)la source
Vous pouvez utiliser
chown - R /directory/file
Cette commande changera les permissions pour toutes les instances du répertoire
chown - R /directory
la source