Kökün erişemediği bir dizini yalnızca kökün erişebileceği bir dizine nasıl kopyalayabilirim?


11

Sunucuda olan bir nfs mount, bir dizin var /home/myname/.rubies

Kök bu dizine erişemiyor:

[mitchell.usher@server ~]$ stat /home/mitchell.usher/.rubies
  File: `/home/mitchell.usher/.rubies'
  Size: 4096            Blocks: 8          IO Block: 32768  directory
Device: 15h/21d Inode: 245910      Links: 3
Access: (0755/drwxr-xr-x)  Uid: (  970/mitchell.usher)   Gid: (  100/   users)
Access: 2016-08-22 15:06:15.000000000 +0000
Modify: 2016-08-22 14:55:00.000000000 +0000
Change: 2016-08-22 14:55:00.000000000 +0000

[mitchell.usher@server ~]$ sudo !!
sudo stat /home/mitchell.usher/.rubies
stat: cannot stat `/home/mitchell.usher/.rubies': Permission denied

/optSadece kök erişimi olan bu dizinden bir şey kopyalamaya çalışıyorum :

[mitchell.usher@server ~]$ cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot create directory `/opt/ruby-2.1.3': Permission denied

[mitchell.usher@server ~]$ sudo !!
sudo cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot stat `.rubies/ruby-2.1.3/': Permission denied

Açıkçası aşağıdakileri yapabilirim (ve şu an için yaptığım şey):

[mitchell.usher@server ~]$ cp -r .rubies/ruby-2.1.3/ /tmp/
[mitchell.usher@server ~]$ sudo cp -r /tmp/ruby-2.1.3/ /opt/

Bunu bir ara adım olarak kopyalamayı veya izinleri değiştirmeyi içermeyen herhangi bir yol var mı?


cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /optBu işe yaramayacak mı? Hayır ise neden?
MelBurslan

@MelBurslan, soruda belirtildiği gibi yaptım. Ama diyelim ki dosya sisteminde başka hiçbir yere sığmayacak 50 GB bir dosya, o zaman yapamamcp <file> /tmp/tmpfile
Mitch

Yanıtlar:


29

tarArabellek işlemi olarak kullanabilirsiniz

cd .rubies
tar cf - ruby-2.1.3 | ( cd /opt && sudo tar xvfp - )

İlk tarsizin gibi çalışır ve böylece ana dizininizi okuyabilirsiniz; ikincisi taraltında çalışır sudove böylece yazabilirsiniz /opt.


1
Bu nasıl bellekte? 10 GB'lık bir dosyam varsa, bu, boruları ve katranları kaldırmadan önce 10 GB belleği dolduracak mı, yoksa katran olarak katran çıkarır mı?
Mitch

5
Paralel koşuyorlar; tipik bir borunun 64Kbayt tamponu vardır. Boru boyutu detayları için :-) unix.stackexchange.com/questions/11946/… hakkında endişelenecek bir şey yok .
Stephen Harris


cpioaynı şekilde kullanılabilir.
Toby Speight

GNU katranınız varsa, -Cdizini değiştirmek için argümanını kullanarak alt kabuğu kaydedebilirsiniz (örn. tar cf - ruby-2.1.3 | sudo tar -C /opt xpf -). sudoParolanızı sormamasını sağlamak istediğinizden bahsetmeye değer olabilir (örneğin, bir sudoersgiriş veya önbelleğe alınmış kimlik bilgileri aracılığıyla ).
Toby Speight

6

Yerel dizine kopyalamak için rsyncveya scpdüğmesini kullanabilirsiniz user@localhost.

Örnek rsync:

# rsync "$real_user@localhost:$PWD/.rubies/ruby-2.1.3" /opt

Alternatif olarak

$ rsync .rubies/ruby-2.1.3 "root@localhost:/opt"

localhost'a doğrudan root erişimine izin verirseniz (önerilmez; normalde root erişiminin yoluyla olmasını tercih ederiz sudo).


-4

FAT'a (ya da her neyse) ikinci bir giriş yapabilirsiniz.
Bunu dosyam için yapıyorum HOSTS. Dosyaya başvuran yazılabilir bir dizinde bir bağlantı var ve farklı izinlere sahip, bu yüzden /Hosts/HOSTSkolayca değiştirebilir ve değişiklikleri her ikisi de (yani "bir") dosya (lar) koyulur. 1 dosya için 2 giriş. Komutu hatırlamıyorum, üzgünüm.

Sizin için, içindeki /opttüm dosyalar için bir bağlantı oluşturursunuz .rubiesve içindeki herhangi bir şeyi değiştirdiğinizde /opt, dosya ile aynı dosyadır .rubies.


4
Bu soruya cevap vermemenin yanı sıra yanlış ve yanıltıcıdır.
Wildcard

Bu sadece yanlış çünkü farklı bir dosya sistemi ile uğraşıyoruz. Cevaplayıcı açık bir şekilde, bu soru için geçerli olmasa da, belirtildiği gibi çalışan sabit bağlantılardan bahsediyordu.
Julie Pelletier

Teşekkürler Wildcard, cevabımda bir sürü flack alma konusunda bir satırım vardı, ancak Michael bunu geliştirdiğinde düzenlendi. : p
Mühendis
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.