如何将root无法访问的目录复制到只有root可以访问的目录?

如何将root无法访问的目录复制到只有root可以访问的目录?

我在 nfs 挂载上有一个目录,该目录在服务器上位于/home/myname/.rubies

root 无法访问此目录:

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

有没有什么方法可以做到这一点,而不需要将其复制为中间步骤或更改权限?

答案1

您可以用作tar缓冲过程

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

第一个tar与您一样运行,因此可以读取您的主目录;第二个tar在下运行sudo,因此可以写入/opt

答案2

您可以使用rsyncscp复制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(不推荐;我们通常更喜欢通过 root 访问sudo)。

答案3

您可以在 FAT(或其他)中进行第二个条目。
我为我的HOSTS文件执行此操作。我在可写目录中有一个引用该文件的链接,并且它具有不同的权限,因此我/Hosts/HOSTS可以轻松修改该链接,并且更改会放入两个(即“一个”)文件中。 1 个文件有 2 个条目。我不记得命令了,抱歉。

/opt对于您来说,您可以为 中的所有文件创建一个链接.rubies,并且当您更改 中的任何内容时/opt,它与 中的文件相同.rubies

相关内容