无法执行 .out 文件,权限被拒绝

无法执行 .out 文件,权限被拒绝

我编写了一个 C++ 程序并对其进行了编译以生成一个 .out 文件。但是,每当我尝试运行它时,都会出现权限被拒绝的情况。我读到我们可以使用 sudo,但我无法让它正常工作。我使用类似sudo“./a.out”但这也不起作用。

编辑

这是我尝试“./a.out”时收到的消息。

bash: ./a.out: Permission denied

答案1

通常,g++赋予创建的文件执行权限。如果不传递该-o选项,则文件将被命名为a.out

您的文件未设置执行位可能有两个原因及其解决方案:

  1. umask 值设置为 0133 之类的值,从而阻止设置执行位。解决方案:明确设置权限:

    chmod 755 a.out
    
  2. 您正在使用的文件系统不支持 Linux 权限。如果您将文件放在 FAT32 格式的闪存驱动器上,则可能出现这种情况。解决方案:备份文件并将其格式化为 ext2,或者使用或fmask=0022umask=0022省略fmask)安装驱动器。请参阅脂肪装载选项部分安装手册页更多细节。

对于未设置执行位的 bash 脚本,您可以运行bash file.sh。此功能适用于所有具有可执行内容的文件(编译文件和#!/path/to/interpreter设置了 shebang 行的文件)。要执行未设置执行位的文件,请使用特殊文件/lib/ld-linux.so.2(或/lib/ld-linux-x86-64.so.264 位应用程序)运行此类程序:

/lib/ld-linux-x86-64.so.2 a.out

答案2

.out 是一个不常见的扩展名。通常,它表示“跟踪输出”文件。

检查你用于编译的语法

例如

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

或者可能

g++ myfile.cpp -lm -o outputfilename

您可以检查文件上是否设置了可执行位

ls -l a.out

或者你可以强制执行位

chmod +x a.out

然后你可以运行你的文件

./a.out

或者简单地

a.out

您还应该检查输出文件是否已正确写入二进制文件

IE

file a.out

这将报告文件的格式 - 脚本或二进制

除非您限制了谁可以运行可执行文件,否则您很少需要以 root 身份执行。

如果你已经以 root 身份进行编译(例如 sudo make),或者有一个以 root 身份安装可执行文件的 Makefile,那么我建议你以用户登录的身份重新获得权限

IE

sudo chown fred:fred a.out

即用你的用户 ID 替换“fred”。

答案3

只需将文件夹复制到您的主文件夹即可。您可能想在外部驱动器或其他地方运行它。

答案4

在 Zorin/Ubuntu 上我得到了这个..

$ g++ --std=c++17 -Werror -Wall main.cpp -o main.out
$ sudo chmod +x main.out
$ ./main.out

bash:./main.out:权限被拒绝

我必须将我的整个 REPO 从USB驱动器到 SSD。

在 USB 上,我无法将其设为可执行文件。现在无需 chmod 即可运行。

相关内容