Trucos UNIX: ¿Guardando la salida de todo lo que se hace?


Imaginemos que usted está trabajando en algo que requiere toda su atención y que usted no quiere olvidar ningún detalle de que fué lo que hizo; Si bien en Bash el comando «history» le va a decir que fué la última lista de cosas que usted introdujo por el teclado, no le va a guardar la salida de esos comandos al menos que los redirija a un archivo.

En esos casos lo mejor es usar el comando ‘script‘:

[josevnz@localhost ~]$ script -f
Script started, file is typescript
[josevnz@localhost ~]$ ls
bash company ebay jars mock-screens perl rpm workspace
bin cvs flickrapi-1.0a3 java mp3 public_html shopping xmlrpc-1.2-b1
blog data fotos jedit mysql_backup redhat specs
book Desktop googleapi lehman opensource remotetea src
c++ docs gpg lib outsourcing reports tmp
certification dshield html man passwords resume typescript
[josevnz@localhost ~]$ ps -ef|grep root
root 1 0 0 09:50 ? 00:00:01 init [5]
root 2 1 0 09:50 ? 00:00:00 [ksoftirqd/0]
root 3 1 0 09:50 ? 00:00:00 [watchdog/0]
root 4 1 0 09:50 ? 00:00:00 [events/0]
root 5 1 0 09:50 ? 00:00:00 [khelper]
root 6 1 0 09:50 ? 00:00:00 [kthread]
[josevnz@localhost ~]$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
27297988 6594116 19294848 26% /
/dev/hda1 101086 9950 85917 11% /boot
/dev/shm 253532 0 253532 0% /dev/shm
[josevnz@localhost ~]$ exit
Script done, file is typescript

Todo el contenido de la sesión está en el archivo ‘typescript‘. Allí están todos los comandos, con una característica y es que script va a guardar tambien la ejecución de teclas como backspace, enter, etc. Sin embargo eso no le resta utilidad ya que usted pudiera usarlo para ‘monitorear’ lo que un usuario está haciendo en tiempo real en una ventana mientras usted lo vigila con ‘tail -f typescript

Ahora veamos otro problema y su solución. ¿Nunca le ha pasado que quiere correr un comando y quiere guardar los errores y la salida normal en un archivo, pero a la vez quiere ver la salida en tiempo real? Usted pudiera ejecutar el comando en una ventana así por ejemplo:

find / -type f > /tmp/findlog-$$.log 2>&1 (en una ventana)
tail -f /tmp/findlog-*.log (en otra ventana, fijese como tenemos que adivinar el nombre completo de la bitacora, por el $$ anterior que significa el número del proceso actual)

Pero usted, como un usuario superpoderozo de UNIX dice: No joda, yo le pongo una «T» (pronunciado en Inglés como Ti) a eso:

find / -type f 2>&1 | tee /tmp/findlog-$$.log

Tee va a tomar STDIN y lo va a imprimir por STDOUT (pantalla) y al archivo que usted diga (/tmp/findlog-$$.log).

Hoy usted aprendió dos comandos que muchas veces son olvidados en UNIX: script y tee. Espero le sean de utilidad 🙂

Buscar en Technorati: ,