如何解决已挂载文件系统中的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用户,所以具有完全访问权限,因此毫无意义地检查权限。
正如您所演示的,这是不正确的。根目录仅对目录以及设置了至少一个执行位的文件具有执行权限。
我无法构建提交补丁的项目,但是您可以提交错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。