Cómo monitorear el progreso de (copiar / respaldar / comprimir) datos usando el comando 'pv'


Al realizar copias de seguridad, hacer frente/mover archivos grandes en su sistema Linux, es posible que desee controlar el progreso de una operación en curso. Muchas herramientas de terminal no tienen la funcionalidad para permitirle ver información de progreso cuando un comando se ejecuta en una tubería.

En este artículo, veremos un comando importante de Linux/Unix llamado pv.

Pv es una herramienta basada en terminal que le permite monitorear el progreso de los datos que se envían a través de una tubería. Cuando usa el comando pv, le brinda una visualización visual de la siguiente información:

  1. The time that has elapsed.
  2. The percentage completed including a progress bar.
  3. Shows current throughput rate.
  4. The total data transferred.
  5. and the ETA (estimated Time).

¿Cómo instalar el comando pv en Linux?

Este comando no se instala de forma predeterminada en la mayoría de las distribuciones de Linux, por lo tanto, puede instalarlo siguiendo los pasos a continuación.

Primero debe activar el repositorio EPEL y luego ejecutar el siguiente comando.

# yum install pv
# dnf install pv            [On Fedora 22+ versions]
Dependencies Resolved

=================================================================================
 Package       Arch              Version                   Repository       Size
=================================================================================
Installing:
 pv            x86_64            1.4.6-1.el7               epel             47 k

Transaction Summary
=================================================================================
Install  1 Package

Total download size: 47 k
Installed size: 93 k
Is this ok [y/d/N]: y
Downloading packages:
pv-1.4.6-1.el7.x86_64.rpm                                 |  47 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : pv-1.4.6-1.el7.x86_64                                         1/1 
  Verifying  : pv-1.4.6-1.el7.x86_64                                         1/1 

Installed:
  pv.x86_64 0:1.4.6-1.el7                                                        

Complete!
# apt-get install pv
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  pv
0 upgraded, 1 newly installed, 0 to remove and 533 not upgraded.
Need to get 33.7 kB of archives.
After this operation, 160 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe pv amd64 1.2.0-1 [33.7 kB]
Fetched 33.7 kB in 0s (48.9 kB/s)
Selecting previously unselected package pv.
(Reading database ... 216340 files and directories currently installed.)
Preparing to unpack .../archives/pv_1.2.0-1_amd64.deb ...
Unpacking pv (1.2.0-1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up pv (1.2.0-1) ...
# emerge --ask sys-apps/pv

Puede usar el puerto para instalarlo de la siguiente manera:

# cd /usr/ports/sysutils/pv/
# make install clean

O agregue el paquete binario de la siguiente manera:

# pkg_add -r pv

¿Cómo uso el comando pv en Linux?

pv se usa principalmente con otros programas que carecen de la capacidad de monitorear el progreso de una operación en curso. Puede usarlo colocándolo en una tubería entre dos procesos, con las opciones adecuadas disponibles.

La entrada estándar de pv pasará a su salida estándar y el progreso (salida) se imprimirá en el error estándar. Tiene un comportamiento similar al comando cat en Linux.

La sintaxis del comando pv es la siguiente:

pv file
pv options file
pv file > filename.out
pv options | command > filename.out
comand1 | pv | command2 

Las opciones utilizadas con pv se dividen en tres categorías, interruptores de visualización, modificadores de salida y opciones generales.

  1. To turn on the display bar, use the -p option.
  2. To view the elapsed time, use the –timer option.
  3. To turn on ETA timer which tries to guess how long it will take before completion of an operation, use the –eta option. The guess is based on previous transfer rates and the total data size.
  4. To turn on a rate counter use the –rate option.
  5. To display the total amount of data transferred so far, use the –bytes option.
  6. To display progress inform of integer percentage instead of visual indication, use the -n option. This can be good when using pv with the dialog command to show progress in a dialog box.
  1. To wait until the first byte is transferred before displaying progress information, use the –wait option.
  2. To assume the total amount of data to be transferred is SIZE bytes when computing percentage and ETA, use –size SIZE option.
  3. To specify seconds between updates, use the –interval SECONDS option.
  4. Use –force option to force an operation. This option forces pv to display visuals when standard error is not a terminal.
  5. The general options are –help to display usage information and –version to display version information.

Usar el comando pv con ejemplos

1. Cuando no se incluye ninguna opción, los comandos pv se ejecutan con las opciones predeterminadas -p, -t, -e, -r y -b.

Por ejemplo, para copiar el archivo opensuse.vdi a /tmp/opensuse.vdi, ejecute este comando y observe la barra de progreso en el screencast.

# pv opensuse.vdi > /tmp/opensuse.vdi

2. Para crear un archivo zip desde su archivo/var/log/syslog, ejecute el siguiente comando.

# pv /var/log/syslog | zip > syslog.zip

3. Para contar el número de líneas, palabras y bytes en el archivo/etc/hosts mientras se muestra solo la barra de progreso, ejecute este comando a continuación.

# pv -p /etc/hosts | wc

4. Supervise el progreso de la creación de un archivo de respaldo utilizando la utilidad tar.

# tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)

5. Usando pv y la herramienta basada en terminal de diálogo juntas para crear una barra de progreso de diálogo como sigue.

# tar -czf - ./Documents/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70

Resumen

Esta es una buena herramienta basada en terminal que puede usar con herramientas que no tienen la capacidad de monitorear el progreso de una operación como hacer frente/mover/hacer copias de seguridad de archivos. Para más opciones, consulte man pv.

Espero que encuentre útil este artículo y que pueda publicar un comentario si tiene alguna idea que agregar sobre el uso del comando pv. Y si obtiene algún error al usarlo, también puede dejar un comentario.