【问题标题】:Ubuntu 13.10 , Golang build and run, the terminal display error bash: ./filename : Permission deniedUbuntu 13.10,Golang构建运行,终端显示错误bash: ./filename : Permission denied
【发布时间】:2014-03-03 08:01:20
【问题描述】:

我试图在使用命令 go build 而不是输入 go run filename.go 后运行 Go 的可执行文件。

我在 Golang 源文件所在的目录中输入了go build。创建可执行文件后,我输入./filename 来运行它。然后终端显示一行:

bash : ./filename : Permission denied 

我曾尝试通过键入以下内容来更改文件名的权限:

chmod u+x filename 

但此操作不会产生任何效果。每当我输入./filename 时,仍然会出现权限被拒绝错误。

还有其他方法可以从源代码构建 Golang 应用程序,然后从可执行文件运行它吗?

如果我在 Windows 命令提示符下执行此任务,所有事情都做得很好,在输入 go build 后,filename.exe 被创建,当我通过输入 ./filename.exe 运行它时没有任何问题。

【问题讨论】:

  • 您能否提供一个ls -lah 列出您的二进制文件所在的位置,以便我们确定这不是权限问题?
  • 关于@Kavu 的评论,您的 Go 工作区是在本地 Linux 文件系统(例如 ext4)上,还是您尝试从已安装的 Windows 文件系统中执行此操作?
  • 我的源在 NTFS 分区上。 /media/keworld/PROGRAMMING 上的 /dev/sda6 类型 fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

标签: linux bash ubuntu build go


【解决方案1】:

NTFS 和 FAT 的权限模型与 Unix 不同。这尤其意味着这样的文件系统上没有可执行标志。调用 chmod a+x FILE 是无操作的。 Linux 通过为每个包含潜在权限的文件设置掩码来模拟 NTFS 文件系统上的经典 Unix 权限。

要解决这些问题,请将可执行文件移动到不同的文件系统或更改挂载标志以使用启用可执行标志(适用于所有文件)的权限掩码。

【讨论】:

  • 当我使用UDisk设置/dev/sda6在系统启动时自动挂载时,我真的不知道为什么以及如何轻松解决这个问题。只需转到“编辑安装选项”,然后打开“自动安装选项”,按 OK。
  • default_permissions 不包含执行权限。我猜自动安装器使用不同的权限。
  • 也许你是对的。自动挂载选项在设置中不包含 default_permissions。它只包含“nosuid,nodev,nofail,x-gvfs-show”。谢谢你的回答。
猜你喜欢
  • 2018-12-24
  • 2013-09-28
  • 2022-11-10
  • 2022-11-22
  • 2017-08-25
  • 2016-02-26
  • 2018-04-25
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多