Ampliando la Caja de Herramientas de UNIX


Una de las partes más importantes de la filosofía UNIX es la composición de programas complejos a partir de otros más simples y genéricos conectándolos entre sí mediante pipes u otros mecanismos de I/O. Esto permite acelerar el desarrollo de programas específicos y facilitar la tarea de tal forma que incluso los programadores menos experimentados pueden conseguir resultados prometedores en poco tiempo.

Ahora bien, esas herramientas básicas llevan usándose desde los años 70 sin apenas variaciones. Prácticamente cualquier función en la que intervengan cadenas de caracteres, manejo de archivos, gestión de usuarios o llamadas al sistema pueden implementarse combinando estas piezas que constituyen el pilar fundamental del espacio de usuarios de UNIX.

Sin embargo, hace una década, Joey Hess pensó que todavía se podía innovar en este ámbito, como dejó escrito en su blog:

“I’m a fan of the unix tools philosophy, but I sometimes wonder if there’s much room for new tools to be added to that toolbox. I’ve always wanted to come up with my own general-purpose new unix tool.”

Joey creó un paquete de aplicaciones llamado moreutils. La utilidad de los programas que contiene no me parece demasiado destacable pero la idea en sí es prometedora. Mi intención es simplemente comentar unos programas que utilizo habitualmente y creo que deberían estar en la caja de herramientas de cualquier informático, con la única condición de que estos programas tienen que seguir la filosofía UNIX en cuanto a su concatenación con otros.

curl

curl es una de esas herramientas infrautilizadas cuya potencia sorprende a los que por primera vez leen su manual. Se suele utilizar para descargar archivos desde la web pero se pueden programar funciones bastante avanzadas con esta utilidad que permite desde manejar POP hasta crear túneles proxy. Personalmente lo suelo utilizar para hacer peticiones HTTP GET y POST en las que también me permite controlar sus cabeceras, cookies e incluso mecanismos de autentificación. curl también es una librería que puede importarse en cualquier lenguaje de programación pero su uso como programa independiente es más propio del estilo UNIX.

netcat

Sin ser la herramienta más conocida del grupo, su utilidad va a más allá de cualquier duda. Permite abrir puertos TCP y UDP, conectarse a ellos, mantenerse a la escucha, etc. para crear junto a otros programas servidores telnet, HTTP, chats estilo talk y cualquier cosa relacionada con sockets que se nos ocurra. Es una utilidad imprescindible para crear prototipos funcionales cuando tenemos prisa.

jq

Puede que el uso de jq sea demasiado específico pero su arquitectura estática y la calidad de su código le hacen digno merecedor de entrar a formar parte de esta lista. Este intérprete de Json es el mejor y más rápido. El uso constante de REST APIs obliga a todos los programadores a tener una aplicación de este tipo en su repertorio y jq es simplemente perfecta.

openssh

Aunque parezca que OpenSSH lleva con nosotros desde el principio de los tiempos, la verdad es que es un software relativamente moderno que vino a sustituir alternativas inseguras como telnet o rsh. El uso ubicuo de esta herramienta la convierte en una elección más que evidente, aunque en los últimos tiempos está ganando popularidad mosh, una alternativa que soluciona algunos problemas con conexiones intermitentes.