7.3 Tengo un ejecutable que no quiere ejecutarse.

Imagen de ElSanto

A todos nos a ocurrido alguna vez, que al intentar ejecutar un comando/programa hemos obtenido como respuesta command not found.

Esto significa que el shell/intérprete de comandos no encontró el comando que queríamos ejecutar. Las causas más comunes suelen ser:

  • El ejecutable no está en un subdirectorio incluido en el $ PATH.
    La solución es escribir el ejecutable con la ruta completa ó cambiar al directorio donde este el programa y escribir ./programa, donde programa es el nombre del ejecutable.

    [b]NOTA:[/b] Algunos usuarios tienen el sistema configurado para que no sea necesario esto último que hemos explicado. Para ello tienen incluido en el $ PATH ".". Esto hará que podamos ejecutar cualquier programa independientemente del directorio donde se encuentre. Esta práctica es totalmente desaconsejable por los problemas de seguridad que puede dar.

  • El comando/programa que habeis escrito no existe.
  • Faltan variables de entorno.

    Busca ficheros de documentación del programa, o prueba comando --help, para ver si hace falta añadir variables de entorno, para el uso del mismo.

Otra respuesta que podemos obtener al intentar ejecutar un comando/programa es Permission denied.

El error es bien claro, el ejecutable existe pero no tenemos permiso para ejecutarlo, comprueba que lo podemos ejecutar, es decir, tiene una x en el grupo al que pertenezcamos: dueño, grupo, u otros. Mas información sobre permisos en la subsección ¿Cómo se cambian los permisos de ficheros y directorios?.

Por ultimo, podemos obtener un error en el que se nos informa que cierta librería no se encuentra.

Ejecuta el comando:

[asimov@asimovI bin] ldd comando

Esto mostrará todas las librerías compartidas que el comando/programa utiliza/necesita para funcionar.

Si no tenemos algunas, las tenemos que instalar, pero si las tenemos tenemos que comprobar que /sbin/ld (el cargador de librerías dinámicas) sabe donde están, para ello hemos de añadir una entrada en el fichero /etc/ld.so.conf que consiste en poner el directorio donde esta la librería, luego ejecutamos /sbin/ldconfig -D para cerciorarnos que la lee.