GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So bleiben Eigentums- und Dateiberechtigungen beim Kopieren von Dateien oder Verzeichnissen erhalten

Neulich hatte ich vor, einige Daten von meinem Ubuntu-Desktopsystem auf ein externes USB-Laufwerk zu sichern. Nachdem ich alle Daten auf das externe Laufwerk übertragen habe, ist mir aufgefallen, dass die Eigentümer und Berechtigungen der Dateien und Verzeichnisse auf Quelle und Ziel unterschiedlich sind. Aber ich wollte vorhandene Dateiattribute (wie Eigentümer, Gruppe und Zeitstempel usw.) an beiden Orten intakt halten. Nach einer schnellen Google-Suche und dem Durchsuchen der Manpages des Befehls „cp“ stellte ich fest, dass wir Eigentums- und Dateiberechtigungen beim Kopieren von Dateien und Verzeichnissen unter Linux intakt halten können. Wenn Sie schon einmal in einer solchen Situation waren, finden Sie hier eine schnelle Problemumgehung.

Halten Sie Eigentums- und Dateiberechtigungen intakt, wenn Sie Dateien oder Verzeichnisse unter Linux kopieren

Der cp Der Befehl hat eine Option zum Kopieren von Dateien und Verzeichnissen, behält jedoch Änderungszeiten, Zugriffszeiten und Modi der Originaldatei bei.

$ cp -rp ~/data /media/sk/sk_seagate/data/

Hier kopiere ich den Inhalt eines Ordners namens "data" auf mein externes Laufwerk.

Aus dem cp Handbuchseiten des Befehls:

-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

Wenn Sie also -p verwenden Flag, werden alle vorhandenen Dateiattribute wie Modus, Eigentum und Zeitstempel der Originaldatei beibehalten.

Und das "-r" flag wird hier verwendet, um Verzeichnisse rekursiv zu kopieren. Bedeutung - es kopiert Verzeichnisse und ihre Unterverzeichnisse und Dateien.

Alternativ können Sie -a verwenden Flagge. Es enthält das Flag -r und behält alles bei, wie Links, xattr, SELinux-Attribute usw.

$ cp -a ~/data /media/sk/sk_seagate/data/

Aus den Manpages von cp command:

-a, --archive
              same as -dR --preserve=all

Verwenden Sie getfacl, um zu überprüfen, ob die Dateiberechtigungen und der Besitz intakt sind Befehl an beiden Orten, d.h. Quelle und Ziel.

$ getfacl ~/data
$ getfacl /media/sk/sk_seagate/data/

Wenn Sie Dateien vom lokalen System auf ein entferntes System im selben Netzwerk kopieren möchten, können Sie "scp" verwenden Befehl zum Übertragen von Dateien von einem System auf ein anderes wie unten.

$ scp -rp ~/data [email protected]:/home/senthil/

Der obige Befehl kopiert den Inhaltsordner mit dem Namen "data" von meinem lokalen System auf ein Remote-System. Hier ist 192168.225.22 die IP-Adresse meines entfernten Systems und "senthil" ist der Benutzername des entfernten Systems.

Überprüfen Sie die Dateiberechtigungen und den Besitz des "data"-Verzeichnisses auf beiden Systemen mit dem "getfacl"-Befehl.

Lassen Sie zuerst die Dateiattribute des "data"-Verzeichnisses auf dem lokalen System prüfen:

$ getfacl data/

Beispielausgabe:

# file: data/
# owner: sk
# group: sk
user::rwx
group::rwx
other::r-x

Überprüfen Sie als Nächstes die Dateiattribute des Verzeichnisses „data“ auf dem Remote-System. Sie können sich direkt beim Remote-System anmelden und die Dateiattribute eines Remote-Verzeichnisses per ssh-Befehl wie unten überprüfen.

$ ssh [email protected] getfacl data

Beispielausgabe:

[email protected]'s password:
# file: data
# owner: senthil
# group: senthil
user::rwx
group::rwx
other::r-x

Wie Sie vielleicht in den obigen Ausgaben bemerkt haben, sind die Eigentümer- und Gruppeninformationen (z. B. senthil) in meinem Remote-System unterschiedlich. Denn das -p Das Flag des scp-Befehls behält nicht alle Berechtigungen bei.

Aus den Manpages des scp-Befehls:

-p      Preserves modification times, access times, and modes from the original file.

Es ist klar, dass das -p flag behält nur Änderungszeiten, Zugriffszeiten und Modi der Originaldatei bei, aber nicht die Eigentümerschaft . In solchen Fällen können Sie auf beiden Systemen einen gemeinsamen Benutzernamen erstellen und den obigen Befehl ausprobieren, um denselben Besitz und dieselben Dateiberechtigungen auf verschiedenen Systemen zu haben. Oder verwenden Sie einfach den "chown"-Befehl auf dem Zielsystem, um den Besitz zu ändern.

Weitere Einzelheiten finden Sie in den Manpages der cp- und scp-Befehle.

$ man cp
$ man scp

Empfohlene Lektüre:

  • So kopieren Sie Dateien und ändern gleichzeitig den Besitz und die Berechtigungen

Hoffe das hilft.


Linux
  1. So kopieren Sie Dateiberechtigungen und Eigentumsrechte in eine andere Datei in Linux

  2. So löschen Sie Dateien und Verzeichnisse in Linux über die Befehlszeile

  3. Linux chmod und chown – So ändern Sie Dateiberechtigungen und Eigentumsrechte in Linux

  4. So extrahieren Sie .gz- und .tar.gz-Dateien unter Linux

  5. So mounten und unmounten Sie ein Dateisystem unter Linux

So kopieren Sie Dateien und Verzeichnisse unter Linux

So verschieben Sie Dateien und Verzeichnisse in Linux (mv-Befehl)

So synchronisieren Sie Dateien und Verzeichnisse mit Zaloha.sh

So können Sie versteckte Dateien und Verzeichnisse unter Linux anzeigen und erstellen

So benennen Sie Dateien und Verzeichnisse in Linux um

So kopieren Sie Dateien und Verzeichnisse im Linux-Terminal