Ubuntu dice "bash: ./program Permiso denegado" [cerrado]

207

Estoy ejecutando Ubuntu en la computadora 1 y la computadora 2. Compilé un programa C ++ en la computadora 1, y puedo ejecutarlo desde la terminal usando ./program_name. Funciona bien

Sin embargo, cuando trato de hacer esto en la computadora 2, dice: bash: ./program_name: permission denied

¿Qué pasa y qué puedo hacer al respecto?

Kian
fuente
77
¿Tienes permisos para ejecutar progam_name?
Fedorqui 'SO deja de dañar'
1
¿Cómo llegaste el programa de la computadora 1 a la computadora 2? ¿Copiaste el ejecutable o volviste a compilar el código fuente? ¿Cuál es el resultado del comando "ls -l nombre_programa"?
Eric Postpischil
2
Esto parece ser fuera de tema para el SO, ya que no se trata de la programación, pero la gestión de derechos en Linux
nijansen
44
intentarbash program_name
Nadjib Mami
10
Escribí un .sharchivo Se negó a ejecutar con este mensaje de error. Yo diría que esto definitivamente es sobre el tema para StackOverflow. He nominado para la reapertura.
ArtOfWarfare

Respuestas:

392

chmod u+x program_name. Entonces ejecútalo.

Si eso no funciona, copie el programa desde el dispositivo USB a un volumen nativo en el sistema. Luego chmod u+x program_nameen la copia local y ejecutar eso.

Los sistemas Unix y similares a Unix generalmente no ejecutarán un programa a menos que esté marcado con permiso para ejecutarse. La forma en que copió el archivo de un sistema a otro (o montó un volumen externo) puede haber desactivado el permiso de ejecución (como característica de seguridad). El comando chmod u+x nameagrega permiso para que el usuario propietario del archivo lo ejecute.

Ese comando solo cambia los permisos asociados con el archivo; no cambia los controles de seguridad asociados con todo el volumen. Si son los controles de seguridad en el volumen los que interfieren con la ejecución (por ejemplo, noexecse puede especificar una opción para un volumen en el fstabarchivo Unix , que dice no permitir permisos de ejecución para archivos en el volumen), entonces puede volver a montar el volumen con opciones para permitir la ejecución. Sin embargo, copiar el archivo a un volumen local puede ser una solución más rápida y fácil.

Eric Postpischil
fuente
3
Solía ​​pensar que esto solo sucedería en particiones nativas no Unix / Linux como FAT32, y no sucedería en /tmp. Resulta que mi tmpfs /tmpsufre el mismo problema, y ​​tengo que copiar el archivo ejecutable en un volumen nativo real, es decir, mi carpeta de inicio ~ en una partición ext4.
RayLuo
13
Encontré este problema hoy, así que STFW, el primer resultado de búsqueda es de color púrpura, lo que significa que lo he leído antes. "Esa es una señal prometedora", me dije, y luego hice clic en ese resultado de búsqueda. Me trajo a esta página, esta respuesta que no funciona en mi caso, y finalmente el comentario anterior que funciona. Y luego noto que ese comentario fue escrito por mí, hace 2 meses. Wow, que vida.
RayLuo
55
Perdón por aprovechar este Q / A ... por favor también piense que tal vez noexec está en fstab que monta el disco sin ningún privilegio de ejecución ... "Escuché" que "algunas personas" perdieron bastante tiempo buscando eso. ..
Simon Opelt
1
@Webman: chmodrealiza un cambio duradero. Si los permisos cambian después de usarlos chmodpara habilitarlos, entonces algo más los está cambiando. (Esto puede incluir algo más, eliminar el archivo y volver a crearlo o el volumen en el que se desmonta y vuelve a montar el archivo. Si se vuelve a montar el volumen, hay formas de especificar permisos predeterminados para archivos en volúmenes externos, pero eso está fuera del alcance Puedo responder ahora.)
Eric Postpischil
2
@SimonOpelt "otras personas" están agradecidas
Matt Jacobsen
32

Prueba esto:

sudo chmod +x program_name
./program_name 
Vitor Villar
fuente
Gracias por su consejo. Acabo de intentarlo, pero ahora dice bash: ./program_name no puede ejecutar el archivo binario
Kian
¿Podría ser porque la computadora 2 es de 32 bits y la computadora 1 es de 64 bits? Supongo que tal vez debería compilarlo en la computadora 2. Gracias por su ayuda a todos.
Kian
Sí, si compila algún programa en 64 bits e intenta ejecutarlo en un sistema de 32 bits, no funciona. necesita volver a compilar el código fuente en la computadora 2.
Vitor Villar
sudogeneralmente no es necesario, a menos que el programa esté en un directorio donde no tenga permiso de escritura (en cuyo caso, ¿cómo lo instaló allí en primer lugar?)
tripleee
10

Parece que no tiene el indicador de ejecución establecido en los permisos del archivo, intente:

chmod u+x program_name
Sam Roberts
fuente