El otro día planeé hacer una copia de seguridad de algunos datos de mi sistema de escritorio Ubuntu en una unidad USB externa. Después de transferir todos los datos a la unidad externa, noté que el propietario y los permisos de los archivos y directorios en el origen y el destino son diferentes. Pero quería mantener intactos los atributos de archivo existentes (como el propietario, el grupo y la marca de tiempo, etc.) en ambas ubicaciones. Después de una búsqueda rápida en Google y de revisar las páginas de manual del comando "cp", descubrí que podemos mantener intactos los permisos de propiedad y de archivos al copiar archivos y directorios en Linux. Si alguna vez ha estado en una situación como esta, aquí hay una solución rápida para hacerlo.
Mantenga la propiedad y los permisos de archivo intactos al copiar archivos o directorios en Linux
El cp El comando tiene una opción para copiar archivos y directorios, pero conserva las horas de modificación, las horas de acceso y los modos del archivo original.
$ cp -rp ~/data /media/sk/sk_seagate/data/
Aquí, estoy copiando el contenido de una carpeta llamada "datos" a mi disco externo.
Desde el cp páginas man del comando:
-p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all
Entonces, si usa -p marca, conservará todos los atributos de archivo existentes, como el modo, la propiedad y las marcas de tiempo del archivo original.
Y la "-r" bandera se utiliza aquí para copiar directorios de forma recursiva. Es decir, copiará directorios y sus subdirectorios y archivos.
Alternativamente, puede usar -a bandera. Incluye el indicador -r y conserva todo, como enlaces, xattr, atributos de SELinux, etc.
$ cp -a ~/data /media/sk/sk_seagate/data/
De las páginas man del comando cp:
-a, --archive same as -dR --preserve=all
Para verificar si los permisos y la propiedad del archivo están intactos, use getfacl comando en ambas ubicaciones, es decir, origen y destino.
$ getfacl ~/data
$ getfacl /media/sk/sk_seagate/data/
Si desea copiar archivos entre el sistema local y un sistema remoto en la misma red, puede usar "scp" Comando para transferir archivos de un sistema a otro como se muestra a continuación.
$ scp -rp ~/data [email protected]:/home/senthil/
El comando anterior copiará la carpeta de contenido llamada "datos" de mi sistema local a un sistema remoto. Aquí, 192168.225.22 es la dirección IP de mi sistema remoto y "senthil" es el nombre de usuario del sistema remoto.
Verifique los permisos de archivo y la propiedad del directorio "datos" en ambos sistemas usando el comando "getfacl".
Primero, verifique los atributos del archivo del directorio "datos" en el sistema local:
$ getfacl data/
Salida de muestra:
# file: data/ # owner: sk # group: sk user::rwx group::rwx other::r-x
A continuación, verifique los atributos de archivo del directorio "datos" en el sistema remoto. Puede iniciar sesión directamente en el sistema remoto y verificar los atributos de archivo de un directorio remoto a través del comando ssh como se muestra a continuación.
$ ssh [email protected] getfacl data
Salida de muestra:
[email protected]'s password: # file: data # owner: senthil # group: senthil user::rwx group::rwx other::r-x
Como puede notar en los resultados anteriores, la información del propietario y del grupo (es decir, senthil) son diferentes en mi sistema remoto. Porque, el -p la bandera del comando scp no conserva todos los permisos.
Desde las páginas man del comando scp:
-p Preserves modification times, access times, and modes from the original file.
Está claro que la -p flag solo conservará las horas de modificación, las horas de acceso y los modos del archivo original, pero no la propiedad . En tales casos, puede crear un nombre de usuario común en ambos sistemas y probar el comando anterior para tener la misma propiedad y permisos de archivo en diferentes sistemas. O simplemente use el comando "chown" en el sistema de destino para cambiar la propiedad.
Para obtener más detalles, consulte las páginas man de los comandos cp y scp.
$ man cp
$ man scp
Lectura sugerida:
- Cómo copiar archivos y cambiar la propiedad y los permisos al mismo tiempo
Espero que esto ayude.