如何在Linux上附加地安装

时间:2015-03-09 10:11:38

标签: linux mount unmount unionfs

我一直试图在Linux中添加目录,但却没有这样做。我有三个方言a,b和c。包含文件x,b包含文件y,c包含文件z。 现在当我登上" a"和" b"进入c然后打开c,只有x和y出现在" c"中。当我将a,b和c挂载到c时,目录c为空,ls表示权限被拒绝。即使使用sudo,我也无法卸载c。 我想要做的是在其中一个中安装一个b和c,并且能够同时看到x y和z。是否有可能或有解决方案,请告诉我。

naveed@ubuntu:~$ mkdir /tmp/test1 /tmp/test2 /tmp/test3
naveed@ubuntu:~$ touch /tmp/test{1,2,3}/{a,b,c}
naveed@ubuntu:~$ rm /tmp/test1/{b,c}
naveed@ubuntu:~$ rm /tmp/test2/{a,c}
naveed@ubuntu:~$ rm /tmp/test3/{a,b}
naveed@ubuntu:~$ ls -al /tmp/test*/
/tmp/test1/:
total 16
drwxrwxr-x  2 naveed naveed  4096 Mar  9 15:00 .
drwxrwxrwt 11 root   root   12288 Mar  9 15:00 ..
-rw-rw-r--  1 naveed naveed     0 Mar  9 15:00 a

/tmp/test2/:
total 16
drwxrwxr-x  2 naveed naveed  4096 Mar  9 15:00 .
drwxrwxrwt 11 root   root   12288 Mar  9 15:00 ..
-rw-rw-r--  1 naveed naveed     0 Mar  9 15:00 b

/tmp/test3/:
total 16
drwxrwxr-x  2 naveed naveed  4096 Mar  9 15:00 .
drwxrwxrwt 11 root   root   12288 Mar  9 15:00 ..
-rw-rw-r--  1 naveed naveed     0 Mar  9 15:00 c
naveed@ubuntu:~$ sudo unionfs-fuse -o nonempty /tmp/test1=RO:/tmp/test2=RO:/tmp/test3=RO /tmp/test1/
naveed@ubuntu:~$ ls -al /tmp/test1 
ls: cannot access /tmp/test1: Permission denied
naveed@ubuntu:~$ sudo ls -al /tmp/test1 
#nothing shows up here 

1 个答案:

答案 0 :(得分:1)

这确实是一个超级用户问题,所以我已经将其标记为。

如果您要创建多个来源的联合文件系统,那么所有源位置需要被尝试访问该目录的用户访问。

以例如:

$ mkdir a; touch a/a
$ mkdir b; touch b/b
$ mkdir c; touch c/c
$ mkdir join
$ ls join
drwxr-xr-x 4 petesh petesh 4096 Mar  9 10:25 a/
drwxr-xr-x 2 petesh petesh 4096 Mar  9 10:19 b/
drwxr-xr-x 2 petesh petesh 4096 Mar  9 10:20 c/
drwxr-xr-x 4 petesh petesh 4096 Mar  9 10:25 join/

$ sudo mount -t aufs -o br:(pwd)/a:(pwd)/b:(pwd)/c none (pwd)/join
$  ls join
a  b  c

即。我们可以看到所有的内容。

更改其中一个文件夹的权限 - 例如

$ chmod u-rwx a

现在当我们使用join文件夹时:

$ ls join
ls: cannot open directory join: Permission denied

即。需要访问所有文件夹才能访问已加入的目录。

确保访问所有目录的权限正确 - 联合文件系统强制执行基础目录的权限,您不能使用此功能绕过操作系统的保护。

接下来,如果我们将它们全部安装到一个文件夹中:

$ sudo mount -t aufs -o br:(pwd)/a:(pwd)/b:(pwd)/c none (pwd)/c
$ ls c
a  b  c

即在一个目录中安装它们没有问题,使得安装目录看起来与底层目录不同。