Ubuntu说“ bash:./program权限被拒绝”


205

我在计算机1和计算机2上运行Ubuntu。在计算机1上编译了C ++程序,可以使用终端从终端执行它./program_name。运行正常。

但是,当我尝试在计算机2上执行此操作时,它说: bash: ./program_name: permission denied

有什么问题,我该怎么办?


7
您有执行权限progam_name吗?
fedorqui'SO停止伤害

1
您是如何从计算机1到计算机2获取程序的?您是否复制了可执行文件或重新编译了源代码?命令“ ls -l program_name”的输出是什么?
Eric Postpischil 2013年

2
对于SO来说,这似乎不是主题,因为它与编程无关,而与Linux上的权限管理有关
nijansen 2013年

4
试试bash program_name
Nadjib Mami 2016年

9
我写了一个.sh文件。它拒绝执行此错误消息。我会说这绝对是StackOverflow的主题。我已提名重新开放。
ArtOfWarfare

Answers:


391

chmod u+x program_name。然后执行它。

如果这不起作用,请将程序从USB设备复制到系统上的本机卷。然后chmod u+x program_name在本地副本上执行该命令。

Unix和类似Unix的系统通常不会执行程序,除非该程序已标有执行许可。您将文件从一个系统复制到另一个系统(或装入外部卷)的方式可能已关闭了执行权限(作为安全功能)。该命令chmod u+x name为拥有文件的用户添加执行权限。

该命令仅更改与文件相关联的权限。它不会更改与整个卷关联的安全控制。如果是卷上的安全控件干扰了执行(例如,noexec可能在Unix fstab文件中为卷指定了一个选项,表示不允许对该卷上的文件执行执行权限),则可以重新装入该卷带有允许执行的选项。但是,将文件复制到本地卷可能是一种更快,更轻松的解决方案。


3
我曾经认为这只会在非Unix / Linux本机分区(例如FAT32)上发生,而不会在上发生/tmp。事实证明,我的tmpfs /tmp遇到了同样的问题,我必须将可执行文件复制到真实的本地卷中,即ext4分区中的主文件夹〜中。
RayLuo

13
我今天遇到了这个问题,所以我STFW,第一个搜索结果是紫色的,这意味着我以前已经读过它。我对自己说:“那是一个有前途的信号”,然后单击该搜索结果。它带我到了这个页面,这个答案在我的情况下不起作用,最后是上面的注释起作用了。然后我注意到该评论是我两个月前写的。哇,真是命
RayLuo

5
很抱歉在此Q / A附带代码...请也认为,也许noexec位于fstab中,该fstab可以在没有任何执行特权的情况下挂载驱动器...“我听说”“某些人”在寻找该代码上浪费了很多时间。 ..
Simon Opelt's

1
@Webman:chmod进行持久更改。如果在chmod用于启用权限后权限发生了变化,则说明有其他更改。(这可能包括删除文件并重新创建文件的其他操作,或者正在卸装并重新挂载文件的卷。如果要重新挂载该卷,则可以使用一些方法为外部卷上的文件指定默认权限,但这超出了范围我现在可以回答。)
Eric Postpischil

2
@SimonOpelt“其他人”很感激
Matt Jacobsen

32

试试这个:

sudo chmod +x program_name
./program_name 

谢谢你的建议。我只是尝试过-但是现在它说bash:./program_name无法执行二进制文件
Kian

可能是因为计算机2是32位,计算机1是64位吗?我想也许我应该只在计算机2上编译它。谢谢大家的帮助。
健安

是的,如果您以64位编译某些程序,并尝试在32位系统中执行,则不起作用。您需要在计算机2上重新编译源代码
。– Vitor Villar

sudo通常没有必要,除非该程序位于您没有写许可权的目录中(在这种情况下,您首先是如何将其安装在该目录中的?)
Tripleee 19-10-21

10

听起来您没有在文件权限上设置执行标志,请尝试:

chmod u+x program_name
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.