viernes, 2 de enero de 2015

Uso de comando pv

pv es un comando muy útil en el shell de Linux. Muestra una barra de progreso para poder visualizar el paso de información entre dos comandos por medio de tuberías. Viene muy bien en la ejecución de algunos comandos que tardan bastante en ejecutarse, como copia de ficheros grandes, copias mediante el comando dd, etc. y sobre los que no tenemos ningún tipo de información sobre su progreso hasta que finalizan.
Lo primero de todo es instalarlo, pues en Ubuntu no viene con la instalación por defecto:
# apt-get install pv
Y ahora vemos algunos ejemplos de uso:

Progreso de descompresión con gunzip

Descomprimir un fichero con gunzip no muestra ningún progreso del proceso. Para ficheros grandes puede interesar conocer cuánto falta. Si la sintaxis habitual es:
$ gunzip -c syslog.2.gz > syslog.2
La sintaxis con el uso de pv puede ser:
$ gunzip -c syslog.2.gz | pv > syslog.2
 351MB 0:00:11 [29,4MB/s] [                          <=>
que muestra el total de bytes procesados y la velocidad de procesado (en MB/s en este ejemplo). Sin embargo, pv no es capaz de mostrar el ETA (Estimated Time of Arrival) pues no conoce el tamaño del fichero syslog.2.gz. El comando pv puede actuar como el comando cat, por lo que esta otra variante sí que muestra el ETA para la descompresión del archivo:
$ pv syslog.2.gz | gunzip > syslog.2
21,4MB 0:00:07 [3,09MB/s] [===========>         ] 12% ETA 0:00:49

Progreso en la copia de ficheros con cp

El proceso de copia de ficheros grandes mediante el comando cp también puede mejorarse incluyendo una barra de progreso. A continuación se muestra la equivalencia entre la copia de ficheros con el comando cp y el comando pv:
$ cp syslog.2 tmp.log
$ pv syslog.2 > tmp.log
 188MB 0:00:06 [40,1MB/s] [==========>        ]  8% ETA 0:01:04

Progreso en la copia con dd

pv también puede usarse con el comando dd para dotarlo de indicador de progreso. Un ejemplo de uso a la hora de realizar la imagen de un disco completo podría ser este:
# dd if=/dev/sda | pv | dd of=/root/image.iso
Si no lo conocias, ha llegado el momento de ponerlo en práctica.