如何从FAT USB驱动器执行文件?

我正在尝试将便携式应用程序安装到我的USB驱动器上,以便它兼容Ubuntu和Windows(特别是一个名为eToys的程序)。 对于两个操作系统,应用程序内置了支持 – 对于Ubuntu有etoys.sh ,对于Windows有etoys.sh 。 我决定安装到FAT驱动器上,因为可以从两个系统读取。 这适用于Windows,但由于某种原因,我无法在Ubuntu上执行etoys.sh。

问题不在于文件 – 当整个文件夹被复制到本地硬盘驱动器时,该应用程序在Ubuntu中运行良好。 但是当我尝试从USB执行它时,它会在文本编辑器中打开文件。

然后我尝试从终端运行它,但是我收到了Permission denied消息

我也遇到了与其他可执行文件相同的问题。

有没有一种从USB棒执行操作的简单方法?

由于FA32文件系统的限制,你不能。

现在,你可以作弊:

  1. 要么调用sh etoys.sh而不是./etoys.sh
  2. 如果你愿意,你甚至可以创建另一个脚本(例如,它位于硬盘驱动器上),只需在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