我已经使用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
的属性时,在权限选项卡下,当我检查Allow executing file as program
时,标记出现并迅速消失。
似乎您已经安装了设置了no-exec标志的分区。您必须重新挂载分区:
sudo mount -o remount -o exec /dev/sda7
我猜您是在可能与windows共享的NTFS/FAT分区上完成所有这些操作的。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
(太棒了!),但是一旦设置,您就不能修改它们,直到重新挂载。
这是使用fstab
的另一种方法
cat /etc/fstab
LABEL=cloudimg-rootfs / ext4 defaults 0 1
D: /mnt/d drvfs defaults,user,metadata,exec 0 0