L'autre jour, j'avais prévu de sauvegarder certaines données de mon système de bureau Ubuntu sur un lecteur USB externe. Après avoir transféré toutes les données sur le lecteur externe, j'ai remarqué que le propriétaire et les autorisations des fichiers et répertoires sur la source et la destination sont différents. Mais, je voulais garder les attributs de fichier existants (tels que le propriétaire, le groupe et l'horodatage, etc.) intacts sur les deux emplacements. Après une recherche rapide sur Google et en parcourant les pages de manuel de la commande "cp", j'ai découvert que nous pouvions conserver intactes les autorisations de propriété et de fichier lors de la copie de fichiers et de répertoires sous Linux. Si vous avez déjà été dans une situation comme celle-ci, voici une solution rapide pour le faire.
Gardez la propriété et les autorisations de fichiers intactes lors de la copie de fichiers ou de répertoires sous Linux
Le cp La commande a une option pour copier des fichiers et des répertoires mais conserve les heures de modification, les heures d'accès et les modes du fichier d'origine.
$ cp -rp ~/data /media/sk/sk_seagate/data/
Ici, je copie le contenu d'un dossier nommé "data" sur mon disque externe.
Du cp pages de manuel de la commande :
-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
Donc, si vous utilisez -p flag, il conservera tous les attributs de fichier existants tels que le mode, la propriété et les horodatages du fichier d'origine.
Et le "-r" flag est utilisé ici pour copier des répertoires de manière récursive. Ce qui signifie - il copiera les répertoires et ses sous-répertoires et fichiers.
Alternativement, vous pouvez utiliser -a drapeau. Il inclut le drapeau -r et préserve tout, comme les liens, xattr, les attributs SELinux, etc.
$ cp -a ~/data /media/sk/sk_seagate/data/
À partir des pages de manuel de la commande cp :
-a, --archive same as -dR --preserve=all
Pour vérifier si les autorisations et la propriété du fichier sont intactes, utilisez getfacl commande sur les deux emplacements, c'est-à-dire la source et la destination.
$ getfacl ~/data
$ getfacl /media/sk/sk_seagate/data/
Si vous souhaitez copier des fichiers entre le système local et un système distant du même réseau, vous pouvez utiliser "scp" commande pour transférer des fichiers d'un système à un autre comme ci-dessous.
$ scp -rp ~/data [email protected]:/home/senthil/
La commande ci-dessus copiera le dossier de contenu nommé "data" de mon système local vers un système distant. Ici, 192168.225.22 est l'adresse IP de mon système distant et "senthil" est le nom d'utilisateur du système distant.
Vérifiez les autorisations de fichier et la propriété du répertoire "data" sur les deux systèmes à l'aide de la commande "getfacl".
Vérifiez d'abord les attributs de fichier du répertoire "data" sur le système local :
$ getfacl data/
Exemple de résultat :
# file: data/ # owner: sk # group: sk user::rwx group::rwx other::r-x
Ensuite, vérifiez les attributs de fichier du répertoire "data" sur le système distant. Vous pouvez vous connecter directement au système distant et vérifier les attributs fie d'un répertoire distant via la commande ssh comme ci-dessous.
$ ssh [email protected] getfacl data
Exemple de sortie :
Mot de passe de[email protected]'s password: # file: data # owner: senthil # group: senthil user::rwx group::rwx other::r-x
Comme vous pouvez le remarquer dans les sorties ci-dessus, les informations sur le propriétaire et le groupe (c'est-à-dire senthil) sont différentes dans mon système distant. Parce que le -p L'indicateur de la commande scp ne conserve pas toutes les autorisations.
À partir des pages de manuel de la commande scp :
-p Preserves modification times, access times, and modes from the original file.
Il est clair que le -p flag ne conservera que les heures de modification, les heures d'accès et les modes du fichier d'origine, mais pas la propriété . Dans de tels cas, vous pouvez créer un nom d'utilisateur commun sur les deux systèmes et essayer la commande ci-dessus pour conserver la même propriété et les mêmes autorisations de fichiers sur différents systèmes. Ou utilisez simplement la commande "chown" sur le système de destination pour changer le propriétaire.
Pour plus de détails, reportez-vous aux pages de manuel des commandes cp et scp.
$ man cp
$ man scp
Suggestion de lecture :
- Comment copier des fichiers et modifier la propriété et les autorisations en même temps
J'espère que cela vous aidera.