Як скопіювати каталог, корінь якого не може отримати доступ до каталогу, до якого може отримати лише корінь?


11

У мене є каталог на nfs mount, який знаходиться на сервері /home/myname/.rubies

Корінь не може отримати доступ до цього каталогу:

[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

Я намагаюсь скопіювати щось із цього каталогу, до /optякого тільки root має доступ:

[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

Очевидно, що я можу зробити наступне (і це я зробив на даний момент):

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

Чи є такий спосіб зробити це, що не передбачало б його копіювання як посередницький крок або зміну дозволів?


cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /optце не спрацює? Якщо ні, то чому?
Мельбурслан

@MelBurslan це те, що я зробив, як зазначено в запитанні. Але скажімо, що це 50 Гб файл, який не поміститься ніде у файловій системі, тоді я не зможуcp <file> /tmp/tmpfile
Мітч

Відповіді:


29

Ви можете використовувати tarяк буферний процес

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

Перший tarпрацює так, як ви і так можете читати домашній каталог; другий tarзапускається під sudoі так можна писати в /opt.


1
Як це на пам’яті? Якщо у мене є 10 ГБ файл, це збирається заповнити 10 ГБ пам'яті до того, як він заповниться і не зніметься, або він не скасується, коли він задихається?
Мітч

5
Вони проходять паралельно; типова труба має 64 Кбайт-буфер. Не варто турбуватися про :-) unix.stackexchange.com/questions/11946/… за деталями розміру труби.
Стівен Гарріс


cpioможна використовувати майже однаково.
Toby Speight

Якщо у вас є tar GNU, ви можете зберегти нижню частину, використовуючи її -Cаргумент для зміни каталогу (тобто tar cf - ruby-2.1.3 | sudo tar -C /opt xpf -). Можливо, варто згадати, що ви хочете переконатися, що sudoне буде запитувати ваш пароль (наприклад, через sudoersзапис або кешовані дані).
Toby Speight

6

Ви можете використовувати rsyncабо scpкопіювати з user@localhostцього каталогу в локальний каталог.

Приклад для rsync:

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

Ви могли б альтернативно

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

якщо ви дозволите кореневий доступ localhost безпосередньо (не рекомендується; ми, як правило, віддаємо перевагу кореневому доступу через sudo).


-4

Ви можете зробити другий запис у FAT (або будь-якому іншому).
Я роблю це для свого HOSTSфайлу. У мене є посилання в каталозі, що записується, що посилається на файл, і він має різні дозволи, тому я /Hosts/HOSTSможу легко змінювати, і зміни вносяться в обидва (тобто "один") файл (и). Це 2 записи для 1 файла. Я не пам'ятаю команди, вибачте.

Для вас ви створюєте посилання на /optвсі файли в .rubies, і коли ви щось змінюєте /opt, це той самий файл, що і в .rubies.


4
Це помилково і вводить в оману, до того ж не відповідає на питання.
Wildcard

Це лише помилково, оскільки ми маємо справу з іншою файловою системою. Відповідач, очевидно, мав на увазі жорсткі посилання, які діють, як було сказано, хоча це питання не стосується.
Джулі Пелтьє

Спасибі Уайлдкард, у мене була відповідь на відповідь про отримання кучки флаків, але це було відредаговано, коли Майкл вдосконалив її. : p
Інженер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.