Wie kopiere ich einen Ordner, wobei Eigentümer und Berechtigungen erhalten bleiben?

378

Also wollte ich meinen Home-Ordner sichern, indem ich ihn wie folgt auf ein externes Laufwerk kopierte:

sudo cp -r /home/my_home /media/backup/my_home

Mit dem Ergebnis, dass alle Ordner auf den externen Laufwerken jetzt im Besitz von sind root:root. Wie kann ich cpdas Eigentum und die Berechtigungen des Originals behalten?

Psachnodaimonia
quelle
23
Ja, ich bin froh, dass er gefragt hat, weil google immer noch schneller ist als man :-).
Stijn Geukens
3
Ich bin froh, dass er auch gefragt hat
Ole
5
@StijnGeukens Es ist nicht mal so, dass Google schneller ist, es ist so, dass es selbst manfür mich kryptisch ist. In diesem Fall sagt manat . Woher sollte ich wissen, dass dies bedeutet, die ursprünglichen Berechtigungen beizubehalten? -rsame as --preserve=mode,ownership,timestamps
Kolob Canyon
@KolobCanyon meinst du am-p
Sturm

Antworten:

454
sudo cp -rp /home/my_home /media/backup/my_home

Aus der cp manpage:

 -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
Guido
quelle
129
Viel besser zu bedienen cp -a. Dies beinhaltet auch das -recursive-Flag, aber es macht mehr als das - es bewahrt alles an der Datei; SELinux-Attribute, Links, xattr, alles. Es ist "Archivierungsmodus". Es gibt bessere Tools zum Erstellen eines Backups. Wenn Sie jedoch cpein Backup erstellen, verwenden Sie nichts anderes als cp -a.
Wildcard
25
Es funktioniert, aber hier ist Geduld gut. Der Befehl setzt erst dann alles richtig, wenn er beendet ist: Während ein Verzeichnis noch kopiert wird und Sie cp als root ausführen, befindet sich das Verzeichnis im Besitz von root. Es setzt es nur auf die richtigen Berechtigungen, wenn es mit diesem Verzeichnis fertig ist.
Paul
4
cp -afunktioniert auf einigen Systemen nicht: zB OS X, wo (zumindest in einigen Versionen) eines benötigt wird cp -pR. Auf meinem aktuellen OS X-System (10.10.15) cp -ascheint dies jedoch eine Ehre zu sein.
dubiousjim
Wenn ich zum Kopieren einer Ordnerstruktur cp -a verwende, diff <(getfacl -R folder1) <(getfacl -R folder2)scheint i sill verschiedene Zugriffssteuerungslisten zu erhalten :(
philx_x
warum hast du recht "cp -rp", nicht "cp -p"?
Eugene Kaurov
94

Sie können auch verwenden rsync.

sudo rsync -a /home/my_home/ /media/backup/my_home/

Aus der rsyncManpage:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

In dieser Frage finden Sie einen Vergleich zwischen cpund rsync: https://stackoverflow.com/q/6339287/406686

Beachten Sie die abschließenden Schrägstriche (Details finden Sie auf der Manpage).

Student
quelle
4
+1, cp -pist nett, aber ich mag rsyncdie Ausgabe im Allgemeinen so viel mehr, dass ich mich darauf geeinigt pcphabe time rsync --progress -ah. Steht für "Fortschrittskopie" in meinem Kopf. Und beide akzeptieren -r, so funktioniert es gut für die allgemeine Terminal-Nutzung - aber leider nicht in Kombination mit, sudowie in dieser Frage / Antwort gezeigt.
Izkata,
15
NB:, rsync -abehält keine erweiterten Attribute ( -X) und keine ACLs ( -A) bei - die Kurzbeschreibung besagt archive mode; equals -rlptgoD (no -H,-A,-X). ZB werden SELinux-Kontexte ohne nicht erhalten -X. Für viele Anwendungsfälle ist dies in Ordnung, aber wenn Sie eine Sicherungskopie Ihrer Systempartition erstellen, kann das Fehlen von -X zu erheblichen Problemen führen. Soweit ich weiß, cp -ableiben wirklich alle Dateiattribute erhalten.
Perseids
2
Wenn Sie dies gerade getestet haben, werden sudo cp -aEigentümer und Gruppen zwar beibehalten, sudo rsync -aaber in root geändert. @Perseids ist also richtig.
John Hamilton
3
@JohnHamilton Unter Mint funktioniert das perfekt ... es ändert erst später den Besitzer und die Gruppe (ich kann nicht sagen wann). Ich habe gerade meinen ganzen /homeOrdner mit kopiert rsync -aX /home /mnt/sdd/und es hat wie ein Zauber funktioniert.
Olivier Pons
@JohnHamilton Das hat Perseides überhaupt nicht gesagt.
user643011
60
cp -a

Wo -aist die Abkürzung für --archive- im Grunde kopiert es ein Verzeichnis genauso, wie es ist; Die Dateien behalten alle ihre Attribute bei, und Symlinks werden nicht dereferenziert ( -d).

Von man cp:

   -a, --archive
          same as -dR --preserve=all
Zaz
quelle
21

Ich benutze cp -pdRxdie Option, -pdie Modus, Besitz und Zeitstempel beibehält, -dLinks beibehält (so dass Symlinks statt des kopierten Dateiinhalts angezeigt werden), -Res rekursiv ausführt und -xauf einem Dateisystem bleibt (nur dann wirklich nützlich, wenn Sie kopieren /oder etwas mit einem aktiven Einhängepunkt ).

PS: -Rstatt -rist nur Gewohnheit zu benutzen ls -lR.

StarNamer
quelle
2
cp -axist eine etwas kürzere Version der gleichen Sache. Das hat super geklappt - danke!
EM0
Eigentlich gibt es einen Unterschied zwischen -rund -R. Überprüfen Sie die Manpage (auch wenn der betreffende Teil zu lang ist, um hier zitiert zu werden).
Geckon
2
Ich glaube nicht, dass dies der Fall ist (obwohl es einige Unix-Versionen gegeben haben und möglicherweise noch geben wird). Siehe man7.org/linux/man-pages/man1/cp.1.html Es heißt einfach -R, -r, --recursive copy directories recursively.
StarNamer
14

cphat eine Option zum Beibehalten des Dateieigentums. Von der Manualseite von cp:

-p    Cause cp to preserve the following attributes of each source file in the copy: modification
      time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions.
      Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also
      be preserved.
Matteo
quelle
11

Sie können so etwas tun:

tar cf - my_home | (cd /media/backup; sudo tar xf - )

tarBewahrt die Rechte, den Besitz und die Verzeichnisstruktur, konvertiert aber alles in einen Strom von Bytes. Sie führen eine "Subshell" (die in Klammern gesetzten Befehle) aus, die das Verzeichnis ändert, und können dann tardie Konvertierung rückgängig machen. Aus einer Menge Bytes werden Verzeichnisse und Dateien mit den richtigen Inhabern und Berechtigungen.

Bruce Ediger
quelle
7

Die Antwort ist einfach: Es cpgibt eine -pOption, die Berechtigungen beibehält (hier ist ein Fisch).

Aber wie Wojtek in seinem Kommentar sagt, man cp(Lesen des Handbuchs) wäre ein guter Ausgangspunkt (möchten Sie lernen, wie man fischt?).

Hirsch
quelle
1

Wenn Sie preserve = all verwenden, behält Ihre Kopie alle Attribute wie Eigentümer, Gruppe und Zeitstempel Ihrer Dateien bei. Machen Sie also Ihr Backup sicher mit dem folgenden Befehl.

cp -r --preserve=all /home/my_home /media/backup/my_home
Majid Zarrin
quelle