2013-09-23 107 views
104

我在计算机1和计算机2上运行Ubuntu。我在计算机1上编译了一个C++程序,并且我可以使用./program_name从终端执行它。它运行良好。Ubuntu说“bash:./程序权限被拒绝”

然而,当我尝试这样做计算机2上,它说:bash: ./program_name: permission denied

什么是错的,我能做些什么呢?

+7

你有权限来执行'progam_name'? – fedorqui

+1

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

+0

我会如何发现这一点?如果有帮助,我知道root密码。我通过USB棒运输它。 – Kian

回答

235

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

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

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

该命令仅更改与文件关联的权限;它不会更改与整个卷关联的安全控制。如果卷上的安全控制妨碍执行,则可以使用选项重新挂载卷以允许执行。但是,将该文件复制到本地卷可能是一种更快,更简单的解决方案。

+0

我曾经认为这只会发生在非Unix/Linux本机分区(如FAT32)上,并且不会发生在'/ tmp'上。事实证明,我的tmpfs'/ tmp'遭受同样的问题,我必须将可执行文件复制到一个真正的本地卷,即我的home文件夹〜在一个ext4分区。 – RayLuo

+1

我今天遇到这个问题,所以我STFW,第一个搜索结果是紫色的,这意味着我以前读过这个。 “这是一个很有前途的标志”,我对自己说,然后点击搜索结果。它把我带到这个页面,这个答案在我的情况下不起作用,然后最后是上面的注释。然后我注意到这个评论是2个月前我写的。哇,什么生活。 – RayLuo

+0

抱歉在这个Q/A上捎带......也请认为** noexec **在** fstab **中,它没有任何执行权限的情况下安装驱动器......“我听说”有些人“丢失了相当多的时间寻找... –

17

试试这个:

sudo chmod +x program_name 
./program_name 
+0

感谢您的意见。我只是尝试 - 但现在它说bash:./program_name不能执行二进制文件 – Kian

+0

难道是因为计算机2是32位和计算机1是64位?我想也许我应该在电脑2上编译它。谢谢大家的帮助。 – Kian

+0

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

8

听起来像是你没有执行标志上的文件权限设置,尝试:

chmod u+x program_name