通过实时用户从外部驱动器运行 shell 脚本

通过实时用户从外部驱动器运行 shell 脚本

到目前为止,我已经尝试了至少 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 和朋友不会返回错误,它们只是无法设置/更改权限。

此外,MODEudev 规则中的选项会影响设备节点(在 /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 的选项

相关内容