Ubuntu каже: "bash: ./program дозволено відмовлено" [закрито]


206

Я запускаю Ubuntu на комп'ютері 1 та на комп’ютері 2. Я склав програму C ++ на комп'ютері 1, і я можу виконати її з терміналу за допомогою ./program_name. Це працює добре.

Однак, коли я намагаюся зробити це на комп’ютері 2, він говорить: bash: ./program_name: permission denied

Що не так і що я можу з цим зробити?


7
У вас є дозволи на виконання progam_name?
fedorqui 'ТАК перестаньте шкодити'

1
Як ви перебрали програму з комп'ютера 1 на комп'ютер 2? Ви скопіювали виконуваний файл або перекомпілювали вихідний код? Який вихід команди "ls -l program_name"?
Eric Postpischil

2
Це здається, що це поза темою для SO, оскільки мова йде не про програмування, а про управління правами в Linux
nijansen

4
спробуйтеbash program_name
Nadjib Mami

10
Я написав .shфайл. Він відмовився виконувати це повідомлення про помилку. Я б сказав, що це, безумовно, тематика для StackOverflow. Я номінувався на повторне відкриття.
ArtOfWarfare

Відповіді:


392

chmod u+x program_name. Потім виконайте це.

Якщо це не працює, скопіюйте програму з USB-пристрою на рідну гучність системи. Потім chmod u+x program_nameна локальній копії та виконайте це.

Unix і Unix-подібні системи, як правило, не виконують програму, якщо вона не позначена дозволом на виконання. Те, як ви скопіювали файл з однієї системи в іншу (або змонтовано зовнішній том), можливо, вимкнуло дозвіл на виконання (як функцію безпеки). Команда chmod u+x nameдодає дозвіл користувачеві, якому належить файл, на його виконання.

Ця команда змінює лише дозволи, пов'язані з файлом; це не змінює засоби безпеки, пов'язані з усім томом. Якщо це контроль безпеки для гучності, що заважає виконанню (наприклад, noexecможе бути визначена опція для тома у fstabфайлі Unix , яка говорить про те, що не дозволяти виконувати дозвіл на файли на томі), тоді ви можете повторно встановити гучність з опціями, щоб дозволити виконання. Однак скопіювати файл у локальний том може бути швидшим та простішим рішенням.


3
Раніше я думав, що це станеться лише на не вроджених розділах Unix / Linux, таких як FAT32, і не відбудеться далі /tmp. Виявляється, мій tmpfs /tmpстраждає від тієї самої проблеми, і я повинен скопіювати виконуваний файл у справжній власний том, тобто мою домашню папку ~ у розділ ext4.
RayLuo

13
Я зіткнувся з цією проблемою сьогодні, тому я STFW, перший результат пошуку - у фіолетовому кольорі, це означає, що я читав це раніше. "Це багатообіцяючий знак", - говорив я сам і натискаю на результат пошуку. Це привело мене до цієї сторінки, ця відповідь, яка не працює в моєму випадку, а потім нарешті коментар, над яким працює. І тоді я помічаю, що коментар був написаний мною 2 місяці тому. Нічого собі, яке життя.
RayLuo

5
Вибачте за скарбничку на цьому запитанні ... Будь ласка, також подумайте, що можливо noexec є у fstab, який монтує диск без будь-яких пільг на виконання ... "Я чув", що "деякі люди" втратили досить багато часу на пошуки цього. ..
Simon Opelt

1
@Webman: chmodробить довговічні зміни. Якщо дозволи змінюються після використання їх chmodдля ввімкнення, то щось інше змінює їх. (Це може включати щось інше, як видалити файл і відтворити його, або об'єм, на який файл демонтується та ремонтується. Якщо том перераховується, є способи визначення дозволів для файлів за замовчуванням для зовнішніх томів, але це не виходить за рамки Я можу відповісти зараз.)
Eric Postpischil

2
@SimonOpelt "інші люди" вдячні
Метт Якобсен

32

Спробуйте це:

sudo chmod +x program_name
./program_name 

Дякую за вашу пораду. Я просто спробував це - але тепер він говорить bash: ./program_name не може виконати бінарний файл
Kian

Чи може це бути тому, що комп'ютер 2 - 32-бітний, а комп'ютер - 64-бітний? Напевно, можливо, я повинен просто скласти це на комп’ютері 2. Дякую за допомогу всім.
Кіан

Так, якщо скласти якусь програму в 64 біт і спробувати виконати в системі 32 біти, не виходить. вам потрібно перекомпілювати вихідний код на комп’ютер 2.
Vitor Villar

sudoяк правило, не потрібно, якщо програма не знаходиться в каталозі, де ви не маєте дозволу на запис (у такому випадку, як ви її встановили в першу чергу?)
tripleee

10

Здається, що у дозволах на файл не встановлено прапор виконання, спробуйте:

chmod u+x program_name
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.