我在 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
您可以使用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(不推荐;我们通常更喜欢通过 root 访问sudo
)。
答案3
您可以在 FAT(或其他)中进行第二个条目。
我为我的HOSTS
文件执行此操作。我在可写目录中有一个引用该文件的链接,并且它具有不同的权限,因此我/Hosts/HOSTS
可以轻松修改该链接,并且更改会放入两个(即“一个”)文件中。 1 个文件有 2 个条目。我不记得命令了,抱歉。
/opt
对于您来说,您可以为 中的所有文件创建一个链接.rubies
,并且当您更改 中的任何内容时/opt
,它与 中的文件相同.rubies
。