Chciałem więc wykonać kopię zapasową mojego folderu domowego, kopiując go na dysk zewnętrzny w następujący sposób:
sudo cp -r /home/my_home /media/backup/my_home
W rezultacie wszystkie foldery na dyskach zewnętrznych są teraz własnością root:root
. Jak mogę cp
zachować własność i uprawnienia w stosunku do oryginału?
permissions
cp
Psachnodaimonia
źródło
źródło
man
dla mnie jest tajemniczy. W tym przypadku mówiman
at . Skąd miałem wiedzieć, że oznacza to zachowanie oryginalnych uprawnień !?-r
same as --preserve=mode,ownership,timestamps
-p
Odpowiedzi:
Z cp manpage:
źródło
cp -a
. Obejmuje to-r
także flagę ecursive, ale robi więcej niż to - zachowuje wszystko w pliku; Atrybuty SELinuksa, linki, xattr, wszystko. To „tryb archiwizacji”. Istnieją lepsze narzędzia do tworzenia kopii zapasowej, ale jeśli używaszcp
do tworzenia kopii zapasowej, nie używaj niczego innegocp -a
.cp -a
nie działa na niektórych systemach: np. OS X, gdzie (przynajmniej w niektórych wersjach) trzeba było użyć jednegocp -pR
. Jednak w moim obecnym systemie OS X (10.10.15)cp -a
wydaje się być honorowany.diff <(getfacl -R folder1) <(getfacl -R folder2)
Możesz także użyć
rsync
.Z strony
rsync
podręcznika:Zobacz to pytanie w celu porównania między
cp
irsync
: https://stackoverflow.com/q/6339287/406686Zwróć uwagę na końcowe ukośniki (szczegóły na stronie podręcznika).
źródło
cp -p
jest ładny, ale podoba mi sięrsync
„s wyjście tyle bardziej ogólnie, że mam aliaspcp
dotime rsync --progress -ah
. W mojej głowie oznacza „kopiowanie postępu”. I oba akceptują-r
, więc działa dobrze dla ogólnego użycia terminala - ale niestety nie w połączeniu z,sudo
jak pokazano w tym pytaniu / odpowiedzi.rsync -a
nie zachowuje rozszerzonych atrybutów (-X
) i żadnych list ACL (-A
) - mówi krótki opisarchive mode; equals -rlptgoD (no -H,-A,-X)
. Np. Konteksty SELinux nie zostaną zachowane bez-X
. W wielu przypadkach użycia jest to w porządku, ale jeśli wykonasz kopię zapasową partycji systemowej, brak -X może się bardzo zepsuć. O ile mi wiadomo,cp -a
naprawdę zachowuje wszystkie atrybuty plików.sudo cp -a
zachowując własność i grupy,sudo rsync -a
zamieniając je w root. Więc @Perseids jest poprawne./home
folderrsync -aX /home /mnt/sdd/
i działało to jak urok.Gdzie
-a
jest skrót--archive
- w zasadzie kopiuje katalog dokładnie tak, jak jest; pliki zachowują wszystkie swoje atrybuty, a dowiązania symboliczne nie są usuwane (-d
).Od
man cp
:źródło
Używam,
cp -pdRx
który-p
zachowuje tryb, własność i znaczniki czasu,-d
zachowuję łącza (więc zamiast kopiowania zawartości pliku otrzymujesz dowiązania symboliczne),-R
robię to rekurencyjnie i-x
pozostaję w jednym systemie plików (bardzo przydatne, jeśli kopiujesz/
lub coś z aktywnym punktem montowania ).PS:
-R
zamiast-r
zwyczajnego używanials -lR
.źródło
cp -ax
jest nieco krótszą wersją tego samego. Działa to świetnie - dziękuję!-r
i-R
. Sprawdź stronę podręcznika (nawet tę część, która jest za długa, aby ją tu zacytować).-R, -r, --recursive copy directories recursively
.cp
ma opcję zachowania własności pliku. Ze strony podręcznikacp
:źródło
Możesz zrobić coś takiego:
tar
zachowuje nienaruszone uprawnienia, własność i strukturę katalogów, ale przekształca wszystko w strumień bajtów. Uruchamiasz „podpowłokę” (polecenia w nawiasach), które zmieniają katalog, a następnie możesztar
cofnąć konwersję. Para bajtów staje się katalogami i plikami z prawidłową własnością i uprawnieniami.źródło
Odpowiedź jest prosta:
cp
ma-p
opcję, która zachowuje uprawnienia (tutaj jest ryba).Ale, jak mówi Wojtek w swoim komentarzu,
man cp
(przeczytanie dobrego podręcznika) byłby dobrym punktem wyjścia (chcesz nauczyć się łowić?).źródło
możesz użyć preserve = all, wtedy twoja kopia zachowa wszystkie atrybuty, takie jak właściciel, grupa i sygnatura czasowa twoich plików. Dlatego wykonaj kopię zapasową bezpiecznie za pomocą następującego polecenia.
źródło