Làm cách nào để sao chép một thư mục giữ nguyên chủ và quyền?


379

Vì vậy, tôi sẽ sao lưu thư mục nhà của mình bằng cách sao chép nó vào ổ đĩa ngoài như sau:

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

Với kết quả là tất cả các thư mục trên các ổ đĩa ngoài đều thuộc sở hữu của root:root. Làm cách nào tôi có thể cpgiữ quyền sở hữu và quyền từ bản gốc?


23
Vâng, tôi sẽ vui vì anh ấy đã hỏi vì google vẫn nhanh hơn 'người đàn ông' :-).
Stijn Geukens

3
Tôi rất vui vì anh ấy cũng đã hỏi
Ole

5
@StijnGeukens Thậm chí google không nhanh hơn, mà ngay cả manvới tôi cũng khó hiểu. Trong trường hợp này, mantại -rnói same as --preserve=mode,ownership,timestamps. Làm sao tôi biết điều đó có nghĩa là giữ quyền ban đầu!?
Hẻm núi Kolob

@KolobCanyon bạn có nghĩa là-p
cơn bão

Câu trả lời:


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

Từ trang man cp:

 -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

129
Tốt hơn nhiều để sử dụng cp -a. Điều này cũng bao gồm -rcờ ecursive, nhưng nó còn hơn thế nữa, nó bảo toàn mọi thứ về tập tin; Selinux thuộc tính, liên kết, xattr, tất cả mọi thứ. Đó là "chế độ lưu trữ." Có nhiều công cụ tốt hơn để tạo bản sao lưu, nhưng nếu bạn đang sử dụng cpđể sao lưu, đừng sử dụng bất cứ thứ gì khác ngoài cp -a.
tự đại diện

25
Nó hoạt động, nhưng kiên nhẫn là tốt ở đây. Lệnh sẽ chỉ đặt mọi thứ đúng khi kết thúc: Trong khi nó vẫn sao chép một thư mục và bạn đang chạy cp với quyền root, thư mục sẽ được sở hữu bởi root. Nó sẽ chỉ đặt nó đúng quyền khi nó kết thúc với thư mục này.
Paul

4
cp -akhông hoạt động trên một số hệ thống: ví dụ: OS X, trong đó (ít nhất là trong một số phiên bản) cần sử dụng cp -pR. Trên hệ thống OS X hiện tại của tôi (10.10.15), cp -adường như được vinh danh.
dubiousjim

Nếu tôi sử dụng cp -a để sao chép cấu trúc thư mục thì hãy sử dụng diff <(getfacl -R folder1) <(getfacl -R folder2)i sill dường như để nhận các danh sách kiểm soát truy cập khác nhau :(
philx_x

Tại sao bạn lại đúng "cp -rp" chứ không phải "cp -p"?
Eugene Kaurov

94

Bạn cũng có thể sử dụng rsync.

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

Từ rsynctrang hướng dẫn:

 -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.

Xem câu hỏi này để so sánh giữa cprsync: https://stackoverflow.com/q/6339287/406686

Lưu ý dấu gạch chéo (xem trang chủ để biết chi tiết).


4
+1, cp -plà tốt đẹp, nhưng tôi thích rsync's đầu ra nhiều hơn nữa nói chung mà tôi đã aliased pcpđể time rsync --progress -ah. Viết tắt của "bản sao tiến bộ" trong tâm trí của tôi. Và cả hai đều chấp nhận -r, vì vậy nó hoạt động tốt cho việc sử dụng thiết bị đầu cuối chung - nhưng thật không may, không kết hợp với sudonhư trong câu hỏi / câu trả lời này.
Izkata

15
NB : rsync -a, không bảo tồn các thuộc tính mở rộng ( -X) và không có ACL ( -A) - mô tả ngắn nói archive mode; equals -rlptgoD (no -H,-A,-X). Ví dụ, bối cảnh SELinux sẽ không được bảo quản mà không có -X. Đối với nhiều trường hợp sử dụng, điều này là tốt, nhưng nếu bạn tạo bản sao lưu phân vùng hệ thống của mình, thiếu -X có thể bị hỏng khá nhiều. Theo như tôi biết, cp -athực sự bảo tồn tất cả các thuộc tính tệp.
Perseids

2
Chỉ cần thử nghiệm điều này, trong khi sudo cp -abảo tồn quyền sở hữu và các nhóm, sudo rsync -athay đổi chúng thành root. Vì vậy, @Perseids là chính xác.
John Hamilton

3
@ John Johnilton Dưới Mint, điều này hoạt động hoàn hảo ... nó chỉ thay đổi quyền sở hữu và các nhóm sau này (tôi không thể biết khi nào). Tôi vừa sao chép toàn bộ /homethư mục của mình rsync -aX /home /mnt/sdd/và nó hoạt động như một lá bùa.
Olivier Pons

@ John John Hamilton không phải là những gì Perseides nói.
user643011

60
cp -a

Trường hợp -aviết tắt của --archive- về cơ bản, nó sao chép một thư mục chính xác như nó vốn có; các tệp giữ lại tất cả các thuộc tính của chúng và các liên kết tượng trưng không bị hủy đăng ký ( -d).

Từ man cp:

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

21

Tôi sử dụng cp -pdRxsẽ -pgiữ chế độ, quyền sở hữu và dấu thời gian, -dgiữ liên kết (để bạn nhận được liên kết tượng trưng thay vì nội dung tệp được sao chép), -Rthực hiện đệ quy và -xở trên một hệ thống tệp (chỉ thực sự hữu ích nếu bạn sao chép /hoặc một cái gì đó có điểm gắn kết hoạt động ).

PS: -Rthay vì -rchỉ là thói quen sử dụng ls -lR.


2
cp -axlà một phiên bản ngắn hơn một chút của cùng một điều. Điều này đã làm việc tuyệt vời - cảm ơn bạn!
EM0

Trên thực tế có một sự khác biệt giữa -r-R. Kiểm tra trang người đàn ông (thậm chí phần cụ thể quá dài để được trích dẫn ở đây).
tắc kè

2
Tôi không nghĩ là có (mặc dù có thể đã từng và vẫn có thể có trên một số phiên bản Unix). Xem man7.org/linux/man-pages/man1/cp.1.html Nó chỉ đơn giản nói -R, -r, --recursive copy directories recursively.
StarNamer

14

cpcó một tùy chọn để bảo vệ quyền sở hữu tập tin. Từ trang hướng dẫn của 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.

11

Bạn có thể làm một cái gì đó như thế này:

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

targiữ nguyên quyền, quyền sở hữu và cấu trúc thư mục, nhưng chuyển đổi mọi thứ thành một luồng byte. Bạn chạy một "subshell" (các lệnh được ngoặc đơn) thay đổi thư mục và sau đó nhận được tarđể đảo ngược chuyển đổi. Một hơi byte trở thành các thư mục và tệp có quyền sở hữu và quyền chính xác.


7

Câu trả lời rất đơn giản: cpcó một -ptùy chọn bảo tồn các quyền (đây là một con cá).

Nhưng như Wojtek nói trong nhận xét của mình, man cp(đọc hướng dẫn sử dụng tốt) sẽ là điểm khởi đầu tốt (muốn học cách câu cá?).


1

bạn có thể sử dụng keep = all, sau đó bản sao của bạn sẽ giữ tất cả các thuộc tính như chủ sở hữu, nhóm và dấu thời gian của các tệp của bạn. Vì vậy, hãy sao lưu an toàn với lệnh sau.

cp -r --preserve=all /home/my_home /media/backup/my_home
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.