educación, informática y demás

25.03 - Automatizacion Scripts I

Enredando con el sistema: python y demás

Vamos a jugar un poco con variables de entorno, con ficheros ejecutables, con lenguajes de programación interpretados, etc.

Si nos fijamos un poco en los ficheros

Vamos a probar un par de cosillas. Primero vamos a actualizar la lista de paquetes disponibles en los servidores de software configurados en nuestro sistema. Vamos, que ejecutemos apt update como root.

Una vez hemos descargado la lista de paquetes de software disponible de los repositorios vamos a probar a instalar python 3.

No tenemos más paquetes disponibles de python3

Vamos a hacer una prueba simple

Acabamos de escribir un programa en un LP de alto nivel llamado Python. Este LPAN es interpretado, es decir necesita de un interprete para que se pueda ejecutar.

Un interprete es un programa que es capaz de ejecutar programas escritos en un lenguaje de programación. En nuestro caso, el interprete de python será un programa que es capaz de entender y ejecutar líneas de código escritas en python.

Un interprete de comandos es un programa capaz de interpretar y ejecutar comandos.

Entonces, ¿cómo ejecutamos el código que acabamos de escribir?

Para ejecutar el programa escrito en python tenemos que ejecutar el interprete de comandos y pasarle como parámetro la ruta del fichero con el código fuente del programa.

El código fuente de un programa es el programa expresado en el lenguaje de programación utilizado para crearlo.

En el caso de un lenguaje de programación interpretado el código fuente del programa es lo que necesitamos para ejecutarlo, por supuesto junto con el interprete del lenguaje de programación. Si el lenguaje de programación fuera compilado, necesitamos compilar el programa para obtener una versión en código máquina ejecutable, binario, que se pueda ejecutar en el CPU.

Como ya sabemos, en bash, tenemos la opción de escribir la ruta del interprete a utilizar para ejecutar un programa en la primera línea del fichero como un comentario. Para ello utilizamos #! seguido de la ruta del interprete.

Vamos a añadir un par de cosillas a nuestro programa para poder jugar luego con él en otra publicación sobre procesos.

Supongamos que este programa en realidad es super útil, lo vamos a utilizar para administrar nuestro sistema. ¿Cómo podemos ejecutarlo de forma rápida y desde cualquier sitio?

Variable de entorno PATH

La mejor forma de aprender qué es y para qué vale la variable PATH es usándola. Vamos a mostrar en pantalla el contenidos de la variable de entorno PATH en nuestro sistema.

GNU/Linux es case sensitive, es decir distingue entre minúsculas y mayúsculas. De ahí que sea importante escribirla en mayúsculas.

Vamos a mirar en Windows.

También tenemos la variable de entorno PATH, aunque en este caso no es case sensitive.

La variable de entorno PATH contiene una lista ordenada de rutas de directorios dónde el SO (interprete de comandos en nuestro caso) buscará el comando o aplicación a ejecutar.

Veamos algunos ejemplos.

ls es un programa. cuando ejecutamos ls desde la terminal, lo que hace el SO es buscar ese programa en la lista de directorios almacenada en la variable de entorno PATH.

Como el programa ls está almacenado en /usr/bin, y este directorio está en el PATH, entonces la shell bash es capaz de localizarlo y ejecutarlo.

¿Todos los comandos de bash son programas?. Si, todos son programas, pero no todos se guardan en el sistema de ficheros. Algunos comandos son programas internos del sistema que están en memoria.

Con lo que hemos visto, podemos dejar disponible nuestro programa hecho en python de forma que se pueda ejecutar desde cualquier lugar o directorio de trabajo tan solo escribiendo su nombre.

Ahora para ejecutarlo tan solo tenemos que escribir el nombre del ejecutable.

Si le damos al tabulador para que auto complete nos encontramos con esto.

Vamos a cambiar de directorio

¿Y esto lo podemos hacer con los bash shell script?

¡Pues claro! Cualquiera de los scripts que hemos creado, si le damos permisos de ejecución de forma adecuada, podrá ser ejecutado tan solo escibiendo su nombre si lo metemos en alguno de los directorios que están en el PATH.

Primero copiamos o movemos el fichero a un directorio adecuado dentro de la lista de directorios almacenados en PATH.

Ahora deberíamos responder a la siguiente pregunta: ¿quiénes pueden ejecutar este programa o script?. Todos los usuarios del sistema en este caso. Por tanto, tenemos que dar permiso de ejecución y lectura a todos los usuarios del sistema.

Vamos a renombrarlo

Vamos a ejecutarlo

Vamos a echar un vistazo a estos ficheros ejecutables con el comando file.

Primero el bash shell script, después el programa python y después ls.

Si nos fijamos, el único fichero binario ejecutable es ls, que está compilado.

Procesos y programas

«Un proceso es un programa en ejecución». Vamos a ejecutar helloWorld para ver cómo aparece información de su proceso en el monitor del sistema.

En cuanto ejecutamos el programa, el SO se encarga de crear e inicializar el proceso que ejecutará realmente el programa que nosotros le hemos indicado.

Podemos elegir que columnas mostrar

Vamos a mostrar también todos los procesos.

Veamos que se muestra

Si ejecutamos infoUser en otra terminal…

Vamos a jugar con comandos de gestión de procesos desde termnal. Ejecutamos top

Ahora, desde otra terminal, ejecutamos helloWorld

Desde otra terminal, vamos a mostrar información de todos los procesos en ejecución de forma no interactiva. Es decir, con un comando que nos muestre la información de todos los procesos y termine su ejecución.

Vamos a utilizar el comando ps. man ps si queremos información

Ejectamos ps

Vamos a pasarle como parámetro -A para que muestre todos los procesos.

Vamos a ejecutarlo.

Si queremos mostrar información de un proceso que esté ejecutando un comando podemos utilizar grep para filtrar.

Vamos a terminar con el proceso con el comando kill, con la opción -9.

Vamos a probar otro comando, mejor que top: htop.

Vamos a probarlo.

Vamos a mostrar información de usuarios.

Muestra solo los procesos del usuario root.

Guarda la lista de procesos que está ejecutando actualmente el usuario alumno en el fichero alumno.process

xkill

killall

Dejar una respuesta