bash Shell

Si nunca usas una «child Shell» Lee este post

Hola a todos! 

Esta vez vengo con un post sencillo, de iniciación pero creo que a algunos sysadmin puede serles de utlidad a la hora de trabajar con Jobs o script y ejecutarlos en una shell

Para los linuxeros siempre ha existido esa pasión por la shell. Ese pensamiento de «yo manejo la shell», «yo hago todo por consola» «Necesito aprender mas comandos»,ect. Nos sentimos orgullos de saber como hacer las cosas en una linea de codigo larga o un script para automatizar cosas y queremos estar en un nivel ideal trabajando en la Shell. Sin embargo, solo hay una ruta para llegar a esto y es:

Practicando

Pero el mundo real es un poco injusto con esto, ¿No creen? porque muchos necesitan trabajar y poner en practica lo que aprenden y otros quieren personas que ya tengan mucha experiencia o práctica. Asi que ¿Como podemos lidiar con esto? Les tengo el truco:

Implementa tus Propios Proyectos

Si quiere ser SRE pues implementa tus proyectos de SRE. Si quieres DevOps, configura tus CI/CD pipelines de un proyecto sencillo con tus imagenes contenerizadas, testea y automatiza. 

Pero bueno, de eso no venimos a hablar hoy. Lo que pasa es que aveces me dejo llevar por la escritura jajaj. 

Como el dermatologo «Al grano»

¿Que es una Shell?

Explicado de una manera simple: es una consola de linea de comandos (cli). Pero es mas que eso. Es una manera en la que ejecutamos programas de manera interactiva y compleja. Por eso conviene conocer como funcional la shell para poder saber como corregir algunos problemas determinados. 

No podria en un solo post abordar todo lo que abarca el tema de shell,pero si algunos aspectos básicos y muy utiles para el trabajo del dia a dia. 

Tipos de Shell

En el mundo de linux hay diferentes tipos de shell. A continuación expongo las mas comunes 

  • Bash
  • tsch 
  • zsh 
  • csh 
  • dash 
¿Sabias que existian todas estas? Bueno, lo importantes es conocerlas para entender si cierto script o comando no se está ejecutando. Puede ser que este en una shell que no está interprentando cierta información. Para validar en que tipo de shell está trabjando un usuario simplemente revisamos el archivo en /etc/passwd. 
				
					jukajo:x:1000:1000:Juan Pablo:/home/jukajo:/bin/bash

				
			

Por ejemplo, implementando una aplicación hace algun tiempo me ocurrio que a un usuario en particular no le entraba a la app por defecto. Entonces revisando el perfil del usuario, veo que estaba con la shell por defecto /sh y por tal motivo, no funcionaba. Entonces simplemente cambiamos sh por /sbin/bash y ¡listo! a trabajar. 


Relación entre Parent Shell y Child Shell

Cuando ejecutas el comando bash ( o cualquier otra shell E.g. sh,ozh) un nuevo programa de shell es creado. El cual llamamos Child shell o shell hijo. ¿Como nos damos cuenta?

Entra a tu shell y ejecuta un simple 

				
					ps -f 
				
			

Seguramente veras una imagen como esta 

La anterior imagen no nos muestra nada en concreto. Pero si ahora ejecutamos nuevamente el comando bash, veremos:

Noten como el PID 13836 es el proceso padre del segundo bash y a su vez el segundo bash con PID 14529 es el proceso padre que ejecuta el comando ps -f. 

Ahora podemos probar ejecutando varias veces el comando bash ¿Que sucederá? Ejecuta el siguiente comando para ver un arbol de procesos

				
					ps --forest 
				
			

Seguro obtendrás una imagen como esta 

Y seguramente ustedes ya se estarán preguntando, asi como yo lo hice al principio… 

Las Child Shells o tambien llamadas Subshells se usan a menudo para scripts de multiprocesamiento. sin embargo hay que tener en cuenta que esto puede ocacionar un aumento recursos de procesamiento y memoria. El uso de subshells viene a ser muy interesante cuando empiezas a usar  listas de procesos, co-procesos y pipes. Cada uno de estos metodos se pueden usar con shell interactivas. 

Por ejemplo tu puedes usar el modo background para ejecutar scripts o procesos de bash y luego analizar que recursos estan usando o cuando se van a ejecutar.  Dicho esto podemos utilizar el comando sleep.

				
					sleep 10 
				
			

Sleep acepta como parametro el numero de segundos que un proceso tiene que esperar para ser ejecutado. Podemos usarlo para introducir pausas en shell scripts. El comando anterior pausa la shell 10 segundos y de nuevo nos lleva al prompt. 

Y ¿Como lo ejecutamos como background? Simplemente adicionamos el simbolo &. 

				
					sleep 500&
				
			

Ahora, si le metemos el comando jobs, podemos ver que procesos estan en espera de ejecucion y ya se han ejecutado

Estos son simples ejemplos de como funcionan las subshell y los procesos en background. 

Los invito a investigar un poco mas sobre como usar estos conceptos con process-list- co-procesing.

bueno, eso fue todo por hoy. Espero les haya gustado o almenos les haya abierto el apetito a investigar mas de como funcionan nuestra shell.  Para mi es de gran ayuda si lo compartes en tus redes sociales o recomiendas en linkedin.

Un saludo, 

see you in the cloud.

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Jukajo's Blog

Leave a Comment