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


12

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

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

然后,我尝试从终端运行它,但收到消息“ 权限被拒绝”。

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

有没有一种简便的方法可以通过USB记忆棒执行操作?


2
相关的问题在这里:askubuntu.com/questions/23108/...
luri

Answers:


20

由于FA32文件系统的限制,您不能这样做。

现在,您可以作弊:

  1. 要么sh etoys.sh代替./etoys.sh
  2. 如果需要,您甚至可以创建另一个脚本(例如,位于您的硬盘驱动器上),该脚本只需在USB驱动器上调用您的脚本即可:

    #!/bin/bash
    sh /media/USB/etoys.sh
    

非常感谢!第二种作弊方式当然是一种选择,我会牢记这一点。或者,我可以使用另一个文件系统同时与Windows和Ubuntu一起使用并让我执行文件吗?
德里克·雷德芬

您可以使用ext2或ext3,但需要在Windows上安装一个小型实用程序才能使其正常工作。

关于此的另一个问题-我决定选择在硬盘驱动器上创建脚本,并且效果很好。但我也想为不是.sh文件的程序提供脚本-例如,便携式Chromium,其类型为“可执行(application / x-executable)”。使用sh无效,并且./Chromium仍授予拒绝权限。是否有另一个命令可用于此?
Derek Redfern

嗯,我想您可能只是作弊:在执行Chrome之前,您可以对其进行chmod使其可执行。由于chmod命令每次都会被调用,因此下次插入USB驱动器时不再具有权限不再重要

我以为您根本无法在FAT上使用chmod,因为它不支持Unix权限。
德里克·雷德芬

8

安装设备-o mode=<value>应该可以

mode=value

将所有文件的模式设置为value并0777忽略原始权限。将搜索权限添加到具有读取权限的目录。该值以八进制表示。


1
我应该在fstab中设置吗?
德里克·雷德芬

@Bonsi Scott mode=vfat 没有选项,请参见mount(8)
pevik '16

6

实际上,我在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

3

最终,这个问题似乎是udisks坐骑与文件系统showexec选项,以防止不结束的任何文件.exe.bat.com将要运行。

可以在这里找到一个相关的问题(如何为udisk提供自定义安装选项):如何配置为将数据记录到pendrive上?事实证明,您可以使用udev配置来执行此操作。

真的无法为udisk设置默认安装选项吗?提出了另一种基于的解决方案udisks-glue,但它似乎最终没有依靠,因为它似乎令人信服,udisks因此您似乎可以添加选项,但不能删除它们,尤其showexec是仍然存在。

无论如何,我倾向于将其修补为二进制文件。


2

就我所知,所显示的所有解决方案都无法正常运行,以使我编写的程序可以作为Linux终端程序在FAT32分区中运行,但是将程序的文件名更改为包含.exe扩展名确实可行(感谢提示) ,我所做的就是将要尝试在FAT32分区上执行的终端程序的文件名重命名为filename.exe,然后将其卸载,重新安装并设置磁盘权限以允许执行,然后转到文件名。 exe并设置其权限,然后复选标记会粘住而不是变回负号,当我设置路径并在终端上输入./filename.exe时,程序将按预期运行,并显示包含文件名的命令行输入.exe,尽管Ubuntu文件目录将文件显示为MSDOS / Windows,但它确实作为Linux程序运行。


1

因此,我找到了一个更简单(更安全的解决方案)。

使用gparted格式化USB FAT32,然后使用Partition => Manage Flags设置以下标志:boot,lba



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.