每当我创建或复制几个 shell 文件到 USB 存储设备时,我就无法使它们可执行。
如果我创建test.sh,它的默认文件权限将为644,但是当我执行时
chmod 777 测试.sh
没有错误报告并且echo $?
也返回“0”。但仍然ls -l
显示权限为644
,我无法执行它./test.sh
答案1
是的,如果您的设备使用不支持此类权限设置(例如 VFAT)的文件系统进行格式化,则可能会发生这种情况。在这些情况下,umask 是根据 fstab(或热插拔等效项)中的设置动态创建的。
很可能请参阅 man mount 了解详细信息。例如,对于 VFAT,我们发现:
脂肪的安装选项
uid=值 和 gid=值
设置所有文件的所有者和组。 (默认:当前进程的uid和gid。)
umask=值
设置umask(不存在的权限的位掩码)。默认是当前进程的umask。该值以八进制给出。
ETC。
答案2
看起来您的文件系统安装了该noexec
选项,该选项禁止在该文件系统上执行程序,就像权限中的所有执行位都未设置一样。如果您使用user
挂载选项(或者某些用户界面在后台使用它),则noexec
打开,除非您使用 明确将其关闭exec
。
大多数 USB 记忆棒使用 MSDOS 派生的 VFAT 文件系统,该系统没有权限的概念。您只能在挂载文件系统时指定权限位,并且这些权限适用于该文件系统上的所有文件。
如果您没有执行脚本的权限,请显式调用解释器:
sh /media/stick/test.sh
对于动态链接的二进制文件,调用动态链接器。
/lib/ld-linux.so.2 /media/stick/myprog