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?
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.
Veamos un ejemplo con un archivo que no se puede ejecutar:
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í:
Resultado típico:
Las rutas están separadas por dos puntos. El sistema las recorre de izquierda a derecha buscando el archivo ejecutable solicitado.
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:
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:
También podemos buscar el archivo directamente:
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í:
Te puede aparecer este mensaje:
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:
La ruta ./ le dice a la terminal: "está aquí mismo, en este directorio".
Ejemplo práctico
¿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:
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:
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. PATHes una variable que contiene rutas separadas por dos puntos. El sistema busca en ellas de izquierda a derecha.- El orden de las rutas en
PATHes importante. - Si el archivo ejecutable está en el directorio actual, debes usar
./archivopara ejecutarlo. - Comandos útiles para saber dónde está un programa:
typewhichwhereis
- Modificar
PATHse hace (con cuidado) desde archivos como.bashrc. - Si un programa no está en
PATH, la terminal no lo va a encontrar.