Cómo monitorear el progreso de los comandos de Linux (con pv y progreso)

Indicador de terminal de Linux en una computadora portátil
Fatmawati Achmad Zaenuri / Shutterstock.com

En lugar de volar a ciegas, use Linux pvy los progresscomandos para rastrear el progreso de un comando. Estas utilidades le darán barras de progreso para comandos que normalmente no tienen ninguna. También verá un tiempo estimado hasta la finalización.

Si está en un vuelo de larga distancia en un avión sin pantallas de video en los respaldos de los asientos, no es fácil saber qué tan lejos está de su viaje. Sabes cuando despegaste. Sabes cuánto tiempo se espera que demore el vuelo. Pero, ¿cómo saber si va por buen camino, a tiempo o muy atrasado? Si no desea ver la película durante el vuelo, generalmente puede cambiar la pantalla de video para mostrar un mapa con la posición de su aeronave. También obtienes algunas estadísticas, como la hora prevista de llegada (ETA), que es genial.

Iniciar un comando desde la ventana de la terminal a veces puede parecer un vuelo de larga distancia sin una pantalla de video. No tiene nada que indique si todo está bien o si el proceso se ha bloqueado, ni qué tan cerca de completarse. Un cursor parpadeante no es muy informativo.

Los comandos pvy le progressbrindan algunas estadísticas y una pequeña retroalimentación visual. Puede ver lo cerca que está el proceso para completar. Eso significa que obtiene una ETA para sus procesos en ejecución. Comparado con mirar fijamente un cursor, eso gana sin duda alguna.

Instalación de pv

Debes instalar pv.

Para instalar pven Ubuntu use este comando:

sudo apt-get install pv

sudo apt-get install pv en una ventana de terminal

Para instalar pven Fedora use este comando:

sudo dnf instalar pv

sudo dnf instalar pv en una ventana de terminal

Para instalar pven Manjaro use este comando:

sudo pacman -Syu pv

sudo pacman -Syu pv en una ventana de terminal

Usando pv

pvsignifica visor de tubería . La tubería tiene que estar involucrada en el comando en alguna parte. Aquí hay un ejemplo en el que estamos canalizando una imagen ISO zippara crear un archivo zip comprimido de la ISO.

Para ralentizar los comandos lo suficiente como para poder tomar una captura de pantalla, algunos de los archivos de los ejemplos utilizados para este artículo se almacenaron en un USB externo antiguo y lento llamado SILVERXHD.

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip> gparted.zip

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso |  zip> gparted.zip en una ventana de terminal

La información pvque nos brinda se puede ver en la línea inferior de la pantalla.

Relacionado:  Cómo establecer variables de entorno en Bash en Linux

salida pv para crear un archivo zip en una ventana de terminal

De izquierda a derecha, la información que se muestra es:

  • Los datos transferidos hasta ahora.
  • El tiempo transcurrió hasta ahora.
  • La tasa de transferencia de datos (rendimiento).
  • Una barra de progreso y una cifra de porcentaje completado.
  • El tiempo estimado que queda antes de la finalización (ETA).

Copiar un archivo con pv

Para copiar un archivo con salida de pv, use este comando:

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso> gparted.iso

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso |  gparted.iso en una ventana de terminal

Obtenemos un informe de progreso a medida que se copia el archivo.

copiando un archivo con pv en una ventana de terminal te

Copiar varios archivos con pv

Para copiar varios archivos y carpetas con pvnecesitamos usar un pequeño truco. Usamos tar para mover los archivos por nosotros.

tar -c archivos-de-ayuda / | pv | tar -x -C Documentos /

tar -c archivos-de-ayuda / |  pv |  tar -x -C Documentos / en una ventana de terminal

La tar -c help-files/parte del comando indica tarcrear ( -c) un archivo de los archivos en la carpeta de archivos de ayuda. Esto se canaliza pv para que obtengamos una visualización del progreso. A continuación, se conecta de nuevo a tar la última parte del comando. El archivo se extrae ( -x) y el directorio se cambia ( -C) a Documentos antes de la extracción.

Entonces, los archivos y carpetas que están en los archivos de ayuda se copian en la carpeta Documentos, con una pantalla de progreso.

copiar archivos con pv y tar en una ventana de terminal

La salida es ligeramente diferente esta vez.

No obtenemos una ETA. La barra de progreso ahora muestra un indicador en movimiento. Muestra que el proceso está activo, pero no crece de izquierda a derecha como una barra de progreso tradicional. pvse limita a mostrar la información que puede extraer del proceso que se está canalizando.

Usando pv y tar para crear un archivo

Copiar archivos con pvy tarno nos deja con un archivo de almacenamiento. Se crea una especie de archivo «virtual» tar, que se retroalimenta directamente tarpara extraer los archivos. Si nuestro objetivo es copiar archivos, eso se logra. Pero, ¿y si queremos crear un archivo de almacenamiento?

Todavía podemos usar tarpara crear un archivo de almacenamiento y obtener un informe de progreso pv. Las opciones utilizadas con tarson -c(crear archivo), -z(comprimir con gzip) y -f(nombre de archivo del archivo).

Tenga en cuenta que estamos usando -como nombre de archivo, lo que hace tarque usemos stdout y escriba su salida en la ventana de terminal. No vemos esa salida porque se canaliza pv.

El nombre real del archivo será el nombre del archivo desde el que canalizamos la salida pv. En este caso, es «help-files.tgz».

tar -czf - ./help-files/ | pv> archivos-de-ayuda.tgz

tar -czf - ./help-files/ |  pv> help-files.tgz en una ventana de terminal

Obtenemos los mismos indicadores de progreso que antes y el archivo de almacenamiento se crea para nosotros.

Relacionado:  Cómo aplicar un parche a un archivo (y crear parches) en Linux

salida de tar y pv en una ventana de terminal

Las opciones de visualización de pv

Hay una serie de opciones que puede utilizar pvpara cambiar los detalles de su informe.

Si usa alguna de estas opciones, todas las demás opciones se desactivan. Entonces, si desea tener tres de las opciones de visualización en uso, debe especificar esas tres opciones.

Usar pvsin opciones es lo mismo que usar las -pterbopciones.

  • -p : muestra el porcentaje completo. Esta es la barra de progreso y la cifra de porcentaje completado.
  • -t : muestra el tiempo transcurrido .
  • -e : muestra la ETA .
  • -r : muestra la tasa de transferencia de datos.
  • -b : muestra el  recuento de bytes (datos transferidos hasta el momento).
  • -n : muestra el porcentaje como un número entero . Esto imprime el porcentaje completado como una cifra entera, con cada nueva actualización en una nueva línea.

Repitamos el último comando y pasemos la -popción (porcentaje completado) a pv.

tar -czf - ./help-files/ | pv - p> archivos-de-ayuda.tgz

tar -czf - ./help-files/ |  pv - p> help-files.tgz en una ventana de terminal

Esto desactiva todas las demás opciones de visualización. pvproporciona solo el elemento de porcentaje completado.

Debido a pvque no obtiene una cifra de porcentaje completado tar, la barra de progreso se reemplaza con un indicador móvil. No hay una cifra porcentual.

salida de pv y tar en una ventana de terminal

Usando pv con wc

Podemos usar pvpara canalizar un archivo de texto (o archivos) a wc. wcLuego contará los retornos de carro, caracteres y palabras y pvnos dará un informe de progreso.

Aquí estamos canalizando todos los archivos «.page» en el directorio de archivos de ayuda a wc.

pv ./help-files/*.page |  wc en una ventana de terminal

Cuando se wccompleta, podemos ver nuestro recuento de retornos de carro (líneas), caracteres y palabras de todos los archivos “.page” en la carpeta de archivos de ayuda.

salida de pv y wc en una ventana de terminal

Instalación del comando de progreso

El progresscomando proporciona el mismo tipo de información útil que pv, pero funciona con un conjunto específico de comandos de Linux.

Para instalar progressen Ubuntu, use este comando:

sudo apt-get install progress

sudo apt-get install progress en una ventana de terminal

Para instalar progressen Fedora, use este comando:

progreso de la instalación de sudo dnf

sudo dnf install progress en un terminal widow

Para instalar progressen Manjaro, use este comando:

sudo pacman -Syu progreso

sudo pacman -Syu progreso en una ventana de terminal

El progreso de los comandos funciona con

Al escribir progressen una ventana de terminal y presionar Enter, obtendrá una lista de los comandos con los que progressfunciona.

Progreso

salida del comando de progreso en una ventana de terminal

Usar Progress con tuberías

Hay dos técnicas que podemos usar para monitorear comandos progress. La primera es utilizar tuberías.

Relacionado:  ¿Por qué ~ representa la carpeta de inicio en macOS y Linux?

El tarcomando está en la lista de comandos compatibles que progresspueden monitorear, así que usemos tar.

Las opciones que usaremos son las opciones estándar -c(crear archivo), -z(comprimir con gzip) y -f(nombre de archivo). Vamos a crear un archivo comprimido de todo lo que esté en la carpeta de archivos de ayuda, y el archivo se llamará “help.tgz”.

Lo estamos canalizando progressy usando la -mopción (monitor), así que progress seguimos informando sobre el proceso hasta que se haya completado.

tar -czf help.tgz ./help-files/ | progreso -m

tar -czf help.tgz ./help-files/ |  progreso -m en una ventana de terminal

La ventana de la terminal mostrará el progreso del tarcomando a medida que crea el archivo.

comando de progreso monitoreando tar en una ventana de terminal

A medida que se procesa cada archivo, se enumera con la siguiente información:

  • El ID del proceso.
  • El nombre del proceso.
  • Porcentaje completado.
  • Datos procesados ​​y tamaño total del archivo.
  • Tasa de datos (rendimiento).
  • Tiempo restante estimado (ETA).

Es posible que se sorprenda al ver aparecer un segundo conjunto de datos. Este primer conjunto de datos es para tar. El segundo es para gzip. tarllamadas gzippara realizar la compresión. Porque gzipestá en la lista de comandos admitidos, progressinforma sobre él.

Uso del progreso en el modo de monitorización continua

Puede utilizarlo progressen un modo de monitorización continua en tiempo real utilizando la opción -M (monitor).

Escriba el siguiente comando en una ventana de terminal:

progreso -M

progreso -M en una ventana de terminal

progressinformará que no hay comandos ejecutándose para monitorear. Pero no vuelve a la línea de comandos. progress espera hasta que se inicia un comando que puede supervisar. Entonces comenzará a informar automáticamente sobre él.

progreso esperando que se inicie un comando en una ventana de terminal

En otra ventana de terminal, escriba un comando que esté en la lista de comandos que el progreso puede monitorear.

Vamos a utilizar cat. Los comandos que terminan demasiado rápido no se registrarán progress, por lo que enumeraremos el contenido de un archivo de texto muy largo.

página de palabras de gato

página de palabras de gato en una ventana de terminal

En la ventana de terminal progressque contiene, verá las estadísticas del catcomando a medida que se ejecuta y trabaja hasta su finalización.

informes de progreso sobre gato en una ventana de terminal

Cuando cattermina la lista, el archivo  progressvuelve a su estado de espera.

Cada vez que uno de los comandos sobre los que puede informar realiza una tarea considerable, progresslo supervisará automáticamente y lo informará.

Eso es bastante bueno.

100% completado

Elimine las conjeturas de preguntarse cómo le está yendo a un comando de larga duración y tómese un descanso de contemplar el cursor con pvy progress.