O Ubuntu diz que "bash: ./program Permission denied" [fechado]

207

Estou executando o Ubuntu no computador 1 e no computador 2. Compilei um programa C ++ no computador 1 e posso executá-lo usando o terminal ./program_name. Corre bem.

No entanto, quando tento fazer isso no computador 2, ele diz: bash: ./program_name: permission denied

O que há de errado e o que posso fazer sobre isso?

Kian
fonte
7
Você tem permissões para executar progam_name?
fedorqui 'Então, pare de prejudicar'
1
Como você conseguiu o programa do computador 1 para o computador 2? Você copiou o executável ou recompilou o código-fonte? Qual é a saída do comando "ls -l program_name"?
Eric Postpischil
2
Este parece ser off topic para SO, porque não se trata de programação, mas Rights Management no Linux
nijansen
4
tentebash program_name
Nadjib Mami
10
Eu escrevi um .sharquivo Ele se recusou a executar com esta mensagem de erro. Eu diria que esse tópico é definitivamente sobre o StackOverflow. Eu nomeei para reabrir.
ArtOfWarfare

Respostas:

392

chmod u+x program_name. Então execute.

Se isso não funcionar, copie o programa do dispositivo USB para um volume nativo no sistema. Em seguida, chmod u+x program_namena cópia local e execute isso.

Os sistemas Unix e similares ao Unix geralmente não executam um programa, a menos que esteja marcado com permissão para execução. A maneira como você copiou o arquivo de um sistema para outro (ou montou um volume externo) pode ter desativado a permissão de execução (como um recurso de segurança). O comando chmod u+x nameadiciona permissão para o usuário que possui o arquivo para executá-lo.

Esse comando altera apenas as permissões associadas ao arquivo; ele não altera os controles de segurança associados a todo o volume. Se forem controles de segurança no volume que estão interferindo na execução (por exemplo, uma noexecopção pode ser especificada para um volume no fstabarquivo Unix , que diz para não permitir permissão de execução para arquivos no volume), você poderá remontar o volume com opções para permitir a execução. No entanto, copiar o arquivo para um volume local pode ser uma solução mais rápida e fácil.

Eric Postpischil
fonte
3
Eu achava que isso só aconteceria em partições nativas não Unix / Linux, como o FAT32, e não aconteceria /tmp. Acontece que meus tmpfs /tmpsofrem o mesmo problema, e eu tenho que copiar o arquivo executável em um volume nativo real, ou seja, minha pasta pessoal ~ em uma partição ext4.
RayLuo
13
Eu encontrei esse problema hoje, então, STFW, o primeiro resultado da pesquisa está na cor púrpura, o que significa que já li isso antes. "Esse é um sinal promissor", falei comigo mesmo e clique no resultado da pesquisa. Trouxe-me para esta página, esta resposta que não funciona no meu caso e, finalmente, o comentário acima, que funciona. E então percebo que esse comentário foi escrito por mim, há 2 meses. Uau, que vida.
RayLuo 27/08
5
Desculpe por pegar carona nesta pergunta / pergunta ... também pense que talvez o noexec esteja no fstab que monta a unidade sem privilégios de execução ... "Ouvi dizer que" algumas pessoas "perderam bastante tempo procurando por isso. ..
Simon Opelt
1
@ Webman: chmodfaz uma alteração durável. Se as permissões mudarem após o uso chmodpara habilitá-las, outra coisa será alterada. (Isso pode incluir outra coisa para excluir e recriar o arquivo ou o volume em que o arquivo está sendo desmontado e remontado. Se o volume estiver sendo remontado, existem maneiras de especificar permissões padrão para arquivos em volumes externos, mas isso está além do escopo Eu posso responder agora).
Eric Postpischil
2
@SimonOpelt "outras pessoas" são gratos
Matt Jacobsen
32

Tente o seguinte:

sudo chmod +x program_name
./program_name 
Vitor Villar
fonte
Obrigada pelo Conselho. Eu fiz apenas tentar isso - mas agora ele diz bash: ./program_name não pode executar o arquivo binário
Kian
Poderia ser porque o computador 2 é de 32 bits e o computador 1 é de 64 bits? Acho que talvez eu deva compilá-lo no computador 2. Obrigado por sua ajuda a todos.
Kian #
Sim, se você compilar algum programa em 64 bits e tentar executar em um sistema 32 bits, não funcionará. Você precisa recompilar o código fonte no computador 2.
Vitor Villar
sudoGeralmente não é necessário, a menos que o programa está em um diretório onde você não tem permissão de escrita (caso em que, como é que você instalá-lo lá em primeiro lugar?)
tripleee
10

Parece que você não tem o sinalizador de execução definido nas permissões de arquivo, tente:

chmod u+x program_name
Sam Roberts
fonte