已挂载文件系统中的test -x

问题描述

在将图像放入SD卡之前,我正在使用QEMU测试RaspBerry Pi。我正在设置一个自动化脚本,以将某些文件放到Pi上,以便在将SD卡放到Pi上时立即可用。我认为我在权限的工作方式上遇到了一个奇怪的问题,但我不确定。

运行test -x时,该文件应该是可执行的。基本上,x位应该为您的用户启用。但是,这似乎不适用于已挂载文件系统中的文件

主机是Ubuntu,来宾支持映像是RaspBerry Pi Buster。我使用guestmount创建了安装点,因为我正在安装快照,而不是原始快照,这似乎是唯一/最佳方法。基本流程为:

qemu-img convert -Oqcow2 raspBerry-pi.img raspBerry-pi.qcow
qemu-img create -f qcow2 snapshot.qcow -b raspBerry-pi.qcow
sudo guestmount -a 'snapshot.qcow' -i 'mountpoint/'

例如,我在存储库外部有一个文件。我正在安装点内测试的文件是由root创建的,因此我chmod将此文件复制到root进行比较:

$ sudo ls -l --author ~/test/file
-rw-r--r-- 1 root root root 1133 Oct  8 21:43 /home/me/test/file
$ sudo test -x ~/test/file && echo 'exists' || echo 'doesn\'t exist'
doesn't exist

但是,对于安装点内具有相同权限的文件,测试成功:

$ sudo ls -l --author mountpoint/home/pi/test/file
-rw-r--r-- 1 root root root 0 Oct  8 22:41 mountpoint/home/pi/test/file
$ sudo test -x ~/test/file && echo 'exists' || echo 'doesn\'t exist'
exists

为什么挂载点内部的文件可执行,而外部挂载的文件不可执行?这是因为挂载的文件系统是另一种体系结构(x86与ARM)吗?是因为我正在使用guestmount,并且文件系统不是真正的filesysem,而是快照和原始文件的合并?还是这仅仅是安装的方式?在哪里可以找到关于这种特殊行为的更多资源,例如我可能会遇到的其他权限怪癖?

如果您需要有关房东或来宾的更多信息,请询问。

解决方法

这是import seaborn as sns # Make sure your `Duration` column is an int: DATA.Duration = DATA.Duration.astype(int) # Do the grouping DATA = DATA.groupby(['Profession','Size','Gender']).sum() # Make sure all your variables are in the columns: DATA = DATA.reset_index() # Plot sns.catplot(data=DATA,kind='bar',col='Profession',x='Size',y='Duration',hue='Gender') 使用的libguestfs中的错误。您可以see it here

guestmount

FS使用一条捷径说,由于您是root用户,所以具有完全访问权限,因此毫无意义地检查权限。

正如您所演示的,这是不正确的。根目录仅对目录以及设置了至少一个执行位的文件具有执行权限。

我无法构建提交补丁的项目,但是您可以提交错误。