我在台式机上使用 Ubuntu 12.04,在笔记本电脑上使用 Ubuntu 11.04。我正在编写包含数学的 c 程序。我正在通过以下命令创建可执行文件:
gcc -o filename.exe filename.c -lm (compilation)
这将创建一个 filename.exe 文件。我现在可以通过终端命令执行它:
./filename.exe (execution)
我有一台笔记本电脑。它装有 Ubuntu 11.04。我将文件存储在 NTFS 分区中。这些命令序列在我的笔记本电脑上运行良好。但如果我将相同的文件复制到我的台式机的 NTFS 分区(即 Ubuntu 12.04)中,然后运行它,它就不起作用了。它可以编译但不能执行。我得到的答案是:
bash: ./filename.exe: Permission denied
我在网上搜索了一下。他们建议你通过以下命令更改文件的权限:
chmod u+x filename.exe
但我得到的答案相同:Permission denied
。我尝试通过 GUI 手动通过属性 --> 权限 --> 选中“允许将文件作为程序执行”,但不起作用。它会自动取消选中。我在互联网上搜索,得到的答案是,不建议每次执行时都更改每个文件的权限。更好的方法是,您可以通过以下命令更改整个 NTFS 分区的权限:
chmod -R 777 /media/partition (where partition is NTFS type.)
这应该会将分区权限更改为 rw 和可执行模式。但这也无法解决我的问题。
答案1
正如其他人已经提到的,该问题是由于使用不支持 Unix 样式权限的 NTFS 引起的。
一种解决方法是挂载分区,使其上的所有文件都设置execute
位。这可能会解决您当前的问题,但在编译更复杂的程序时可能会再次出现问题。这也可能是一个安全风险。
一个正确的解决方案是不要使用 NTFS 分区来编译程序:)
答案2
您在挂载 NTFS 分区时可能有一些设置拒绝您在其上执行文件的权限。您应该能够通过编辑 /etc/fstab 中的选项来修复此问题。请参阅此主题:http://ubuntuforums.org/showthread.php?t=1378519。
答案3
问题是你使用的 ntfs 没有执行权限。你可以做的一件事是将“exec”添加到 /etc/fstab 文件中此驱动器条目的参数末尾
http://ubuntuforums.org/showthread.php?t=1570369 https://bbs.archlinux.org/viewtopic.php?id=126406
答案4
我解决了这个问题。我按照以下网站操作。
我运行了以下命令:
sudo blkid -c /dev/null (It will list all the partitions we have. In my computer, it displays,)
sudo umount /media/partitionname
sudo mkdir /media/partitionname
sudo mount /dev/sdaX -t ntfs-3g -o uid=1000,gid=1000,umask=002 /media/partitionname
其中,partitionname 是您的 NTFS 分区的名称,在 sdaX 中,X 是从第一个命令获得的数字,即sudo blkid -c /dev/null
。
现在我可以编写 C 程序,并且可以在同一个分区(在 NTFS 中)中执行。如果没有这些命令,则使用该命令时文件颜色为白色ls -al
。但现在通过命令列出文件后,颜色已变为绿色ls -al
。