无法运行已编译文件 - bash: ./a.out: 权限被拒绝。(我已尝试使用chmod命令)

6

我使用cc test.c编译了我的C源代码,它生成了a.out文件。

但是当我运行它时,出现了以下错误 -

bash: ./a.out: Permission denied

我的源代码不在主目录中,而是在另一个FAT-32分区中,因此我使用以下命令将包含代码的驱动器挂载:

$ udisks --mount /dev/sda7 --mount-options umask=022
Mounted /org/freedesktop/UDisks/devices/sda7 at /media/48E9-FD53
$ cd /media/48E9-FD53/C

然后我使用cc编译我的代码。

我也尝试过gcc。但是我仍然收到相同的错误。

然后我尝试了 - chmod +x a.out,仍然出现同样的问题。还使用了(chmod 755 a.out)和chmod u+x a.out

我也尝试使用sudo编译和执行程序。

我还尝试了 - sudo chown sannidhya:sannidhya a.out

我尝试了谷歌后找到的每个方法,仍然无法使其正常工作。

如何运行.out文件(不需要将其移动到主目录中)?

注意 - 我使用的是Ubuntu 12.04 LTS。

但是这里有一个奇怪的事情,即使在运行chmod +x a.out之后,运行 - ls -l a.out,我得到的结果是-

-rw-r--r-- 1

此外,当我检查 a.out 的属性时,在权限选项卡下勾选 允许将文件作为程序执行 后,勾选标记会出现然后很快消失。

你尝试过 sudo chmod +x a.out 吗? - MOHAMED
@MOHAMED 我已经完成了... - ShuklaSannidhya
从经验来看,在win远程分区上使用gcc是一个坏主意,会引起很多问题。我建议:如果备份是问题,可以使用源代码仓库(如github)。如果您控制系统,还可以反转情况(通过samba共享让Windows访问Linux文件夹)。 - Offirmo
@Offirmo 这不是远程分区。它存在于我的驱动器上。但它是FAT32格式的。 - ShuklaSannidhya
所以你没有权限,没有符号链接... 这不是进行Unix黑客攻击的最佳地点... - Offirmo
显示剩余2条评论
3个回答

10

看起来你已经挂载了一个没有执行权限的分区。你需要重新挂载分区:

sudo mount -o remount -o exec /dev/sda7

即使这样,我还需要使用chmod吗? - ShuklaSannidhya
1
我会为了测试以root身份执行任何操作。然后检查ls是否设置了可执行位。接着尝试运行./a.out。 - hek2mgl
呵呵! :) 很好!.. 虽然在这种情况下它似乎是一个 USB 棒,但每次挂载 CD-ROM 时都应该记住这一点。 - hek2mgl
好的,所以如果驱动器已经挂载,这个命令将会卸载它并重新挂载,对吗?如果之前没有挂载,如何挂载呢?这样可以吗 - sudo mount -o exec /dev/sda7。顺便问一下:-o参数的目的是什么? - ShuklaSannidhya
1
你错过了应该挂载的路径。请用以下方式调用它:mount 选项 设备 目标路径 - hek2mgl
显示剩余6条评论

4
我猜测你正在一个NTFS/FAT分区上进行所有操作,这个分区可能与Windows共享。chmod权限对它们不起作用。
你应该将其移动到ext4(或等效的Linux)分区,然后执行权限更改。
否则,对于NTFS/FAT分区,您需要在挂载时设置整个分区的权限。例如,
sudo umount /mnt/my_partition
sudo mount -t vfat -o rw,auto,user,fmask=0000,dmask=0000 /dev/sda7 /mnt/my_partition

这会在所有目录和文件上设置 777(呀!),但一旦设置,您就无法修改它们,直到重新挂载。

相同逻辑。如果它不是Linux本机分区,则只能在挂载时将权限应用于整个分区。将其移动到Linux分区以使chmod起作用。 - Anirudh Ramanathan
我应该传递什么参数作为“挂载点”?我遇到了这个错误 - “mount: mount point /media/48E9-FD53 does not exist”。 - ShuklaSannidhya
你成功挂载了吗?现在运行 mount | grep sda7 应该反映出新的 dmaskfmask 设置。你能检查一下吗? - Anirudh Ramanathan

0

这里有另一种使用 fstab 的方法

cat /etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults        0 1
D:      /mnt/d  drvfs   defaults,user,metadata,exec     0       0 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接