Python para Sysadmin

¿Un administrador de sistemas necesita aprender a programar?

Tradicionalmente en las empresas, los equipos de desarrollo y de administradores de sistemas han sido dos equipos de trabajo que han estado siempre separados y los objetivos de unos y de otros eran distintos.

El objetivo del equipo de desarrollo es desarrollar su aplicación y ofrecer al cliente final las últimas funcionalidades de la misma, mientras que el equipo de administradores es el responsable de que esa aplicación funcione bien y conocer los servidores que manejan. Esos dos tipos de trabajo, esos dos objetivos, muchas veces han provocado que los dos equipos trabajen de manera separada.

En los últimos tiempos ha surgido una nueva metodología de trabajo, como es la metodología DevOps, que lo que trata es acercar al equipo de desarrollo y el equipo de administradores para trabajar de una forma similar, utilizando las mejores prácticas posibles y que el trabajo se haga colaborativamente para llegar a alcanzar los objetivos de la empresa.

Para que esto ocurra para desarrolladores tienen que conocer el mundo de los administradores de sistemas, y éstos tienen que conocer cómo y en qué trabajan los desarrolladores. Por eso es importante que los administradores tengan conocimientos de programación, ya que tienen más posibilidades de trabajar junto al equipo de desarrollo en la puesta en marcha de cualquier aplicación.

¿Qué lenguaje debe aprender un administrador de sistemas?

Un administrador de sistemas necesita automatizar muchas tareas y proceso de administración. Tradicionalmente ha tenido dos posibilidades para ello, o bien utilizar lenguajes de script para los sistemas operativos Linux, como por ejemplo Bash, o para administradores de un sistema operativo Windows programar con PowerShell, que permite automatizar tareas de administración.

La ventaja que ofrece Python para un administrador de sistemas es que es que un lenguaje multiplataforma, es decir, que permite escribir programas o scripts que se ejecuten de la misma forma en Windows y en Linux. Por lo tanto, esos scripts de administración van a ser portables entre los distintos sistemas, lo que hace que Python sea una opción muy atractiva para los administradores de sistemas.

¿Qué ofrece Python a un administrador de sistemas?

Algunas de las ventajas que ofrece Python a los administradores son las siguientes:

  • El trabajo con ficheros es muy sencillo, tanto con ficheros TXT, JSON, XML, etc.
  • El trabajo con expresiones regulares también es muy sencillo.
  • Existen distintos módulos que ofrecen funciones para trabajar a nivel de sistema operativo:
  • El módulo “os” nos permite acceder a funciones del sistema operativo. - El módulo “shutil” nos permite funciones de alto nivel para trabajar con ficheros, para copiar, mover o cambiar permisos. - El módulo “subprocess” permite ejecutar instrucciones en el sistema operativo y obtener la respuesta, lo que también resulta una de las ventajas de utilizar Python.
  • Es muy sencillo crear scripts parametrizados. Normalmente cuando creamos un script, los datos de entrada no se introducen por el teclado, normalmente se introducen como parámetro en la terminal.
  • Tenemos distintos módulos como “Fabric”, que nos permite ejecutar instrucciones en servidores remotos.

Ejemplo de las ventajas que ofrece la librería “os”

Vamos a ver varios ejemplos de las ventajas que pueden tener Python a la hora de la administración de sistemas.

Primero veremos el uso de la librería “os”, que al importarla nos ofrece muchas funciones relacionadas con el sistema operativo, y además funciona tanto en Linux como en Windows.

Un ejemplo sería el siguiente programa:


	#!/usr/bin/python3
	import os
	#Descubrir nuestro directorio de trabajo actual
	dirActual = os.getcwd()
	print(“Directorio trabajo actual: {}”.format(dir(Actual))

	#Crear un directorio si este no existe
	##Pedimos el path del directorio a crear:
	carpeta = str(input(“\nIntroduce directorio a crear (ruta completa): “))
	##Primero comprobamos si esta ya existe
	if os.path.exists(carpeta):  #Si queremos ver si existe y es un directorio: os.
		print(“La carpeta {} ya existe”.format(carpeta))
		exit(1)
	else:
		os.system(“mkdir {}”.format(carpeta))
		#Para ver un listado del directorio donde se creó ahora mismo esa carpeta
		cpath = carpeta.split(“/”)[0:-1] #Seleccionamos todas menos la creada
		dir_madre = os.sep.join(cpath) #Que, en caso de Linux es “/”.join(cpath)
		print(“Directorio madre : {}”.format(dir_madre))
		listado = os.listdir(dir_madre)
		print(“listado de los elementos de {}:”.format(dir_madre))
		for elemento in listado:
		print(“ - {}”.format(str(elemento)))
	exit(0)

Podemos obtener el directorio actual, ver si una carpeta existe, crear una carpeta, obtener los datos de una de una carpeta y tratarlos, etc.

Incluso tiene en cuenta que en Linux tenemos separadores de directorios que son distintos a los separadores de Windows, y dependiendo del sistema donde los ejecutemos, tendremos unos u otros.

Si ejecutamos este programa comprobamos que crea un directorio preguntando por el nombre del mismo y después nos lista los ficheros que están en el directorio padre.

Ejemplo de las ventajas que ofrece la librería “shutil”

Vamos ahora con otro ejemplo, en este caso de la librería “sutil”, que nos proporciona funciones para trabajar con ficheros.

Vemos un ejemplo de la misma:


	#!/usr/bin/python3
	import shutil, os
	
	ruta = os.getcwd() + os.sep
	origen = ruta + ‘origen.txt’
	destino = ruta + ‘destino.txt’

	try:
		shutil.copyfile(origen,destino)
		print(“Archivo copiado”)
	except:
		print(“Se ha producido un error”)

Con éste programa lo que conseguimos es copiar un fichero origen a un fichero destino, empleando las funciones que nos ofrecen las librerías “os” y “shutil”.

Si lo ejecutamos vemos que efectivamente nos copia el fichero origen.txt al fichero destino.txt.

Ejemplo de las ventajas que ofrece la librería “subprocess”

Pasamos a ver el módulo “subprocess”, que simplemente ejecuta una instrucción y obtiene la salida, que es una cadena de texto que podemos tratar en Python.

Un ejemplo sería el siguiente programa:


	#!/usr/bin/python3
	import subprocess
	output = subprocess.check_output([“df”,”-h”])
	for fich in output.decode().splitlines()[1:]:
		datos=fich.split(“ “)
		while ““ in datos:
			datos.remove(‘’)
		print(datos[0],” - “,datos[4])

Podemos obtener el directorio actual, ver si una carpeta existe, crear una carpeta, obtener los datos de una de una carpeta y tratarlos, etc.

Incluso tiene en cuenta que en Linux tenemos separadores de directorios que son distintos a los separadores de Windows, y dependiendo del sistema donde los ejecutemos, tendremos unos u otros.

Si ejecutamos el programa, ejecuta la función df -h y se obtiene una lista con los nombres de los dispositivos de bloque y el porcentaje de uso de cada uno de ellos. Es decir, se ha ejecutado la instrucción, se ha cogido la salida y se ha tratado para que muestre únicamente la primera y la cuarta columna.

Ejemplo de las ventajas que ofrece la librería “ sys”

Por último vamos a ver ejemplo de cómo hacer scripts parametrizados, utilizando con argumentos.

Para ello creamos este programa:


	#!/usr/bin/python3
	import sys
	if len(sys.argv) != 2:
		print(“Debes poner el usuario como parámetro”)
		sys.exit(-1)
	usuario=sys.argv[1]
	fichero=open(“/etc/passwd”,”r”)
	líneas=fichero.read()
	fichero.seek(0)
	if líneas.find(usuario)==-1:
		print(“Usuario no existe”)
	elif líneas.find(usuario+”:x:0:0”)==-1
		print(“No es admistrador”)
	else:
		print(“Es administrador”)
		for línea in fichero:
			print(línea.split(“:”)[0])
	fichero.close()
	

En este ejemplo, la librería “sys” tiene una lista (argv) dónde están los parámetros que hemos recibido. Siempre se recibe el nombre del script y después los parámetros que se han indicado.

Este ejemplo lo que hace es recibir el nombre de un usuario como parámetro, comprueba si es administrador y si lo es muestra los usuarios del sistema, y si no es administrador, lo indica.

Si lo ejecutamos comprobamos que funciona correctamente.

Resumen final

Con estos cuatro ejemplos sencillos hemos visto la potencialidad y las funciones que ofrece Python a los administradores de sistemas, por lo que puede ser un lenguaje a tener en cuenta para aprender para todos los que os dediquéis a la administración de sistemas, tanto Linux como Windows.

Si quieres aprender en profundidad Python, puedes hacer el curso de Python 3 desde cero de nuestro profesor José Domingo Muñoz en el que aprenderás los fundamentos del lenguaje de programación Python 3 desde cero, pensado para no programadores que se quieran iniciar en este mundo.

Recuerda que puedes comenzar este curso con tu suscripción a OpenWebinars. Si todavía no estás suscrito, aprovecha para hacerlo ahora.

Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más Información