Ubuntu mówi „bash: ./program Odmowa dostępu” [zamknięte]

206

Używam Ubuntu na komputerze 1 i komputerze 2. Skompilowałem program C ++ na komputerze 1 i mogę go uruchomić z terminala za pomocą ./program_name. Działa dobrze.

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

Co jest nie tak i co mogę z tym zrobić?

Kian
źródło
7
Czy masz uprawnienia do wykonania progam_name?
fedorqui „SO przestań szkodzić”
1
Jak dostałeś program z komputera 1 na komputer 2? Czy skopiowałeś plik wykonywalny lub ponownie skompilowałeś kod źródłowy? Jakie są dane wyjściowe polecenia „ls -l nazwa_programu”?
Eric Postpischil,
2
Wydaje się, że to nie na temat SO, ponieważ nie dotyczy programowania, ale zarządzania prawami w Linuksie
nijansen
4
spróbujbash program_name
Nadjib Mami
10
Napisałem .shplik. Odmówił wykonania z tym komunikatem o błędzie. Powiedziałbym, że jest to zdecydowanie temat na temat StackOverflow. Nominowałem do ponownego otwarcia.
ArtOfWarfare

Odpowiedzi:

392

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

Jeśli to nie zadziała, skopiuj program z urządzenia USB na natywny wolumin w systemie. Następnie chmod u+x program_namena lokalnej kopii i uruchom ją.

Systemy uniksowe i podobne do systemu Unix generalnie nie wykonają programu, dopóki nie zostanie 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ć uprawnienia do wykonywania (jako funkcja bezpieczeństwa). Polecenie chmod u+x namedodaje uprawnienia do wykonania pliku przez użytkownika, który jest właścicielem pliku.

To polecenie zmienia tylko uprawnienia związane z plikiem; nie zmienia kontroli bezpieczeństwa związanych z całym woluminem. Jeśli kontrolki bezpieczeństwa woluminu przeszkadzają w wykonywaniu (na przykład noexecdla woluminu w fstabpliku Unix można określić opcję , która mówi, że nie zezwalaj na wykonywanie uprawnień do plików na woluminie), możesz ponownie zamontować wolumin z opcjami umożliwiającymi wykonanie. Jednak skopiowanie pliku na wolumin lokalny może być szybszym i łatwiejszym rozwiązaniem.

Eric Postpischil
źródło
3
Kiedyś myślałem, że tak się stanie tylko na partycjach innych niż Unix / Linux, takich jak FAT32, i tak się nie stanie /tmp. Okazuje się, że mój tmpfs /tmpma ten sam problem i muszę skopiować plik wykonywalny na prawdziwy wolumin natywny, tj. Mój folder domowy ~ na partycji ext4.
RayLuo
13
Zetknąłem się dzisiaj z tym problemem, więc STFW, pierwszy wynik wyszukiwania jest w kolorze fioletowym, co oznacza, że ​​już go przeczytałem. „To obiecujący znak” - powiedziałem do siebie, a następnie kliknąłem wynik wyszukiwania. Doprowadziło mnie do tej strony, tej odpowiedzi, która nie działa w moim przypadku, a następnie komentarza powyżej, który działa. A potem zauważam, że ten komentarz został napisany przeze mnie 2 miesiące temu. Wow, co za życie.
RayLuo
5
Przepraszam za niedopuszczanie tego Q / A ... proszę również pomyśleć, że może noexec jest w fstab, który montuje dysk bez żadnych uprawnień do wykonywania ... „Słyszałem”, że „niektórzy ludzie” stracili sporo czasu szukając tego. ..
Simon Opelt
1
@Webman: chmodwprowadza trwałą zmianę. Jeśli uprawnienia zmienią się po ich użyciu, chmodaby je włączyć, coś innego je zmienia. (Może to obejmować usunięcie lub ponowne utworzenie pliku lub wolumin, w którym plik jest demontowany i montowany ponownie. Jeśli wolumin jest montowany ponownie, istnieją sposoby określenia domyślnych uprawnień do plików w woluminach zewnętrznych, ale to jest poza zakresem Mogę teraz odpowiedzieć.)
Eric Postpischil,
2
@ SimonOpelt „inni ludzie” są wdzięczni
Matt Jacobsen,
32

Spróbuj tego:

sudo chmod +x program_name
./program_name 
Vitor Villar
źródło
Dzięki za radę. Właśnie próbowałem, ale teraz mówi bash: ./nazwa_programu nie może wykonać pliku binarnego
Kian
Czy to możliwe, ponieważ komputer 2 jest 32-bitowy, a komputer 1 jest 64-bitowy? Chyba powinienem po prostu skompilować go na komputerze 2. Dziękuję wszystkim za pomoc.
Kian
Tak, jeśli skompilujesz jakiś program w 64 bitach i spróbujesz wykonać w systemie 32 bity, nie zadziała. musisz ponownie skompilować kod źródłowy na komputerze 2.
Vitor Villar,
sudonie jest generalnie konieczne, chyba że program znajduje się w katalogu, w którym nie masz uprawnień do zapisu (w takim przypadku, w jaki sposób go tam zainstalowałeś?)
tripleee
10

Wygląda na to, że nie masz ustawionej flagi wykonywania dla uprawnień do plików, spróbuj:

chmod u+x program_name
Sam Roberts
źródło