Ubuntu dice "bash: ./program permesso negato" [chiuso]


207

Sto eseguendo Ubuntu sul computer 1 e sul computer 2. Ho compilato un programma C ++ sul computer 1 e posso eseguirlo dal terminale usando ./program_name. Funziona bene.

Tuttavia, quando provo a farlo sul computer 2, si dice: bash: ./program_name: permission denied

Cosa c'è che non va e cosa posso fare al riguardo?


7
Hai i permessi per eseguire progam_name?
fedorqui "SO smettere di danneggiare"

1
Come hai ottenuto il programma dal computer 1 al computer 2? Hai copiato l'eseguibile o ricompilato il codice sorgente? Qual è l'output del comando "ls -l nome_programma"?
Eric Postpischil,

2
Questo sembra essere fuori tema per SO, perché non si tratta di programmazione ma di gestione dei diritti su Linux
nijansen,

4
provarebash program_name
Nadjib Mami l'

10
Ho scritto un .shfile Si è rifiutato di eseguire con questo messaggio di errore. Direi che questo è decisamente in argomento per StackOverflow. Ho nominato per la riapertura.
ArtOfWarfare il

Risposte:


392

chmod u+x program_name. Quindi eseguirlo.

Se il problema persiste, copiare il programma dal dispositivo USB su un volume nativo sul sistema. Quindi chmod u+x program_namesulla copia locale ed eseguirlo.

In genere i sistemi Unix e Unix non eseguiranno un programma a meno che non sia contrassegnato con il permesso di esecuzione. Il modo in cui hai copiato il file da un sistema a un altro (o montato un volume esterno) potrebbe aver disattivato l'autorizzazione di esecuzione (come funzione di sicurezza). Il comando chmod u+x nameaggiunge l'autorizzazione all'utente che possiede il file per eseguirlo.

Tale comando modifica solo le autorizzazioni associate al file; non modifica i controlli di sicurezza associati all'intero volume. Se sono i controlli di sicurezza sul volume che interferiscono con l'esecuzione (ad esempio, anoexec possibile specificare un'opzione per un volume nel fstabfile Unix , che dice di non consentire l'autorizzazione di esecuzione per i file sul volume), quindi è possibile rimontare il volume con opzioni per consentire l'esecuzione. Tuttavia, la copia del file su un volume locale può essere una soluzione più rapida e semplice.


3
Pensavo che questo sarebbe accaduto solo su partizioni native non Unix / Linux come FAT32, e non sarebbe accaduto /tmp. Si scopre che il mio tmpfs /tmpsoffre dello stesso problema e devo copiare il file eseguibile in un volume nativo reale, cioè la mia cartella home ~ in una partizione ext4.
RayLuo,

13
Ho riscontrato questo problema oggi, quindi STFW, il primo risultato della ricerca è di colore viola, il che significa che l'ho letto prima. "Questo è un segno promettente", ho parlato con me stesso, quindi ho fatto clic su quel risultato di ricerca. Mi ha portato a questa pagina, questa risposta che non funziona nel mio caso, e infine il commento sopra che funziona. E poi noto che quel commento è stato scritto da me, 2 mesi fa. Wow, che vita.
RayLuo,

5
Ci scusiamo per il piggybacking su questo Q / A ... per favore, pensa anche che forse noexec è in fstab che monta il disco senza alcun privilegio di esecuzione ... "Ho sentito" che "alcune persone" hanno perso un bel po 'di tempo a cercarlo. ..
Simon Opelt,

1
@Webman: chmodapporta un cambiamento duraturo. Se i permessi cambiano dopo chmodaverli usati per abilitarli, qualcos'altro li sta cambiando. (Ciò può includere qualcos'altro che elimina il file e ricrealo o il volume su cui il file è in fase di smontaggio e rimontaggio. Se il volume viene rimontato, ci sono modi per specificare le autorizzazioni predefinite per i file su volumi esterni, ma questo va oltre l'ambito Ora posso rispondere.)
Eric Postpischil,

2
@SimonOpelt "altre persone" sono grati
Matt Jacobsen il

32

Prova questo:

sudo chmod +x program_name
./program_name 

Grazie per il tuo consiglio. L'ho appena provato, ma ora dice bash: ./program_name non può eseguire il file binario
Kian

Potrebbe essere perché il computer 2 è a 32 bit e il computer 1 è a 64 bit? Immagino che dovrei semplicemente compilarlo sul computer 2. Grazie per il vostro aiuto a tutti.
Kian,

Sì, se si compila un programma in 64 bit e si tenta di eseguire in un sistema a 32 bit, non funziona. è necessario ricompilare il codice sorgente sul computer 2.
Vitor Villar

sudoin genere non è necessario, a meno che il programma non si trovi in ​​una directory in cui non si dispone dell'autorizzazione di scrittura (nel qual caso, come è stato installato lì in primo luogo?)
tripleee

10

Sembra che tu non abbia il flag di esecuzione impostato sui permessi dei file, prova:

chmod u+x program_name
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.