Sahipleri ve izinleri eksiksiz tutan bir klasörü nasıl kopyalarım?


379

Böylece, ana klasörümü harici bir sürücüye kopyalayarak aşağıdaki şekilde yedekleyecektim:

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

Sonuç olarak, harici sürücülerdeki tüm klasörler şimdi aittir root:root. cpMülkiyet ve izinleri orijinal belgeden nasıl koruyabilirim?


23
Evet, sorduğuma sevindim, çünkü google hala 'erkekten' :-) daha hızlı.
Stijn Geukens

3
Ben de sorduğuna sevindim
Ole

5
@StijnGeukens Bu google daha hızlı bile değil man, benim için bile şifreli. Bu durumda, manen -rdiyor same as --preserve=mode,ownership,timestamps. Bunun asıl izinleri almanın ne demek olduğunu nasıl bilebilirdim?
Kolob Kanyonu

@KolobCanyon demek istediğin-p
fırtına

Yanıtlar:


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

Cp manpage'den:

 -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
Kullanması çok daha iyi cp -a. Bu aynı zamanda -rekucif bayrağını da içerir , fakat bundan daha fazlasını yapar - dosyayla ilgili her şeyi korur; SELinux özellikleri, linkler, xattr, her şey. Bu "arşiv modu". Orada bir yedek yapmak için daha iyi araçlar vardır, ama eğer kullandığınız cpbir yedekleme için, başka bir şey kullanmayın cp -a.
Wildcard

25
Çalışıyor, ama Sabır burada iyi. Komut yalnızca bittiğinde her şeyi doğru ayarlayacaktır: Hala bir dizini kopyalarken ve cp'yi root olarak çalıştırıyorsanız, dizine root aittir. Bu dizinde tamamlandığı zaman sadece onu doğru izinlere ayarlayacaktır.
Paul

4
cp -abazı sistemlerde çalışmaz: örn. OS X, (en azından bazı sürümlerde) birinin kullanılması gerekir cp -pR. Şu anki OS X sistemimde (10.10.15) cp -aonurlandırılmış görünüyor.
dubiousjim

Bir klasör yapısını kopyalamak için cp -a kullanırsam, o zaman kullanıyorum diff <(getfacl -R folder1) <(getfacl -R folder2)farklı erişim kontrol listeleri
alıyoruz

neden "cp -p" değil, "cp -rp" haklısın?
Eugene Kaurov

94

Ayrıca kullanabilirsiniz rsync.

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

Gönderen rsyncman:

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

Arasında bir karşılaştırma için bu soruya bakın cpve rsync: https://stackoverflow.com/q/6339287/406686

Sondaki eğik çizgileri not edin (ayrıntılar için man sayfasına bakın).


4
+1, cp -pçok hoş, ancak rsyncçıkış pcpyapmayı çok sevdiğimden çok hoşlanıyorum time rsync --progress -ah. Aklımda "ilerleme kopya" anlamına gelir. Ve her ikisi de kabul eder -r, bu nedenle genel terminal kullanımı için iyi çalışır - ancak ne yazık ki, sudobu soru / cevapta gösterildiği gibi değil .
Izkata

15
Not:, rsync -agenişletilmiş öznitelikleri ( -X) ve hiçbir ACL ( -A) korumaz - kısa açıklama diyor archive mode; equals -rlptgoD (no -H,-A,-X). Örneğin, SELinux bağlamları önceden korunmayacaktır -X. Birçok kullanım durumu için bu iyi, ancak sistem bölümünüzü yedeklerseniz, eksik -X oldukça bozulabilir. Bildiğim kadarıyla, cp -agerçekten tüm dosya özniteliklerini koruyor.
Perseids

2
Sadece bunu test sudo cp -aettim, mülkiyeti ve grupları korurken , sudo rsync -aonları kök olarak değiştirir. Yani, @Perseids doğru.
John Hamilton

3
@ JohnHamilton Nane altında, bu mükemmel çalışıyor ... daha sonra sadece mülkiyeti ve grupları değiştiriyor (ne zaman söyleyemem). Tüm /homeklasörümü kopyaladım rsync -aX /home /mnt/sdd/ve bir cazibe gibi çalıştı.
Olivier Pons

@JohnHamilton Perseides’in söylediği bu değil.
user643011

60
cp -a

Nerede -akısaltmasıdır --archive- temelde kopya yapmadan olduğu gibi bir dizin; dosyalar tüm özniteliklerini korur ve sembolik bağlantılar reddedilmez ( -d).

Kimden man cp:

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

21

Kullandığım cp -pdRxhangi -pmod, sahiplik ve damgaları korumak -d, (böylece sembolik yerine kopyalanan dosya içeriğini almak) bağlantıları korumak -Ryinelemeli bunu ve -xkopyaladığınız keşke gerçekten yararlı (bir dosya sisteminde kalmak /veya aktif olan bir şey bağlama noktası ).

Not: -Ryerine -rsadece alışkanlık kullanmaktır ls -lR.


2
cp -axAynı şeyin biraz daha kısa bir versiyonudur. Bu harika çalıştı - teşekkür ederim!
EM0

Aslında -rve arasında bir fark var -R. Kılavuz sayfasını kontrol edin (burada alıntılanması için çok uzun olan belirli kısım bile).
geckon

2
Var olduğunu sanmıyorum (bir zamanlar Unix'in bazı versiyonlarında olabilir ve hala olabilir). Bkz man7.org/linux/man-pages/man1/cp.1.html Bu sadece diyor -R, -r, --recursive copy directories recursively.
StarNamer

14

cpdosya sahipliğini korumak için bir seçeneğe sahiptir. Kılavuz sayfasından 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öyle bir şey yapabilirsiniz:

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

tarizinleri, sahipliği ve dizin yapısını bozulmadan tutar, ancak her şeyi bir bayt akışına dönüştürür. Dizini değiştiren bir "alt kabuk" (parantez içindeki komutlar) çalıştırın ve sonra tardönüşümü tersine çevirin. Bayt buharı, doğru sahiplik ve izinlere sahip dizinler ve dosyalar haline gelir.


7

Cevap basit: izinleri koruyan cpbir -pseçeneğe sahip (işte bir balık).

Ancak Wojtek'in yorumunda dediği gibi man cp(ince kılavuzu okumak) iyi bir başlangıç ​​noktası olacaktır (nasıl balık tutulacağını öğrenmek ister misiniz?).


1

preserve = all komutunu kullanabilirsiniz, ardından kopyanız dosyalarınızın sahibi, grubu ve zaman damgası gibi tüm özellikleri saklar. Yani, aşağıdaki komutu kullanarak yedeklemenizi güvenle yapın.

cp -r --preserve=all /home/my_home /media/backup/my_home
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.