Los Mejores Trucos
TRUCOS
Los Mejores Trucos
2024-08-11
Por
Tamariz el de la Perdiz

Mostrar el progreso de dd

La aplicación dd nos permite copiar ficheros a bajo nivel, lo que incluye volcar discos duros enteros en un fichero. En este caso, el proceso puede durar bastante tiempo y por defecto, dd no muestra nada en pantalla. Podemos obtener información sobre enviando la señal SIGUSR1 a dd con un comando como:

$ killall -USR1 dd

El terminal ejecutando dd mostrará algo como esto:

$ dd if=/dev/zero bs=1 count=5M of=aa
841252+0 records in
841252+0 records out
841252 bytes (841 kB, 822 KiB) copied, 1.31938 s, 638 kB/s

Si queremos monitorizar periódicamente el estado de dd podemos enviar la señal cada cierto tiempoi (10 segundos en el ejemplo de abajo):

$ watch -n10 killall -USR1 dd

Mostrar el progreso de dd de forma interactiva

Si somos más de barras de progreso, podemos utilizar la utilidad pv que es capaz de conectar la salida estándar de un programa con la entrada estándar de otro, contando los datos que se transfieren y mostrando una barra de progreso.

El siguiente comando comprime y almacena en un fichero la primera partición de la tarjeta SD de un SBC:

$ dd if=/dev/mmcblk0 | pv -s 4G -peta | gzip -1 > /media/sda1/sd_backup.img.gz

Como podéis ver, es necesario pasar el tamaño máximo de los datos a transferir de forma que pueda calcular el porcentaje de los datos transferidos. En el caso de una tarjeta SD probablemente lo sepamos. En otros casos deberemos calcularlo.

Descargar páginas web desde bash

Bash ofrece ciertas capacidades de red que nos permite enviar o recibir datos usando TCP/IP desde nuestros scripts. Estas funciones son raramente usadas, pero en ocasiones nos pueden resultar útil… por ejemplo, si en un apuro resulta que no tenemos ni wget, ni curl, ni lynx,…. Una forma de descargar una página web o cualquier fichero usando HTTP sería:

$ exec 3<>/dev/tcp/HOST/PUERTO
$ echo -e "GET /index.html" >&3
$ cat <&3

La primera línea crea un descriptor de ficheros asociado a una conexión TCP al host y puerto indicado. Una vez creado podemos leer y escribir de ese descriptor. La segunda línea realiza una petición GET del fichero index.html y la última línea lee el resultado del servidor. Podemos usar esto con cualquier servicio TCP que se pueda ejecutar de forma interactiva.

Usos avanzados de scp

La utilidad scp usa la infraestructura ofrecida por ssh para copiar ficheros entre máquinas de forma seguro y versátil. Estas son algunas cosas que podemos hacer con scp:

$ scp -l 400 origen destino

Este comando limitará el ancho de banda usado a 400 kps o si lo preferís 50KB/s

$ scp -3 origen destino

Este comando copiará los datos desde la máquina de origen a la máquina destino usando la máquina actual como punto intermedio. De esta forma es posible copiar ficheros entre dos máquinas que no se pueden comunicar entre si, utilizando una tercera máquina que puede conectarse con las dos. En este modo es recomendable configurar el acceso a las máquinas sin contraseña o de lo contrarío la situación puede ser un poco confusa.

$ scp -R origen destino

Este comando es similar al anterior, pero en este caso estaremos conectándonos a origen usando ssh y ejecutando scp desde allí. Este modo requiere que origen pueda autenticarse en el host destino sin utilizar contraseña.

Header Image Credits: Anete Lusina

SOBRE Tamariz el de la Perdiz
Tamaríz es un mago de la línea de comandos, un ilusionista de las pipes, un nigromante guardián de las ancestrales herramientas olvidadas por los mortales. Vamos, el tío de la sección de trucos.

 
Tu publicidad aquí :)