如何从FAT USB驱动器执行文件?
我正在尝试将便携式应用程序安装到我的USB驱动器上,以便它兼容Ubuntu和Windows(特别是一个名为eToys的程序)。 对于两个操作系统,应用程序内置了支持 – 对于Ubuntu有etoys.sh
,对于Windows有etoys.sh
。 我决定安装到FAT驱动器上,因为可以从两个系统读取。 这适用于Windows,但由于某种原因,我无法在Ubuntu上执行etoys.sh。
问题不在于文件 – 当整个文件夹被复制到本地硬盘驱动器时,该应用程序在Ubuntu中运行良好。 但是当我尝试从USB执行它时,它会在文本编辑器中打开文件。
然后我尝试从终端运行它,但是我收到了Permission denied消息。
我也遇到了与其他可执行文件相同的问题。
有没有一种从USB棒执行操作的简单方法?
由于FA32文件系统的限制,你不能。
现在,你可以作弊:
- 要么调用
sh etoys.sh
而不是./etoys.sh
-
如果你愿意,你甚至可以创建另一个脚本(例如,它位于硬盘驱动器上),只需在USB驱动器上调用脚本:
#!/bin/bash sh /media/USB/etoys.sh
使用-o mode=
安装设备应该可以工作
mode=value
将所有文件的模式设置为值& 0777
忽略原始权限。 为具有读取权限的目录添加搜索权限。 该值以八进制给出。
我实际上在http://ubuntuforums.org/showthread.php?t=1665289找到了一个很好的解决方案,解决了这个问题。
基本上,它说运行命令
sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks/udisks-daemon
这将阻止磁盘使用showexec选项自动安装。
我不想回答我自己的问题,但这对我有用,我希望它也有助于其他人。
对于ubuntu 18.04:
sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks2/udisksd
最终,问题似乎是udisks
使用showexec
选项安装文件系统,防止任何不以.exe
, .bat
或.com
结尾的文件运行。
可以在此处找到相关问题(如何为udisks提供自定义安装选项): 如何配置以立即将数据记录到pendrive? 原来你可以使用udev
配置来做到这一点。
是否真的无法为udisks设置默认挂载选项? 提出了另一种基于udisks-glue
解决方案,但似乎不那么令人信服,因为它最终依赖于udisks
,所以看起来你可以添加选项,但不能删除它们,特别是showexec
仍然存在)。
无论如何,我更倾向于修补二进制文件。
在我的FAT32分区中运行的Linux终端程序编写的程序中没有显示所示的解决方案,但是更改程序的文件名以包含.exe扩展名确实有效(感谢提示) ,我所做的就是将文件名重命名为filename.exe,用于我尝试在FAT32分区上执行的终端程序,然后卸载它,重新安装它并设置磁盘权限以允许执行,然后转到filename。 exe并设置其权限然后复选标记会粘住而不是转回减号,当我设置路径并在终端提示符下输入./filename.exe时,程序按原样运行并显示包含文件名的命令行输入的.exe,虽然Ubuntu文件目录显示文件为MSDOS / Windows,但它确实作为Linux程序运行。
所以我找到了一个更简单(更安全的解决方案)。
使用gparted格式化USB FAT32,然后使用Partition => Manage Flags设置以下标志:boot,lba
您可以使用umask=000
模式:
umount /dev/sdb1 mount -o umask=000 -t vfat /dev/sdb1 /media/sdb1
来源: wiki.linuxquestions.org , mount(8)中的 “装载脂肪选项”部分。
如果语法是bash …
bash yourscript