Estoy buscando un comando de Linux que pueda cambiar la propiedad de todos los archivos que pertenecen a un usuario determinado, preferiblemente en un directorio de destino, a otro usuario especificado.
El comando de mis sueños se vería así ...
chuser -R --olduser tom --newuser jerry
o
chuser -R --olduser 1066 --newuser 1492
Este es mi escenario ... Tengo un archivo de copia de seguridad (.tgz) con información de usuarios y grupos conservada. Fue tomado de un servidor web que ejecuta Apache y MySQL. Los archivos en la copia de seguridad provienen de todo el sistema y contienen archivos de varios usuarios diferentes y varias cuentas de tipo de sistema, y es clave que cuando se restaure en el nuevo servidor, la configuración no se pierda. El problema es que los usuarios de la máquina en los que se restauran los archivos no coinciden con los del archivo de copia de seguridad. Por ejemplo, ambas máquinas tenían un usuario de MySQL pero tienen diferentes ID de usuario y existen varias ID de usuario que existían en ambas máquinas que pertenecen a diferentes usuarios. Esto significa que no hay forma de sincronizar los usuarios de la nueva máquina con los de la máquina anterior.
Puedo encontrar todos los archivos de los usuarios con el comando find como este ...
find /decompressed-backup-dir -uid 1050
o
find /decompressed-backup-dir -user tom
Si, como sospecho, no hay forma de hacer lo que quiero con un solo comando, ¿tal vez hay una manera de canalizar los resultados del comando find a otro comando para manejar el cambio de propiedad?
Podría hacer esto con un script PHP, pero hay 4GB y decenas de miles de archivos en la copia de seguridad, por lo que no quiero usar PHP o Perl, pero estaría contento con un script de shell que pudiera manejarlo.
fuente
-uid
que solía usar-user
Creo que la bandera --from en el comando chown es probablemente la forma más fácil.
fuente
brew install coreutils
ygchown
.Agregar a la respuesta de SiteKickr ,
chgrp
no tiene el--from
argumento, pero puede lograr lo mismochown
omitiendo el usuario.Ejemplo:
fuente
Puedes usar
find
, como alguien más publicó, para hacer elchown
.Sin embargo, es posible que no tenga que
tar
que se encargará de las cosas por usted.Por ejemplo, si realiza un
tar
encendidomachine A
dondetom
está el usuariouid 500
y luegountar
el archivo enmachine B
dondetom
está el usuariouid 505
,tar
hará lo correcto y hará que los archivos sean de su propiedaduid 505
.fuente
La respuesta establece tanto el usuario como el grupo:
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
pero si desea cambiar SOLO un grupo de archivos que pertenece a algún usuario, no puede usar
chown
(hasta donde yo sé), sino que usachgrp
:find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +
y para cambiar SOLO el grupo de archivos que pertenece a algún grupo que debe usar, por ejemplo:
find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +
Solo para agregar conocimiento.
fuente
newuser
parte. La página de manual dice: "Si se dan los dos puntos y el grupo, pero se omite el propietario, solo se cambia el grupo de archivos; en este caso,chown
realiza la misma función quechgrp
".Si necesita asignar de forma recursiva los ID de propiedad antiguos / nuevos que se resuelven en el mismo
/etc/passwd
usuario ,(lo que podría suceder después de haber introducido LDAP en el servidor y
/etc/passwd
tener entradas duplicadas para cada usuario y grupo),podrías usar este script que escribí: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
Crea el mapeo por sí solo. La interfaz del programa está, desafortunadamente, en el código. Agregue algunas declaraciones de depuración si necesita investigar cómo hace qué. Pero es más o menos un vestido glorificado con un mapeo creado a partir de duplicados
/etc/passwd
. Si esto es útil para alguien, sería genial. :)fuente
Puedes usar
chown - R /directory/file
Este comando cambiará el permiso para todas las instancias del directorio
chown - R /directory
fuente