我的驱动器被格式化为ext4 3/ext4 4,所以我知道这不是文件系统可执行权限的问题。
我在一个程序中遇到了这个问题,所以为了测试它,我创建了一个快速的bash文件,只需打开一个终端并运行sudo apt-get update。运行它时,我会得到以下框:
如果单击Run,则会得到另一个框:
有什么解决方案我可以尝试(除了把软件放在我的内部驱动器)?我试图运行程序的外部驱动器,特别是因为我的内部驱动器是低空间。
我还检查了“允许作为可执行文件运行”框,它是选中的(实际上,我不能将它选中)。
编辑:不包括脚本的道歉。这就是文件中的内容:
#! /bin/bash
gnome-terminal -e 'bash -c "sudo apt-get update; exec bash"'我试图在外部媒体上运行的所有软件都有这个问题。
下面是mount | grep /dev/sd的输出:
/dev/sda1 on /var/host/media/removable/SD Card type fuseblk (rw,nosuid,nodev,noexec,relatime,dirsync,user_id=302,group_id=302,allow_other,blksize=4096)发布于 2017-05-10 19:46:59
您的驱动器安装了noexec选项。AFAIK,这实际上不允许在卷上执行程序,而不管各个文件上的设置如何。不同的解决方案首先取决于您如何挂载卷,但从一般的角度来看,您需要在没有noexec选项的情况下挂载卷,或者显式地将其替换为exec选项。下面是fuse手册页的摘录:
OPTIONS
Most of the generic mount options described in mount are supported (ro,
rw, suid, nosuid, dev, nodev, exec, noexec, atime, noatime, sync,
async, dirsync). Filesystems are mounted with nodev,nosuid by default,
which can only be overridden by a privileged user.以及挂载手册页的相关部分:
noexec Do not allow direct execution of any binaries on the mounted
filesystem. (Until recently it was possible to run binaries
anyway using a command like /lib/ld*.so /mnt/binary. This trick
fails since Linux 2.4.25 / 2.6.0.)据我所知,fuse不支持重新挂载选项,因此我认为您必须使用/dev/sda1 (在设备上关闭任何打开的文件之后)卸载fusermount -u "/var/host/media/removable/SD Card",然后使用通常使用mount命令的选项(noexec除外)重新挂载它。请参阅man mount man fuse和man fusermount,以获得对您的具体情况所需的更多详细信息。
https://askubuntu.com/questions/913618
复制相似问题