web-dev-qa-db-ja.com

ルートがアクセスできないディレクトリをルートだけがアクセスできるディレクトリにコピーする方法は?

サーバー上の/home/myname/.rubiesにあるnfsマウントにディレクトリがあります

ルートはこのディレクトリにアクセスできません:

[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/

中間ステップとしてコピーしたり、権限を変更したりする必要のない方法はありますか?

11
Mitch

tarをバッファプロセスとして使用できます

cd .rubies
tar cf - Ruby-2.1.3 | ( cd /opt && Sudo tar xvfp - )

最初のtarはあなたと同じように実行されるため、ホームディレクトリを読み取ることができます。 2番目のtarSudoで実行されるため、/optに書き込むことができます。

29
Stephen Harris

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"

rootがlocalhostに直接アクセスできるようにする場合(推奨されません。通常、Sudoを介したrootアクセスが推奨されます)。

6
Toby Speight