Bash

  • La consola (intérprete de línea de comandos) CSH, instalada por defecto de los sistemas FreeBSD, tiene una funcionalidad muy interesante y útil que consiste en buscar en el historial cuando se utiliza la flecha hacia arriba.

  • Hoy tuve la necesidad de obtener los nombres de host asociados a todas las direcciones IPv4 de una red clase C (ejecutando consultas inversas a los servidores de nombre). Por lo tanto decidí implementar un pequeño script que realice dicha tarea utilizando la shell tcsh, intérprete de comandos por defecto en sistemas FreeBSD. Aunque luego lo traduje a Bash, para compartirlo con aquellos usuarios de GNU/Linux.

  • Hace varias semanas comencé a armar un compilado de rock nacional (argentino). Una especie de reseña histórica desde el tema "La Balsa" del año 1967, perteneciente a la banda Los Gatos, hasta la actualidad. Me llevó mucho tiempo pero puedo decir que he terminado. Fue un arduo trabajo de investigación (en parte gracias a Wikipedia) para recopilar todos los temas (474 en total).

    Una vez terminado, me encontré con que algunos temas tenían los tags ID3 cargados, otros nada, y otros tenían incluso hasta letras e imágenes de portadas embebidas. Pero en general, dado que provenían de diferentes álbumes y fuentes, los tags no respetaban patrón alguno. Por ello quise borrarlos a todos. Aunque claro, no podía hacer este trabajo manualmente, pues me llevaría muchísimo más tiempo. Entonces se me ocurrió utilizar un script Bash y una herramienta de edición de tags ID3 de línea de comandos para cargarlos a partir de los nombres de archivos.

  • Muchas veces necesitamos guardar la salida de un comando en una variable al escribir scripts Bash. El problema es que luego tenemos dificultades para interpretar o mostrar por salida estándar su contenido, ya que se pierden los saltos de línea. Esto se soluciona de manera sencilla utilizando comillas dobles.

  • Hoy me topé en Google Plus con este divertido sitio que simula escribir código C como lo hacen en las películas: hackertyper.net. Luego de probarlo, se me ocurrió implementarlo con un script Bash, para ejecutarlo en la consola y simular que trabajo jejeje.

  • Recién ahora me entero que existe un comando llamado "tac". Tal como sugiere su nombre, tac es una especie de cat en reversa. Se utiliza para concatenar e imprimir archivos en reversa, es decir comenzando por la última línea hacia atrás y terminando con la primera.

  • La versión de sed que incluyen las distribuciones GNU/Linux permite reemplazar cualquier cadena por saltos de línea (enter) utilizando la secuencia de escape \n. Sin embargo, la versión BSD no soporta estas secuencias de escape al momento de reemplazar (sí al momento de buscar, parte izquierda de la secuencia de sustitución).

    En este breve artículo explico cómo lograrlo en FreeBSD y OpenBSD.

  • ¿Cuántas veces estamos trabajando en una computadora con Windows y no contamos con una terminal semi-decente o mínimamente usable (sólo el triste cmd)? En este episodio voy a compartir cmder, una interesante herramienta portable que provee una consola bash para sistemas operativos de la familia Windows.

  • A partir de la arquitectura de mi sistema de actualización de servidores, decidí implementar un nuevo script para verificar el estado de las VMware Tools, y reinstalarlas de forma desatendida cuando sea necesario.

  • Una nueva entrega de La biblia del SysAdmin. Sólo una de muchas pendientes. Con la llegada del Curso introductorio a la Administración de Sistemas GNU/Linux tal vez apure a publicar un par de capítulos más. A fin de que sirvan como puntapié y lectura posterior al curso que estaré dictando próximamente.

    A lo largo de una serie de artículos voy a publicar los principios básicos que todo SysAdmin debe respetar, practicar y predicar a sus pares. Estos principios los he tomado (y orgullosamente puedo decir que he respetado casi en su totalidad) del artículo General SysAdmin Principles & Guidelines publicado por el Dr. Joe Chung.

  • Lamentablemente, el cliente letsencrypt-auto que se utiliza para generar certificados TLS de Let's Encrypt no está pensado para acceder a Internet a través un proxy HTTP/HTTPS. Entonces, ¿qué pasa si necesitamos emitir un certificado para uno de nuestros servidores, dentro una red corporativa, detrás de un proxy HTTP? No queda otra alternativa que realizar algunos cambios en el script (estas son las grandes ventajas de utilizar soluciones abiertas, se pueden modificar/adaptar a las necesidades de cada uno).

    Este artículo explica cómo modificar el script letsencrypt-auto para que funcione utilizando un proxy HTTP/HTTPS.

  • El día de hoy tuve que auditar permisos en un servidor de bases de datos MySQL, y me encontré con la dificultad que el mismo no provee una herramienta o comando para volcar todos los permisos (grants) de todos los usuarios. Por ello me vi en la necesidad de desarrollar un pequeño script Bash para llevar a cabo esta simple tarea. Pequeño script al que luego le agregué alguna funcionalidad básica para realizar filtrado y formateo de la salida.

  • La expansión de llaves en Bash es un mecanismo para generar cadenas de texto. En este artículo muestro ejemplos de uso para evitar tareas tediosas y repetitivas.

  • En el artículo Sysadmin vago: cómo actualizar todos los servidores de tu organización ejecutando un único comando expliqué de qué forma es posible lanzar actualizaciones de múltiples servidores GNU/Linux (Debian y CentOS) desde un simple script Bash, utilizando un servidor de administración centralizado y SSH con autenticación con clave pública.

    La limitación de este esquema era que trabajaba de forma secuencial, es decir, se actualizaba de a un sistema por vez. Por lo tanto en este artículo voy a demostrar cómo he mejorado mi script para lanzar todas las actualizaciones en paralelo (so pena de saturar un poco el enlace y/o Web proxy) sin necesariamente perder el control del proceso.

  • Un problema común en servidores que manejan grandes volúmenes de datos es quedarse sin espacio disponible en alguna partición. Este inconveniente puede ser crítico, si el sistema de archivos que se queda sin espacio disponible hospeda algún directorio crucial para el funcionamiento del sistema, como por ejemplo el directorio /var y sus subdirectorios.

  • Además de PostgreSQL y MySQL, en nuestra organización utilizamos servidores de gestión de bases de datos IBM Informix. Se trata de un producto de software de gestión de bases de datos propietario, licenciado por IBM, que corre sobre sistemas Unix.

    Al tratarse de software propietario, collectd (y creo que ninguna otra solución de recolección de métricas) no posee un plugin para monitorear servidores de bases de datos Informix. Por ende me dispuse a crear un script Bash que permita monitorear servidores Informix y almacene las métricas en una base de datos InfluxDB, el cual comparto en este artículo.

  • He creado un simple script Bash para hacer un backup de todas las bases de datos de un servidor MySQL en archivos diferentes. El script utiliza la herramienta mysqldump para volcar cada base de datos, en forma de código SQL, en archivos separados (un archivo para cada base). Una característica interesante, es que no requiere conocer a priori los nombres de las bases de datos, sino que los obtiene automáticamente con una consulta SQL. Para que el script funcione correctamente, sólo requiere un usuario con privilegio de lectura en todas las bases de datos (generalmente un usuario para backups).

    A continuación dejo el script, junto con una explicación de su funcionamiento.

  • A veces es necesario obtener una dirección IP a partir de una dirección MAC. Por ejemplo, si estamos monitoreando nuestra red local y nos encontramos con tráfico de protocolos por debajo de la capa de red o tráfico IPv6.

  • Anteriormente presenté el servicio de correo en la nube Mailgun, que nos permite enviar y recibir correo desde una API a través de HTTPS sin necesidad de contar con un servidor ni cliente de correo electrónico. Una maravilla para administradores de sistemas y desarrolladores de software que necesitamos enviar correo de manera programática (notificaciones de aplicaciones Web, reset de contraseñas, alertas de sistemas de monitoreo, resúmenes diarios de actividad y logs, etc.)

    En esta oportunidad voy a compartir un pequeño script Bash que he desarrollado para enviar los correos de Logwatch a través de Mailgun. Este script (que está aún muy verde y en fase pre-alpha) es una especie de MTA que emula el comportamiento del comando sendmail -t. Es decir, toma todo lo necesario para enviar el mensaje desde entrada estándar (destinatario, asunto y remitente desde los headers SMTP en lugar de como argumentos de línea de comandos).

  • El mes pasado expliqué detalladamente cómo instalar y configurar ModSecurity en Apache sobre servidores Debian. En este artículo voy a compartir un muy útil script Bash para generar un resumen del log de auditoría de ModSecurity.