Ubuntu говорит: «bash: ./program В доступе отказано» [закрыто]


207

Я запускаю Ubuntu на компьютере 1 и компьютере 2. Я скомпилировал программу C ++ на компьютере 1, и я могу выполнить ее с терминала, используя ./program_name. Работает нормально.

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

Что не так и что я могу с этим сделать?


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

1
Как вы получили программу с компьютера 1 на компьютер 2? Вы скопировали исполняемый файл или перекомпилировали исходный код? Что выводится командой «ls -l program_name»?
Эрик Постпишил

2
Похоже, что это не тема для SO, потому что речь идет не о программировании, а об управлении правами в Linux
nijansen

4
попробуйтеbash program_name
Наджиб Мами,

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
Извините за совладание с этим Q / A ... пожалуйста, подумайте также, что, возможно, noexec находится в fstab, который монтирует диск без каких-либо привилегий на выполнение ... "Я слышал", что "некоторые люди" потеряли немало времени в поисках этого. ..
Саймон

1
@Webman: chmodделает длительные изменения. Если разрешения меняются после того, как вы их используете chmod, то что-то еще меняет их. (Это может включать в себя что-то еще, удаляющее файл и воссоздающее его, или том, на котором файл монтируется и монтируется. Если том перемонтируется, существуют способы указать разрешения по умолчанию для файлов на внешних томах, но это выходит за рамки Я могу ответить сейчас.)
Эрик Постпишил

2
@SimonOpelt "другие люди" благодарны
Мэтт Якобсен

32

Попробуй это:

sudo chmod +x program_name
./program_name 

Спасибо за ваш совет. Я только что попробовал это - но теперь он говорит, что bash: ./program_name не может выполнить двоичный файл
Kian

Может ли это быть потому, что компьютер 2 является 32-разрядным, а компьютер 1 - 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.