Explora cómo ejecutar comandos en Linux: desde programas y scripts hasta funciones y alias. Conoce las diferencias y optimiza tu experiencia en la terminal.
¿Qué sucede cuando ejecutas un comando de Linux? Este acto simple puede parecer directo, pero en realidad pueden ocurrir muchas cosas diferentes, dependiendo de si estás ejecutando un programa ejecutable, un script de shell, un comando interno del shell, una función definida por el usuario o un alias.
Los diferentes tipos de comandos de Linux
Un programa (binario o ejecutable) es un archivo en disco en algún lugar, en un formato reconocido. Los formatos comunes incluyen ELF en Linux y Mach-O en Mac. El formato es uno de bajo nivel, amigable para la máquina, que el shell puede pasar al núcleo para ejecutar.
Un script de shell es una forma de programa mucho más avanzada, escrita en texto legible por humanos. Un script de shell puede ejecutar otros comandos y puede estar escrito en un lenguaje interpretado como Perl o Python.
Un comando builtin es interno al shell, por lo que siempre está disponible y generalmente se ejecuta a un nivel bajo, para realizar operaciones que afectan directamente al propio shell.
Una función de shell es como un mini script de shell, empaquetando un conjunto de comandos bajo un solo nombre. Las funciones de shell suelen estar cargadas para que siempre estén disponibles por su nombre.
Un alias es un nombre alternativo para cualquiera de los anteriores. Puedes crear un alias corto de un comando más largo para ahorrar tiempo y esfuerzo al ejecutar tareas comunes.
El orden en que un shell como bash busca estos tipos de comandos es importante. Para decirlo simplemente, bash intenta los comandos en este orden: alias, función, builtin, programa/script.
1 Ejecutando un programa ejecutable
El tipo de comando más familiar es un archivo de programa ejecutable. Muchos de los programas más comunes son parte del estándar POSIX, lo que significa que deberían estar disponibles en la mayoría de los sistemas Unix o similares a Unix, incluyendo Linux y macOS. Ejemplos de dichos comandos incluyen cat, diff y vi.
Otros programas de línea de comandos, como Apache, Neofetch o tree, pueden necesitar ser instalados porque generalmente no están incluidos en una distribución por defecto. Pero, al igual que los programas de comando POSIX, se ejecutarán a través de un solo archivo de programa en algún lugar de tu disco.
Hay dos formas comunes de ejecutar un programa. Primero, puedes escribir una ruta a un archivo de programa, como ./myprog o /usr/bin/awk. Si la primera parte de tu comando contiene alguna barra inclinada, el shell intentará encontrar un archivo en la ruta correspondiente. Por ejemplo, puedes ejecutar un programa en /bin/cat así:
/bin/cat myfileEl shell luego verificará si hay un programa ejecutable en /bin/cat, y lo ejecutará si existe.
En Linux, los programas ejecutables generalmente no tienen extensión de archivo, por lo que un comando como "grep" está contenido en un archivo llamado grep. Esto es solo una convención, porque es conveniente hacer que los ejecutables sean reconocibles solo por su nombre de archivo. Sin embargo, si realmente lo deseas, eres libre de nombrar tus ejecutables como quieras, como "myprog.exe" o "myprog.RUNME".
El segundo caso ocurre cuando escribes un nombre de programa sin una ruta; por ejemplo:
cat myfileCon un sistema que está debidamente configurado, esto debería tener el mismo efecto que antes, porque el shell localizará el mismo programa cat. Lo hace verificando una variable de entorno especial llamada PATH, que se ve algo así:
Esta es una lista separada por dos puntos de rutas que el shell buscará para localizar un programa. El orden es importante, ya que puedes tener dos archivos con el mismo nombre en diferentes ubicaciones. Por ejemplo, si tienes un archivo /usr/bin/grep y un archivo /bin/grep, el PATH anterior hará que el shell ejecute la versión de /usr/bin. Este sistema te permite anular un comando del sistema con uno personalizado que sea más específico para tus necesidades, lo cual puede ser muy útil.
2 Ejecutando un script de shell
Un script de shell se ejecuta de manera ligeramente diferente a un programa ejecutable, y es un tipo de archivo muy diferente. Un script de shell simple se ve así:
#!/bin/sh
echo Solo un simple y trivial script de shellLa primera línea se conoce como una línea "shebang" o "hash-bang", llamada así por la combinación de los caracteres # y !. Esta es una instrucción especial que le dice al shell qué intérprete usar para el resto del script. En el caso anterior, es el propio shell.
/bin/sh.
El resto del script es un programa de texto que el intérprete entiende. En este caso, la shell puede ejecutar comandos como echo de la misma manera que lo harías si los tecleas en la línea de comandos.
Por otra parte, un script de shell es muy similar a un programa ejecutable, y tu shell lo buscará utilizando la variable PATH de la misma manera. Para ambos, programas y scripts de shell, es importante notar que los permisos en el archivo correspondiente afectarán cómo lo ejecutas. Con el permiso de ejecución configurado, puedes ejecutar el programa tecleando su nombre o ruta. Pero si el permiso de ejecución no está configurado, verás un error:
Siempre puedes ejecutar dicho archivo pasando su nombre como un argumento a un intérprete apropiado. Por ejemplo, puedes ejecutar un script de shell así:
sh myscript.shIncluso puedes ejecutar un ejecutable de esta manera, pero necesitarás investigar un poco primero. El comando file proporciona información sobre el tipo de archivo, incluidos su intérprete:
En este caso, puedes ejecutar el binario pwd utilizando el programa /lib/ld-linux-aarch64.so.1:
3 Ejecutando un builtin en la shell
Algunos comandos son tan fundamentales para la naturaleza de la shell que necesitan operar de una manera ligeramente diferente. Estos se llaman builtins porque son, efectivamente, parte de la propia shell.
Los builtins suelen ser de bajo nivel y comandos que usas con frecuencia: cd, echo y kill son ejemplos comunes. A diferencia de los programas y scripts de shell, estos comandos no corresponden a un archivo particular porque son parte de la shell misma, compilados en el ejecutable de la shell.
Algunos sistemas pueden incluir scripts envoltorio que ejecutan builtins. Por ejemplo, en mi sistema macOS, hay un /usr/bin/cd script que utiliza el comando builtin para ejecutar el correspondiente builtin. Esto es por compatibilidad POSIX, y puedes ignorar la versión del script con seguridad.
Los builtins pueden ser difíciles de aprender porque o no tienen entrada manual (por ejemplo, en Ubuntu Linux) o todos tienen una gran página de manual compartida (macOS). El programa tldr es una excelente manera de descubrir más sobre los builtins.
Por razones similares, los builtins suelen soportar muchas menos opciones de línea de comandos que los programas completamente desarrollados. Por ejemplo, cd generalmente soportará solo dos opciones, bastante obscuras: -L (para seguir enlaces simbólicos) y -P (para evitar enlaces simbólicos). Esto significa que, lamentablemente, opciones como -h o --help no son soportadas.
4 Llamando a una función en la shell
Un comando también puede ser una llamada a una función. En cualquier momento durante una sesión, puedes cargar o definir una función usando esta sintaxis (en bash):
function_name() {
comandos
}Alternativamente, puedes usar una sintaxis que inserta la palabra clave “function” antes del nombre de la función y omite los paréntesis después de ella:
function function_name {
comandos
}Luego puedes llamar a una función tecleando su nombre, seguido de cualquier argumento. Por ejemplo, tengo la siguiente función auxiliar definida en un archivo:
mkd () {
mkdir -p "$@"
cd "$@" || exit
}Luego cargo este archivo desde el script de control de ejecución de mi shell (~/.zshrc), y puedo ejecutar este comando para crear un nuevo directorio y cambiarme inmediatamente a él:
mkd new_dirPuedes llamar a tal función en la línea de comandos cuando lo desees. También puedes llamarla desde scripts, pero recuerda que necesita ser cargada (usa el builtin source, o su equivalente ., para hacerlo).
5 Usando un alias
Un alias es una conveniencia que te ahorra teclear nombres de comandos largos u opciones comunes. Por ejemplo, en mi sistema, tengo un alias para asegurar que las listas de archivos estén en color, con sufijos de tipo:
ls='ls -GF'Ahora, si tecleo solo “ls,” se ejecuta el comando “ls -GF” en su lugar.
Puedes crear un alias en cualquier momento, usando el comando builtin alias, por ejemplo:
alias ls="ls -GF"Nota que se requieren comillas cuando ejecutas alias, si la cadena de sustitución contiene espacios. Puedes ver todos los alias ejecutando alias, y puedes eliminar un alias con.
el comando unalias. Nuevamente, querrás añadir alias a un archivo de inicio, como ~/.zshrc o ~/.bashrc, si deseas que se apliquen en todas las sesiones.
Si deseas encontrar artículos similares a ¿Qué estás ejecutando? Programas, scripts, comandos internos, funciones y alias de Linux, te sugerimos revisar la categoría Linux.

Deja una respuesta