En lugar de volar a ciegas, use Linux pv
y progress
comandos para rastrear el progreso de un comando. Estas utilidades le darán barras de progreso para comandos que regularmente no disponen ninguna. Además 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 a lo largo del vuelo, de forma general puede cambiar la pantalla de video para mostrar un mapa con la posición de su avión en él. Además 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 procedimiento se ha bloqueado, ni qué tan cerca está de completarse. Un cursor parpadeante no es muy informativo.
los pv
y progress
Los comandos le brindan algunas estadísticas y un poco de retroalimentación visual. Puede ver lo cerca que está el procedimiento para completar. Eso significa que obtiene una ETA para sus procesos en ejecución. Comparado con mirar fijamente un cursor, eso gana sin ninguna duda.
Instalación de pv
Debes instalar pv
.
Instalar pv
en Ubuntu use este comando:
sudo apt-get install pv
Instalar pv
en Fedora use este comando:
sudo dnf install pv
Instalar pv
en Manjaro use este comando:
sudo pacman -Syu pv
Usando pv
pv
representa 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 a través de zip
para realizar 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 post 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
La información pv
nos da se puede ver en la línea inferior de la pantalla.
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
Obtenemos un reporte de progreso a medida que se copia el archivo.
Copiar varios archivos con pv
Para copiar varios archivos y carpetas con pv
necesitamos utilizar un pequeño truco. Usamos tar
para mover los archivos por nosotros.
tar -c help-files/ | pv | tar -x -C Documents/
los tar -c help-files/
parte del comando instruye tar
crear (-c
) un archivo de los archivos en la carpeta de archivos de ayuda. Esto se canaliza a través de pv
para que obtengamos una visualización del progreso. Después se canaliza de nuevo a tar
para la última parte del comando. El archivo se extrae (-x
) y se cambia el directorio (-C
) a Documentos antes de la extracción.
Por eso, los archivos y carpetas que están en los archivos de ayuda se copian en la carpeta Documentos, con una pantalla de progreso.
La salida es ligeramente distinto esta vez.
No obtenemos una ETA. La barra de progreso ahora muestra un indicador en movimiento. Muestra que el procedimiento está activo, pero no crece de izquierda a derecha como una barra de progreso tradicional. pv
se limita a mostrar la información que puede extraer del procedimiento que se está canalizando.
Usando pv y tar para crear un archivo
Copiar archivos con pv
y tar
no nos deja con un archivo de almacenamiento. Una especie de archivo «virtual» es creado por tar
, que se devuelve de forma directa a tar
para extraer los archivos. Si nuestro objetivo es copiar archivos, eso se logra. Pero, ¿y si queremos crear un archivo de almacenamiento?
Aún podemos utilizar tar
para crear un archivo de almacenamiento y obtener un reporte de progreso de pv
. Las alternativas utilizadas con tar
están -c
(crear archivo), -z
(comprimir con gzip) y -f
(nombre de archivo del archivo).
Tenga en cuenta que estamos usando -
como el nombre del archivo, lo que provoca tar
utilizar stdouty escribir su salida en la ventana de terminal. No vemos esa salida debido a que se canaliza a través de pv
.
El nombre real del archivo será el nombre del archivo desde el que canalizamos la salida pv
dentro. Para este caso, es «help-files.tgz».
tar -czf - ./help-files/ | pv > help-files.tgz
Obtenemos los mismos indicadores de progreso que antes y el archivo de almacenamiento se crea para nosotros.
RELACIONADO: Cómo comprimir y extraer archivos usando el comando tar en Linux
Las alternativas de visualización de pv
Hay varias opciones que puede usar con pv
para cambiar los detalles de su reporte.
Si utiliza alguna de estas opciones, todas las demás opciones están desactivadas. Entonces, si desea tener tres de las alternativas de visualización en uso, debe especificar esas tres opciones.
Usando pv
sin ninguna opción es lo mismo que utilizar el -pterb
opciones.
- -pag: muestra el porcentaje completo. Esta es la barra de progreso y la cifra de porcentaje completado.
- -t: muestra el transcurrido tiempo.
- -mi: muestra el ETA.
- -r: muestra el índice de transferencia de datos.
- -B: muestra el byte contar (datos transferidos hasta ahora).
- -norte: muestra el porcentaje como un 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 el -p
(porcentaje completado) opción para pv
.
tar -czf - ./help-files/ | pv - p > help-files.tgz
Esto deshabilita todas las demás opciones de visualización. pv
proporciona solo el elemento de porcentaje completado.
Debido a que pv
no obtiene una cifra de porcentaje completado de tar
, la barra de progreso se reemplaza por un indicador en movimiento. No hay una cifra porcentual.
Usando pv con wc
Nosotros podemos utilizar pv
para canalizar un archivo de texto (o archivos) a wc
. wc
Después contará los retornos de carro, caracteres y palabras y pv
nos dará un reporte de progreso.
Aquí estamos canalizando todos los archivos «.page» en el directorio de archivos de ayuda en wc
.
Cuando wc
completa 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.
Instalación del comando de progreso
los progress
comando da el mismo tipo de información útil como pv
, pero funciona con un conjunto específico de comandos de Linux.
Instalar progress
en Ubuntu, use este comando:
sudo apt-get install progress
Instalar progress
en Fedora, use este comando:
sudo dnf install progress
Instalar progress
en Manjaro, use este comando:
sudo pacman -Syu progress
El progreso de los comandos funciona con
Mecanografía progress
en una ventana de terminal y presionando Enter le dará una lista de los comandos que progress
funciona con.
progress
Uso del progreso con tuberías
Hay dos técnicas que podemos utilizar para monitorear comandos con progress
. La primera es usar tuberías.
los tar
comando está en el listado de comandos admitidos que progress
puede monitorear, por lo tanto usemos tar
.
Las alternativas que usaremos son las estándar -c
(crear archivo), -z
(comprimir con gzip) y -f
(nombre de archivo) opciones. 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”.
Estamos canalizando eso en progress
y usando el -m
(monitor) opción así progress
sigue informando sobre el procedimiento hasta que se haya completado.
tar -czf help.tgz ./help-files/ | progress -m
La ventana de la terminal mostrará el progreso de la tar
comando mientras crea el archivo.
A medida que se procesa cada archivo, se enumera con la próxima información:
- El ID del procedimiento.
- El nombre del procedimiento.
- Porcentaje completado.
- Datos procesados y tamaño total del archivo.
- Tasa de datos (rendimiento).
- Tiempo restante estimado (ETA).
Es factible que se sorprenda al ver aparecer un segundo conjunto de datos. Este primer conjunto de datos es para tar
. El segundo es para gzip
. tar
llamadas gzip
para realizar la compresión. Debido a que gzip
está en el listado de comandos admitidos, progress
informes al respecto.
Uso del progreso en el modo de monitorización continua
Puedes utilizar progress
en un modo de monitorización continua en tiempo real usando la opción -M (monitor).
Escriba el siguiente comando en una ventana de terminal:
progress -M
progress
informará que no hay comandos ejecutándose para monitorear. Pero no regresa a la línea de comando. progress
espera hasta que se inicia un comando que puede supervisar. Entonces comenzará a informar automáticamente sobre él.
En otra ventana de terminal, escriba un comando que esté en el listado de comandos que el progreso puede monitorear.
Vamos a utilizar cat
. Los comandos que terminan demasiado rápido no se registrarán con progress
, por lo que enumeraremos el contenido de un archivo de texto muy inmenso.
cat words.page
En la ventana de terminal con progress
en él, verá las estadísticas de cat
comando a medida que se ejecuta y trabaja hasta su finalización.
Cuando cat
termina de listar el archivo progress
vuelve a su estado de espera.
Cada vez que uno de los comandos sobre los que puede informar realiza una tarea considerable, progress
lo supervisará e informará automáticamente al respecto.
Eso es bastante bueno.
100% completado
Elimine las conjeturas de preguntarse cómo está funcionando un comando de larga duración y tómese un descanso de contemplar su cursor con pv
y progress
.
setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);