2013-09-23 114 views
104

我在計算機1和計算機2上運行Ubuntu。我在計算機1上編譯了一個C++程序,並且我可以使用./program_name從終端執行它。它運行良好。Ubuntu說「bash:./程序權限被拒絕」

然而,當我嘗試這樣做計算機2上,它說:bash: ./program_name: permission denied

什麼是錯的,我能做些什麼呢?

+7

你有權限來執行'progam_name'? – fedorqui

+1

你是如何從計算機1到計算機2獲得該程序的?你是否複製了可執行文件或重新編譯了源代碼?命令「ls -l program_name」的輸出是什麼? –

+0

我會如何發現這一點?如果有幫助,我知道root密碼。我通過USB棒運輸它。 – Kian

回答

235

chmod u+x program_name。然後執行它。

如果這不起作用,請將程序從USB設備複製到系統上的本地卷。然後在本地複製chmod u+x program_name並執行該操作。

Unix和類Unix系統通常不會執行程序,除非它被標記爲執行權限。將文件從一個系統複製到另一個系統(或安裝了外部卷)的方式可能已關閉執行權限(作爲安全功能)。命令chmod u+x name爲擁有該文件的用戶添加了執行權限。

該命令僅更改與文件關聯的權限;它不會更改與整個卷關聯的安全控制。如果捲上的安全控制妨礙執行,則可以使用選項重新掛載卷以允許執行。但是,將該文件複製到本地卷可能是一種更快,更簡單的解決方案。

+0

我曾經認爲這隻會發生在非Unix/Linux本機分區(如FAT32)上,並且不會發生在'/ tmp'上。事實證明,我的tmpfs'/ tmp'遭受同樣的問題,我必須將可執行文件複製到一個真正的本地卷,即我的home文件夾〜在一個ext4分區。 – RayLuo

+1

我今天遇到這個問題,所以我STFW,第一個搜索結果是紫色的,這意味着我以前讀過這個。 「這是一個很有前途的標誌」,我對自己說,然後點擊搜索結果。它把我帶到這個頁面,這個答案在我的情況下不起作用,然後最後是上面的註釋。然後我注意到這個評論是2個月前我寫的。哇,什麼生活。 – RayLuo

+0

抱歉在這個Q/A上捎帶......也請認爲** noexec **在** fstab **中,它沒有任何執行權限的情況下安裝驅動器......「我聽說」有些人「丟失了相當多的時間尋找... –

17

試試這個:

sudo chmod +x program_name 
./program_name 
+0

感謝您的意見。我只是嘗試 - 但現在它說bash:./program_name不能執行二進制文件 – Kian

+0

難道是因爲計算機2是32位和計算機1是64位?我想也許我應該在電腦2上編譯它。謝謝大家的幫助。 – Kian

+0

是的,如果你用64位編譯某個程序,並嘗試在系統中執行32位,則不起作用。您需要重新編譯計算機上的源代碼2。 –

8

聽起來像是你沒有執行標誌上的文件權限設置,嘗試:

chmod u+x program_name