En determinadas circunstancias (léase: mañana mismo ya no te vas a acordar de como fué que hiciste la tal o cual cosa), puede que te interese grabar un registro, un log, de todo lo que tu consola de comandos fué escupiendo y lo que le fuiste respondiendo en consecuencia.
Si alguna vez te pasó cualquiera de estas, deberías seguir leyendo:
- Necesitás reproducir todo el setup de la tal o cual aplicación que instalaste en una PC hace tres años, en otra PC que acabás de adquirir. Ni te acordás por donde empezar y el tutorial que seguiste aquella vez no lo encontrás por ningún lado, o nunca hubo e improvisaste sobre la marcha.
- Como nunca lo encontraste, seguís un tutorial nuevo, hacés mierda todo y tenés que volver a empezar de cero por que llegaste al punto donde es mas rápido reinstalar que debuggear.
- Necesitabas leer la salida del último comando que tipeaste, pero te escupió tanto texto junto que lo importante te quedó fuera del buffer así que por mucho scroll hacia arriba que hagas, estás cagado.
- Estás corriendo algo dentro de una sesión de screen, te quedaste sin tabaco así que tuviste que salir de urgencia al kiosko de la esquina. Cuando volvés, te quedaste sin internet , se te cerró la conexión SSH, se te cerró screen y te perdiste de algo importante por que otra vez, te falta buffer.
- Tenés que darle shell a tu (amigo/empleado/cliente/subordinado/programador nigeriano freelance) y querés registrar en un log todo lo que pase mientras el susodicho esté logueado solamente por que paranoia mejor que sobre y no que falte.
- Por último, la mas boluda de todas pero es la que el manual propone como la única cosa para la que sirve: Necesitás tomarle examen a tus alumnos… ¿?
Y así sucesivamente, un largo etcétera…
Tanto todas las veces que te olvidaste de aumentarle el buffer a tu cliente de terminal, screen y/o PuTTY y te perdiste de algo, como las veces en que ni pensaste que fuera a hacer falta, mas tarde o mas temprano te vas encontrar con que tener un registro de todo lo que pasó, te hubiera venido de lujo y que no, no lo tenés.
También te puede servir, como decía al principio, de ayuda memoria, así que de las cientos de formas que debe haber de lograr el mismo resultado, aquí la que debe ser la mas fácil de todas:
Como registrar todo -pero todo todo-, lo que pasa en la consola de comandos:
El artilugio que hace toda la magia acá es el comando «script» que no tiene demasiada ciencia.
– Si no se le especifica ningún parámetro, script registra toda la sesión en curso en el archivo ./typescript
– Si querés agregar contenido al archivo de registro sin perder el contenido anterior, podés ejecutarlo en modo append: script -a
– Si querés loguear en un archivo distinto al por defecto: script /path/al/archivo.txt (Se puede usar -a para append).
Si querés escribir desde el buffer al archivo línea a línea en lugar de al salir, tenés que ejecutarlo con flush activado: script -f
Si no usaste flush por líneas, para que el contenido de la sesión se grabe en el archivo hay que salir de script y volver al shell con «exit».
Se supone además que esto puede funcionar como una forma rudimentaria de compartir una sesión con otros usuarios por shell por que hacés un fifo y escribís línea a línea: mkfifo session.txt && script -f session.txt y después uno o mas usuarios pueden ver que carajos estás haciendo, tirando de tail -f session.txt.
Eso si, todo muy bonito hasta que ejecutaste cualquier editor interactivo de texto, que es cuando se te llena el log de basura.
Por último, como es muy fácil tipear comandos sin que queden registrados en el ~/.bash_history, podría ser que quieras asegurarte de que tu programador nigeriano freelance no te vaya a instalar un ssmtp y se ponga a mandar scams desde tu número de IP.
Como espiar sigilosamente, como si fuera un keylogger barato, toda sesión de bash que pase por tu PC, para la posteridad o por las dudas:
Como cada vez que iniciás sesión en tu cuenta se ejecuta el interprete de comandos que hubiera especificado en /etc/passwd, poné un script con permisos de ejecución –léase chmod +x– en tu /home y cambiá tu /etc/passwd para que lo llame:
pink:x:1007:1007:pink,,,:/home/pink:/home/pink/log.sh
En donde en log.sh se lee:
#!/bin/bash
SHELL=/bin/bash /usr/bin/script -a -f /$PWD/bash_log-$USER-`date`.log 2>&1
Una porquería, lo sé, pero es lo que me salió hasta ahora…
Próxima entrega si la hubiera: Llamar a script desde /etc/profile o /etc/bash_profile como root así el usuario no puede ver y borrar/editar su propio log. (Todavía en fase alpha).
Me encantó, no lo tenía, y ahora lo uso, muchas gracias 🙂