¿Qué sucede cuando ejecuta un comando en Linux?

La mayoría de los usuarios de Linux a menudo desconocen el funcionamiento interno del sistema operativo. Es posible que esté ejecutando comandos de Linux en el shell durante mucho tiempo, pero ¿alguna vez se ha preguntado qué sucede detrás de escena cuando presiona Enter ?

Al final, tendrá una breve comprensión de cómo el shell procesa el comando escrito en Linux.

Procesando el comando

Cuando ingresa un comando, lo primero que hace el shell es dividir el comando completo en "tokens". Luego, el shell buscará un nombre de programa que pertenezca al primer token en la línea de comando.

Si no lo encuentra en ninguno de los directorios en la ruta de búsqueda definida en la variable de entorno $ PATH o en el directorio local con el operador . , O no es un alias de shell o una función de shell, el shell dará un error. . Si encuentra un comando válido, el shell revisará cada uno de los otros tokens y decidirá si es una variable, un parámetro de shell o un argumento del comando.

Si el shell determina que es una variable o un parámetro como el operador ~ para el directorio de inicio, el shell los expandirá o los reemplazará con sus valores originales en el comando.

Cuando el shell ha expandido cualquier parámetro o variable, pasará la cadena de comando al comando, ejecutando el programa con sus argumentos. El shell no determina si los argumentos son válidos. Ese es el trabajo del comando.

Ejecutando el comando

Cuando el shell lanza otro comando, ¿cómo vuelve al mismo indicador que estaba usando antes? El caparazón hace una copia de sí mismo, un proceso llamado bifurcación. Esta copia del shell se reemplaza a sí misma con el comando, con todos los argumentos que se procesaron anteriormente. Esto se conoce como "ejecutivo" y el proceso combinado se conoce como "fork-and-exec".

Por ejemplo, cuando ejecuta el comando ls , el proceso de shell se bifurcará utilizando el método fork () y creará otra instancia de shell. De los dos procesos de shell que se ejecutan en el sistema, el shell adicional ejecutará ls usando la función exec () , transformándose en una instancia del comando ls.

Mientras tanto, el shell original espera a que se complete el comando. Es por eso que puede usar el control de trabajos para suspender trabajos y hacer que los trabajos se ejecuten en segundo plano en el shell.

Relacionado: ¿Qué es un proceso en Linux?

Informar el estado de salida

Los comandos de Linux informan si se ejecutaron correctamente o no a través de su estado de salida. Como sugiere el nombre, los programas informan de su estado de salida cuando terminan de ejecutarse. ¿Hacen esto a través del $? variable de entorno, que contiene el estado de salida del último comando de ejecución.

Por convención, un estado de salida de 0 indica una ejecución exitosa, mientras que cualquier otro valor que no sea 0 generalmente significa un error. Su shell también puede indicar un estado de salida distinto de cero en la línea de comando, dependiendo de cómo esté configurado su indicador.

La captura de pantalla anterior es un ejemplo que muestra un indicador Zsh personalizado que muestra un estado de salida de error de 127 debido a un comando que no existe.

Ahora ya sabe cómo funcionan los comandos de Linux

Ahora que sabe cómo el shell de Linux procesa un comando, bifurca y ejecuta en sí mismo, y cómo los programas informan su estado de salida, puede hacer uso de la línea de comando de manera más efectiva.

Varios shells de Linux están disponibles para los usuarios de forma gratuita. Si bien cada uno de ellos realiza más o menos el mismo trabajo, son diferentes en muchos aspectos. Puede intentar instalar algunos de los shells en su sistema y decidir por sí mismo cuál se adapta mejor a sus necesidades.