到目前为止,我已经尝试了至少 15 种不同的解决方案,但都没有奏效。我使用的是 Mint 18.1 实时启动驱动器,并尝试在单独的驱动器上运行 shell 脚本。它只是说“权限被拒绝”,所以我试过了,sudo chmod 777 /path/to/file.sh
但无济于事。它看起来就像它完成了一样,但快速运行stat /path/to/file.sh
却不是这样。我尝试制作一个文件/etc/udev/rules.d/90-usb-disks.rules数据如下:
# UDEV Rules to change the permission of USB disks
#
KERNEL=="sd*[0-9]", ATTR{removable}=="1", ENV{ID_BUS}=="usb", MODE="0022"
这也没有任何作用。我尝试重新安装驱动器并rwx
赋予权限,但不行!有没有任何事物这样就可以工作了吗?!
附注:这个脚本可能会启动同一文件夹中的其他脚本,我不知道,所以这是需要考虑的问题。另外,抱歉我是 Linux 新手 - 我们都是从某个地方开始的。
答案1
您的外部驱动器的文件系统很可能不支持 Linux/UNIX 样式权限(FAT32 等),不幸的是,在这种情况下 chmod 和朋友不会返回错误,它们只是无法设置/更改权限。
此外,MODE
udev 规则中的选项会影响设备节点(在 /dev 中)对文件系统本身的权限:例如/dev/sdc1
,不会影响文件系统的内容。
话虽如此,还是有几种可能性 - 首先,也是最简单的,就是将脚本作为参数传递给适当的 shell,例如bash /path/to/file.sh
file.sh
但是,如果碰巧调用,例如,在其中内部,这将会出现问题otherfile.sh
。当然,你可以修改脚本以像上面那样调用 bash,否则你将需要确保文件系统实际上是使用文件的可执行位设置的。
根据我的经验,“自动”挂载通常会谨慎行事,默认情况下不启用执行,但如果您以 root 身份从命令行手动挂载文件系统,则默认所有文件均可执行...因此,您可以从 GUI 卸载驱动器(安全删除等),然后打开终端并输入类似的
sudo mount /dev/sdc1 /mnt
将 /dev/sdc1 替换为您的文件系统位置(如果有疑问,请运行dmesg
,它会为您提供您在此处需要的设备名称的线索。
如果由于某种原因,文件仍然没有执行位设置,则选项是文件系统特定的umask、fmask、dmask、模式等, man mount
并检查your_filesystem_type 的选项