我最近使用CentOS 6.3安裝了Go到我們的服務器。安裝似乎沒有問題。然而,我做了一個測試「hello world」腳本,當我運行時,我得到以下輸出。前叉/執行權限被拒絕錯誤
fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied
現在運行去env或其他go命令似乎工作。起初我認爲這是一個權限問題,但是以root用戶身份運行我得到同樣的東西。一個
我最近使用CentOS 6.3安裝了Go到我們的服務器。安裝似乎沒有問題。然而,我做了一個測試「hello world」腳本,當我運行時,我得到以下輸出。前叉/執行權限被拒絕錯誤
fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied
現在運行去env或其他go命令似乎工作。起初我認爲這是一個權限問題,但是以root用戶身份運行我得到同樣的東西。一個
只是猜測:您的nix可能因安全原因在/ tmp中執行程序而禁用。它可以在CentOS中配置,但我不知道。
替代解決方案:看來你正在嘗試go run
來執行一個Go程序(這與C腳本一樣是一個腳本)。嘗試(假設$GOPATH=~
,容易可能性),而不是一個正常的構建,即代替
me:~/src/foo$ go run main.go
嘗試
me:~/src/foo$ go build # main.go should not be necessary here
me:~/src/foo$ ./foo
這種方法仍然會使用/ tmp,無論以形成二元,IIRC,但它將不會嘗試從那裏執行它。
PS:不要以root身份運行這些命令。沒有必要使用正確的設置。
我今天遇到了這個問題,但上述方案中並沒有工作。礦山固定只需運行:
$ export TMPDIR=~/tmp/
然後我就能夠拿到劇本與運行:
$ go run hello.go
hello, world
唯一的缺點是,你必須運行export TMPDIR
要運行一個應用程序每次。
榮譽給Adam Goforth
像一個魅力工作 – victorkurauchi 2015-03-03 14:04:40
你不需要每次你想運行的時候出口..只要把如果你想避免影響其他程序,你可以在〜/ .profile或〜/ .bashrc – 2015-09-25 09:53:13
上輸出,你可以'alias go ='TMPDIR =〜/ tmp go'' – kbolino 2017-10-04 20:18:12
要fix this issue on my Chromebook我只是重新安裝~/tmp
爲可執行文件。可能有這樣的安全隱患,但由於go run
作品在其他平臺上我想,也許它不是那麼糟糕(尤其是本地開發機器上):
sudo mount -i -o remount,exec /tmp/
我將此添加到我的.bash_profile
腳本。
@ user387049,看起來像jnml是正確的:嘗試運行'mount'並查看'/ tmp'的輸出是否提到'noexec'選項。 – kostix 2013-02-18 20:38:47
運行掛載確實顯示/ tmp有noexec選項。不想禁用它,建立並運行修復問題。謝謝! – user387049 2013-02-18 21:40:43
我做了一個快速的Go腳本,它可以構建並在之後執行程序。我更喜歡減少兩個步驟到一個:) https://github.com/rjbishop/gobe – richoffrails 2013-10-04 20:41:01