printf "\033c" te salva. Tuve que googlear tantas veces este comando que me hinché las pelotas y vengo a documentarlo acá para tenerlo siempre a mano.

Agenden:

printf "\033c"

Como este es un post para mi, porque la posteridad ya no existe, ahora la gente ya no busca en Google sino que le pregunta a una IA, pego el comando arriba de todo para encontrarlo más rápido.

¿Le diste cat a un bin por error y se te hizo mierda la consola de comandos? Lo de arriba.

Grepeaste un flujo de tráfico encriptado y se te hizo mierda la consola de comandos? Lo de arriba, si.

Escapaste mal tu printf en el script y se te hizo mierda la consola de comandos?

Lo

de

arriba.

De la nada copiás y al pegar control + shift + v o middle-click del mouse empieza a escupir texto roto del tipo:

^[[200coso pegado^[[201

o bien:

0~coso pegado1~

LO DE ARRIBA.

Donde clear hace agua, donde reset no funciona y te deja a pata, el printf nunca falla. Y lo mejor de todo, lo podés apuntar desde un TTY o session SSH a otra session aledaña. Ejemplo:

printf "\033c" > /dev/tty1

 

Lo tiro acá para toda la posteridad. Un pequeñísimo script para convertir el timestamping de syslog (la cantidad de segundos transcurridos desde que booteó el sistema) a hora local, cosa que a priori parece trivial pero que a la tercera vez que tenés que usar ya te cansa la cabeza.

 

Un poco de bash scripting. Convertir de Unix timestamping en el syslog de Linux a Hora en formato human readable.

Un poco de bash scripting. Convertir de Unix timestamping en el syslog de Linux a Hora en formato human readable.

 

Este script no es mío, lo robé de algún lado hace años y desde entonces me acompaña a todas partes:

#!/bin/bash

if [ "$#" != "1" ] ; then
echo "Usage: `basename $0` time-offset-integer"
exit 1
elif [ "`echo $1 | sed 's/[0-9]//g'`" != "" ] ; then
echo "Usage: `basename $0` time-offset-integer"
exit 1
fi

N=`date +'%s'`
U=`FS="." /usr/bin/awk '{print $1;}' < /proc/uptime | sed 's/[^0-9].*//'`
TS=`expr $N - $U + $1`
T=`date --date="@$TS"`

echo "$1 seconds after boot was about $T."

 

Como se usa.

A la típica salida del comando dmesg, o /var/log/syslog por ejemplo:

[511684.749771] Process accounting resumed
[511684.842941] systemd[1]: apt-daily-upgrade.timer: Adding 33min 25.167508s random time.
You have new mail in /var/mail/root

 

 

Ejecutás el script anterior, que en este caso llamé syslogtohuman.sh:

~# ./syslogtohuman.sh 511684
511684 seconds after boot was about Thu Aug 16 11:20:13 -03 2018.

 

Y así sabés que esa entrada en el syslog en particular aproximadamente en esa fecha y a esa hora: Thu Aug 16 11:20:13 -03 2018

 

De nada.

A este le puse por título TIP por que no es mas que eso: otro ayuda memoria para la posteridad, a saber:

 

  • Tenés dos archivos con texto: archivo1 y archivo2 como en el ejemplo de la captura de pantalla.
  • Necesitás identificar las líneas duplicadas o simplemente restarlas como en el ejemplo y mostrar únicamente las que no se repiten.

 

La única forma que conozco de lograr esto en Bash sin recurrir a complicados regex de la muerte forma mas rápida de lograr esto sin tener que pensar mucho es como tantas otras veces: GREP.  Alguien debería hacerle un pedestal al autor original de grep, sin duda.

Los switchs que vas a utilizar en grep son:

  1. -x  match únicamente si toda la línea coincide.
  2. -f  para en lugar de utilizar stdin o una palabra como argumento, usar un archivo, de a una línea por vez.
  3. -v  para reverse search, restar las líneas que coincidan en archivo2 de archivo1.

 

Utilizar grep en Bash para restar el contenido de un archivo de otro linea a linea en la consola de comando de Linux

Utilizar grep en Bash para restar el contenido de un archivo de otro linea a linea en la consola de comando de Linux

 

Continúa leyendo

Es casi imposible que no te hayas enterado de esta nueva vulnerabilidad de Bash que dieron en llamar Shell Shock y lleva el CVE 6271.

En caso de que no estuvieras al corriente, como el nuevo theme que le puse al Blog tiene un CSS de mierda que nunca me molesté en corregir, tal vez no te diste cuenta pero en el párrafo de mas arriba hay dos hipervínculos que son clickeables y casi ni se nota. Ya arreglaré eso cuando se me pase lo pajero.

Como sea, si tenés ganas, leélos y parchá tu bash. Si no tenés ganas, simplemente parchá tu bash o que te rompan el culo, resumidamente esas son tus tres alternativas, por que este bug de mierda es wormable con lo que podemos esperar a corto plazo una ingente cantidad de bots tratando de hackearnos de forma automatizada (y van seis días desde el primer advisory).

 

Fuck the fucking fuckers. Yo ya parché mi Bash.

Fuck the fucking fuckers. Yo ya parché mi Bash.

 

Si justo tenés la buena suerte de estar corriendo un Linux que recibe actualizaciones via gestor de paquetes, hacelo por ese medio. A mi me tocó tener que parchar decenas de Linux, en su mayoría Debian y derivados y encontré que no era tan fácil de hacer por que algunas versiones, sobre todo las mas viejitas ya no recibían actualizaciones. Como encontré –ya ni se donde– que alguien hizo un script para compilar bash desde los sources, le hice pequeñas modificaciones y te lo dejo acá para que lo uses si tenés que actualizar versiones de Debian o Ubuntu que ya no reciben updates via APT.

 

¿Como saber si tu Linux es vulnerable?

Ejecutá esto y si ves que dice «vulnerable», marche un parche:

~# env x='() { :;}; echo vulnerable' bash -c "echo esto es una prueba"

Continúa leyendo