2013-09-23 19 views
104

Używam Ubuntu na komputerze 1 i komputerze 2. Zredagowałem program C++ na komputerze 1 i mogę go wykonać z terminala przy użyciu ./program_name. Działa dobrze.Ubuntu mówi "bash: ./program Odmowa uprawnień"

Jednak gdy próbuję to zrobić na komputerze 2, to mówi: bash: ./program_name: permission denied

Co się dzieje i co mogę z tym zrobić?

+7

Czy masz uprawnienia do wykonywania 'progam_name'? – fedorqui

+1

Jak otrzymałeś program z komputera 1 na komputer 2? Czy skopiowałeś plik wykonywalny lub przekompilowałeś kod źródłowy? Jaki jest wynik polecenia "ls -l program_name"? –

+0

Jak mogę to znaleźć? Znam hasło root, jeśli to pomaga. Przewoziłem go za pomocą pamięci USB. – Kian

Odpowiedz

235

chmod u+x program_name. Następnie wykonaj to.

Jeśli to nie zadziała, skopiuj program z urządzenia USB na macierzysty wolumen w systemie. Następnie chmod u+x program_name na lokalnej kopii i wykonaj to.

Systemy uniksowe i uniksowe zazwyczaj nie uruchamiają programu, chyba że jest on oznaczony uprawnieniem do wykonania. Sposób, w jaki skopiowałeś plik z jednego systemu do drugiego (lub zamontowałeś wolumin zewnętrzny) mógł wyłączyć zezwolenie na wykonanie (jako funkcję bezpieczeństwa). Komenda chmod u+x name dodaje uprawnienia dla użytkownika, który jest właścicielem pliku do jego wykonania.

To polecenie zmienia jedynie uprawnienia związane z plikiem; nie zmienia kontroli bezpieczeństwa powiązanych z całym woluminem. Jeśli jest to kontrola bezpieczeństwa woluminu, który zakłóca wykonanie, można ponownie zamontować wolumin z opcjami umożliwiającymi wykonanie. Jednak skopiowanie pliku do lokalnego woluminu może być szybszym i prostszym rozwiązaniem.

+0

Kiedyś myślałem, że będzie to miało miejsce tylko na partycjach natywnych bez systemu Unix/Linux, takich jak FAT32, i nie będzie miało miejsca w '/ tmp'. Okazuje się, że mój tmpfs '/ tmp' ma ten sam problem i muszę skopiować plik wykonywalny do prawdziwego woluminu natywnego, tj. Do folderu domowego ~ na partycji ext4. – RayLuo

+1

Ja, napotkałem ten problem dzisiaj, więc STFW, pierwszy wynik wyszukiwania jest w kolorze fioletowym, co oznacza, że ​​czytałem to wcześniej. "To obiecujący znak", powiedziałem do siebie, a następnie kliknąłem ten wynik wyszukiwania. To doprowadziło mnie do tej strony, ta odpowiedź nie działa w moim przypadku, a na końcu powyższy komentarz działa. A potem zauważam, że komentarz został napisany przeze mnie, 2 miesiące temu. Wow, co za życie. – RayLuo

+0

Przepraszamy za niedopełnienie tego Q/A ... proszę również pomyśleć, że może ** noexec ** jest w ** fstab **, który montuje dysk bez żadnych uprawnień wykonywania ... "Słyszałem", że "niektórzy ludzie" stracili spora część czasu na szukanie ... –

17

Spróbuj tego:

sudo chmod +x program_name 
./program_name 
+0

Dziękuję za poradę. Po prostu próbowałem tego - ale teraz jest napisane, że bash: ./program_name nie może wykonać pliku binarnego – Kian

+0

Czy to możliwe, ponieważ komputer 2 jest 32-bitowy, a komputer 1 - 64-bitowy? Chyba powinienem go skompilować na komputerze. 2. Dziękuję wszystkim za pomoc. – Kian

+0

Tak, jeśli skompilujesz jakiś program w 64 bitach i spróbujesz wykonać w systemie 32 bity, to nie działa. potrzebujesz przekompilować kod źródłowy na komputerze 2. –

8

Brzmi jak nie masz ustawioną flagę wykonania na uprawnienia do plików, spróbuj:

chmod u+x program_name 
Powiązane problemy