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.
■