我的驱动器格式化为 ext3/ext4,所以我知道这不是文件系统可执行权限的问题。
我的一个程序遇到了这个问题,为了测试它,我创建了一个快速 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)
答案1
您的驱动器已使用该noexec
选项安装。据我所知,这实际上禁止在卷上执行程序,无论各个文件的设置如何。具体解决方案取决于您最初如何安装卷,但从一般角度来看,您需要安装没有该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.
以及 mount 手册页的相关部分:
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"
,然后使用您通常需要的选项(noexec 除外)重新安装它mount
。请参阅man mount
man fuse
和man fusermount
以了解针对您的具体情况的更多详细信息。