Fundamentos de la línea de comandos

Teoría: Ejecución de programas

Cuando trabajamos con la terminal y escribimos comandos como ls, cd o cp, lo que estamos haciendo realmente es pedirle al sistema que busque y ejecute un archivo. Sí, un simple archivo que tiene dentro instrucciones que la computadora puede entender.

Pero, ¿cómo sabe el sistema dónde buscar ese archivo? ¿Y por qué a veces decimos un comando y aparece el error command not found? ❌ Vamos a responder esas preguntas paso a paso, como si estuviéramos explorando juntos un pequeño misterio.


¿Qué es un programa en sistemas Unix?

Un programa, como ls (que usamos para listar archivos), no es más que un archivo guardado en el disco.

Para que podamos ejecutarlo desde la terminal, este archivo debe tener permisos especiales, llamados permisos de ejecución. Eso lo marcamos usualmente con la letra x en los permisos del archivo.

Recordemos: si un archivo no es ejecutable, no se puede correr desde la terminal. Intentarlo te dará un error.

Veamos un ejemplo con un archivo que no se puede ejecutar:

bash: archivo: command not found

Cómo encuentra la terminal un comando: la variable PATH

Cuando escribimos un comando, como ls, la terminal no adivina dónde está ese archivo. Usa una variable especial llamada PATH. Esta variable contiene una lista de carpetas donde la terminal busca los programas que queremos ejecutar.

Puedes ver qué contiene así:

echo $PATH

Resultado típico:

/home/usuario/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin

Las rutas están separadas por dos puntos. El sistema las recorre de izquierda a derecha buscando el archivo ejecutable solicitado.

Si existen varios archivos con el mismo nombre en diferentes carpetas del PATH, el primero que encuentre será el que el sistema use. Por eso, cambiar el orden puede afectar qué versión de un programa se ejecuta.

¿Qué pasa si no está en PATH?

Si tratamos de ejecutar un programa que no está en ninguna de las carpetas listadas en PATH, nos saldrá un error como este:

wrongname
bash: wrongname: command not found

Significa simplemente que la terminal no encontró el archivo.


¿Dónde está un programa específico?

Si queremos saber exactamente dónde está ubicado un programa, hay algunos comandos útiles:

ComandoResultado
type cpcp is /bin/cp – Dice si es un comando incorporado o un archivo y su ubicación
which cp/bin/cp – Muestra la primera coincidencia en el PATH
whereis cpcp: /bin/cp /usr/share/man/man1/cp.1 – Muestra todas las ubicaciones conocidas del programa

También podemos buscar el archivo directamente:

ls -al /bin | grep cp

Este comando listará el archivo y mostrará sus permisos, tamaño y otros detalles.


Ejecutar programas fuera del PATH

Supongamos que tienes un archivo ejecutable en una carpeta que no está en el PATH, como uno recién descargado o hecho por ti.

Estás en tu carpeta actual (/home/usuario/test) y tienes un archivo ejecutable llamado mi_script. Si tratas de ejecutarlo así:

mi_script

Te puede aparecer este mensaje:

bash: mi_script: command not found

Eso pasa porque la terminal no busca en el directorio actual por razones de seguridad.

¿Cómo se soluciona?

Debes indicarle la ruta explícita al archivo, como:

./mi_script

La ruta ./ le dice a la terminal: "está aquí mismo, en este directorio".

Ejemplo práctico

pwd
/home/usuario/test

ls -al
-rwxr-xr-x 1 usuario usuario    60 fecha executable

./executable
Hello from executable!

¿Dónde se guardan los archivos ejecutables?

Casi todos los programas que instalamos colocan sus archivos ejecutables dentro de carpetas estandarizadas como:

  • /usr/bin/
  • /usr/local/bin/
  • /bin/

Estas carpetas ya están en PATH, lo que permite ejecutar los comandos sin tener que dar su ruta completa.

A veces también se usan carpetas como ~/.local/bin/ para programas instalados solo para un usuario.


Modificar la variable PATH (con precaución)

Hay ocasiones donde instalamos un programa y necesitamos decirle a nuestro sistema dónde encontrarlo. En ese caso podemos modificar la variable PATH.

Aunque no es algo que debamos hacer siempre, si es necesario, hacemos lo siguiente:

1. Editar el archivo de configuración

Busca en tu directorio personal los archivos:

  • .bashrc
  • .bash_profile
  • .profile

Edita uno de ellos (normalmente .bashrc) y agrega al final esta línea:

export PATH=$PATH:/ruta/a/tu/directorio

Sustituye /ruta/a/tu/directorio con la carpeta que contiene tus archivos ejecutables.

2. Recargar o reiniciar la terminal

Después de guardar los cambios, puedes cerrar y volver a abrir la terminal o escribir:

source ~/.bashrc

Así los cambios tienen efecto de inmediato.


Resumen

  • Un programa es un archivo ejecutable.
  • Para que el sistema "encuentre" un comando, debe estar en una carpeta listada en la variable PATH.
  • PATH es una variable que contiene rutas separadas por dos puntos. El sistema busca en ellas de izquierda a derecha.
  • El orden de las rutas en PATH es importante.
  • Si el archivo ejecutable está en el directorio actual, debes usar ./archivo para ejecutarlo.
  • Comandos útiles para saber dónde está un programa:
    • type
    • which
    • whereis
  • Modificar PATH se hace (con cuidado) desde archivos como .bashrc.
  • Si un programa no está en PATH, la terminal no lo va a encontrar.