Respuestas:
La versión GNU de la utilidad chmod puede copiar el modo de un archivo ( RFile
) a otro ( file
).
chmod --reference=RFile file
GNU coreutils se encuentra en la mayoría de las distribuciones de Linux y Cygwin, entre otros lugares. No todas las implementaciones de chmod proporcionan esta opción.
--reference
opción está incluida en la versión GNU; OSX probablemente usa un chmod que se origina con BSD en su lugar. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
, al copiar un archivo, se copiarán los permisos y el archivo
Se me ocurrió esto:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
No es totalmente a prueba de balas, pero hace lo que necesito.
prueba esto:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
esto subiría recursivamente y modificaría cada archivo, si dos directorios no coinciden en los archivos, verá muchos errores de "No existe tal archivo o directorio".
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Puede usar getfacl
para recuperar la lista completa de permisos de archivos, propietario, grupo y ACL adicionales (listas de control de acceso).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Si guarda esa salida en un archivo (por ejemplo acl.txt
), puede restaurar desde este formato con setfacl --restore acl.txt
. Si solo desea restaurar un solo archivo, y ese archivo tiene un nombre de archivo diferente al original, tendrá que usarlo setfacl --set-file acl.txt filename.txt
(donde filename.txt
está el nuevo nombre de archivo).
Guardar permisos originales para acl.txt
:
$ getfacl filename.txt > acl.txt
Sobrescribir permisos (para demostración; esto es solo para que pueda ver que restaurarlo en el siguiente paso funciona)
$ chmod 777 filename.txt
$ sudo chown nobody:root filename.txt
$ ls -l filename.txt
-rwxrwxrwx 1 nobody root 0 Jan 8 14:24 filename.txt
Use setfacl
para restaurar los permisos correctos de acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
El nombre de archivo se toma del # file:
comentario generado por getfacl
, por lo que no es necesario especificarlo en la línea de comando.
Si desea restaurar esos permisos en un archivo diferente, puede usarlo en --set-file
lugar de hacerlo --restore
así:
$ setfacl --set-file acl.txt second_filename.txt
Si termina sobrescribiendo los permisos en algunos archivos /usr
, pero no sabe qué archivos ha sobrescrito, generalmente puede solucionarlo restaurando desde otro sistema configurado de manera similar.
Permisos de respaldo del sistema de trabajo (nota: getfacl
genera rutas relativas, así que asegúrese de tener cd
una ubicación consistente en ambas máquinas)
# cd /
# getfacl -R usr > /root/acls.txt
Copie el volcado de ACL en el sistema con permisos rotos
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Restaure el volcado de ACL para sobrescribir los permisos rotos con los de la máquina buena conocida
# cd /
# setfacl --restore /root/acls.txt