我使用的是 Linux/Debian。在下面的一系列命令中,我位于目录中temp_dir4
。我将 Google 存储桶安装到该目录,然后更改了权限,否则当我运行时,我会收到权限被拒绝的错误ls
。
kylefoley@kfoley76:/mnt/disks/temp_dir4$ sudo -i chmod o+rx -R /mnt/disks/temp_dir4
kylefoley@kfoley76:/mnt/disks/temp_dir4$ sudo gcsfuse deduction1 /mnt/disks/temp_dir4
Using mount point: /mnt/disks/temp_dir4
Opening GCS connection...
Opening bucket...
Mounting file system...
File system has been successfully mounted.
kylefoley@kfoley76:/mnt/disks/temp_dir4$ ls
接下来,我在另一个目录上运行了一个程序,这是一个 Python 程序,它只会读取目录中的文件。这个程序是:
lst1 = os.listdir('/mnt/disks/temp_dir4/')
print (lst1)
我收到以下错误:
File "fix_mistakes.py", line 1733, in <module>
temp17()
File "fix_mistakes.py", line 1729, in temp17
lst1 = os.listdir('/mnt/disks/temp_dir4/')
PermissionError: [Errno 13] Permission denied: '/mnt/disks/temp_dir4/'
然后我尝试返回该目录并更改权限,但是却无法做到:
kylefoley@kfoley76:/mnt/disks$ sudo -i chmod o+rx -R /mnt/disks/temp_dir4
kylefoley@kfoley76:/mnt/disks$ cd temp_dir4
-bash: cd: temp_dir4: Permission denied
kylefoley@kfoley76:/mnt/disks$ sudo -i chmod a+w /mnt/disks/temp_dir4
kylefoley@kfoley76:/mnt/disks$ cd temp_dir4
-bash: cd: temp_dir4: Permission denied
另外,我需要更改 temp_dir4 的权限,以便当我运行该 python 程序时不会遇到另一个权限被拒绝错误。
答案1
我没有经验gcsfuse
根本但我知道一些一般的事实:
在目录上挂载任何内容都不会影响已经使用该目录的程序。您
ls
从 shell 继承了其工作目录,这是不是已安装的文件系统。但是,如果您执行了ls "$PWD"
(相当于ls /mnt/disks/temp_dir4
)或cd "$PWD"
,那么您可能会命中,Permission denied
因为现在/mnt/disks/temp_dir4
指的是已安装的文件系统。gcsfuse
用途保险丝, 用户空间中的文件系统。如果您以 方式挂载,root
则它将适用于root
;除非您使用allow_other
(请参阅这)。这是正常的chown
,chmod
不适用于 FUSE。工具的文档内容如下:如果您知道自己在做什么,您可以使用
allow_other
fuse 支持的 mount 选项以及gcsfuse 支持的--uid
和标志来覆盖这些行为。请注意,这可能会带来安全隐患!--gid
要了解安全隐患,请阅读这个答案。
示例命令:
sudo mount -t gcsfuse -o rw,allow_other,uid=1001,gid=1001 deduction1 /mnt/disks/temp_dir4
其中
-t gcsfuse
告诉mount
使用mount.gcsfuse
。您原来的命令作为gcsfuse
可执行文件只是一个方便的替代方法(虽然我不确定它是否允许您传递allow_other
;它应该)。但是,如果要仅为当前用户挂载文件系统,则以当前用户身份挂载就足够了(而且更安全!)(无需)
sudo
。在用户空间是允许普通用户安装它。已经提及的文档状态:重要提示:您应该
gcsfuse
以使用文件系统的用户身份运行,而不是以 root 身份运行。同样,目录也应该归该用户所有。请勿使用sudo
上述任一步骤,否则您将面临权限问题。因此,卸载您挂载的文件系统
root
(如果仍然挂载):sudo fusermount -u /mnt/disks/temp_dir4
然后只需将其作为您的用户安装即可:
gcsfuse deduction1 /mnt/disks/temp_dir4
如果成功,那么您的用户将能够使用该文件系统。