2013-09-23 6 views
104

Sto eseguendo Ubuntu su computer 1 e computer 2. Ho compilato un programma C++ sul computer 1 e posso eseguirlo dal terminale utilizzando ./program_name. Funziona bene.Ubuntu dice "bash: ./program Autorizzazione negata"

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

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

+7

Avete autorizzazioni per eseguire 'progam_name'? – fedorqui

+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"? –

+0

Come lo trovo? Conosco la password di root se questo aiuta. L'ho trasportato tramite chiavetta USB. – Kian

risposta

235

chmod u+x program_name. Quindi eseguilo.

Se ciò non funziona, copiare il programma dal dispositivo USB in un volume nativo sul sistema. Quindi chmod u+x program_name sulla copia locale ed eseguirlo.

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

Questo comando modifica solo le autorizzazioni associate al file; non modifica i controlli di sicurezza associati all'intero volume. Se sono presenti controlli di sicurezza sul volume che interferiscono con l'esecuzione, è possibile rimontare il volume con le opzioni per consentire l'esecuzione. Tuttavia, copiare il file su un volume locale potrebbe essere una soluzione più rapida e semplice.

+0

Pensavo che questo sarebbe successo solo su partizioni native non Unix/Linux come FAT32, e non si sarebbe verificato in '/ tmp'. Risulta che il mio tmpfs '/ tmp' subisce lo stesso problema, e devo copiare il file eseguibile in un vero volume nativo, cioè la mia cartella home ~ in una partizione ext4. – RayLuo

+1

I, ho riscontrato questo problema oggi, quindi I STFW, il primo risultato di ricerca è in viola, il che significa che l'ho letto prima. "Questo è un segno promettente", ho parlato a me stesso, e quindi 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 ho notato che il commento è stato scritto da me, 2 mesi fa. Wow, che vita. – RayLuo

+0

Ci scusiamo per aver portato su questo Q/A ... per favore, pensa anche che forse ** noexec ** sia in ** fstab ** che monta l'unità senza privilegi di esecuzione ... "Ho sentito" che "alcune persone" hanno perso un bel po 'di tempo a cercarlo ... –

17

Prova questo:

sudo chmod +x program_name 
./program_name 
+0

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

+0

Potrebbe essere perché il computer 2 è a 32 bit e il computer 1 a 64 bit? Suppongo che forse dovrei semplicemente compilarlo sul computer 2. Grazie per il tuo aiuto a tutti. – Kian

+0

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. –

8

suona come voi non hanno la bandiera esecuzione impostato sui permessi dei file, provare:

chmod u+x program_name