https://esgeeks.com/?p=4049
GNU Parallel: Ejecutar comandos simultáneamente en Linux
5 (100%) 11 votes

Aprende cómo ejecutar comandos simultáneamente en Linux con GNU Parallel. Tu centro de datos depende Linux, entonces ¿por qué no aprovechar al máximo la línea de comandos con GNU Parallel?

Si te encuentras en una situación en la que necesitas ejecutar varios comandos al mismo tiempo (por ejemplo, en los servidores Linux de un centro de datos), ¿qué haces? GNU Parallel es una alternativa interesante que debes conocer.

Cuando se ejecutan comandos en Linux, ya sea uno a la vez en la línea de comandos o desde un script de bash, los comandos se ejecutan en secuencia. El primer comando se ejecuta, seguido por el segundo, seguido por el tercero. Es cierto, el tiempo entre los comandos es tan minúsculo, que el ojo humano no se daría cuenta. Pero para algunos casos, puede que no sea el medio más eficiente para ejecutar comandos.

1. ¿Qué es GNU Parallel?

¿Alguna vez tuviste la extraña sensación de que tu computadora no es tan rápida como debería ser? Solía ​​sentirme así, y luego encontré GNU Parallel. GNU Parallel es una herramienta de shell que permite la ejecución de trabajos en paralelo.

Un trabajo puede ser un único comando o entrada de un archivo que contiene elementos tales como una lista de comandos, una lista de archivos, una lista de hosts, una lista de usuarios, una lista de URL o una lista de tablas. GNU Parallel también puede tomar información de un comando con pipes (|)

Quiero mostrarte cómo instalar GNU Parallel y luego los conceptos básicos de su uso.


2. Instalación

GNU Parallel se puede instalar en casi cualquier distribución de Linux. Dado que GNU Parallel se encuentra en el repositorio estándar, la instalación es simple. Abra una ventana de terminal y emita el siguiente comando:

#Ubuntu
sudo apt install parallel
#Fedora
sudo dnf install parallel
Instalación de GNU Parallel

Instalación de GNU Parallel en Linux

Una vez finalizada la instalación, querrás silenciar el banner de citación. Esto se pone en marcha para asegurar que cualquiera que use Paralelo de GNU puedan ver la cita de los desarrolladores.

GNU Parallel --will-cite

–will-cite en GNU Parallel

Para silenciar el banner de citas, emita el comando:

parallel --bibtex

A continuación, se le dará la información de citas y se le pedirá que escriba lo siguiente:

will cite

Ahora está listo para usar GNU Parallel.

3. Uso de GNU Parallel

La forma más sencilla de demostrar GNU Parallel es utilizando el comando echo. Digamos que queremos usar el comando echo para imprimir uno dos tres cuatro. El comando para esto sería:

echo "uno dos tres cuatro"

Ese mismo comando, usando parallel sería:

parallel echo ::: uno dos tres cuatro

La salida para lo anterior se vería así:

Uso de GNU Parallel con echo

Uso de Parallel con echo

También podríamos dar dos datos de entrada de esta manera:

parallel echo ::: 1 2 3 4 ::: A B C D
parallel echo con datos entrada

parallel echo con datos entrada

Como puede ver, delimitamos el comando desde las variables de entrada con los caracteres :::. También puede utilizar archivos como entrada para el comando. Déjame demostrarte. Cree dos archivos. El primero, llamado abc con el contenido:

A
B
C
D
E
F
G
H
I
K

El segundo archivo, denominado 123, que tendrá como contenido:

1
2
3
4
5
6
7
8
9
10

Ahora usamos esos dos archivos para generar resultados. El comando para esto podría verse así:

parallel -a abc -a 123 echo
parallel echo con archivos

Uso de parallel echo con archivos

Ahora, si tus archivos de entrada no tienen la misma longitud, ¿qué se hace? GNU Parallel ajustará la salida del archivo más corto, por lo que coincidirá con el archivo más largo. Sin embargo, ¿qué pasa si queremos ganar un poco más de control de esa salida? En lugar de la repetición paralela de GNU (para hacer coincidir las entradas):


1 A
1 A
1 A
1 A
1 A
2 B
2 B
2 B
2 B
2 B

Es posible utilizar el argumento –xapply. Digamos que tenemos el archivo 123-10 con 10 líneas de entrada (1,2,3,4,5,6,7,8,9,10 – un número por línea) y el archivo abc-5 con cinco líneas de entrada (A,B,C,D,E – un carácter por línea). Emita el comando:

parallel --xapply -a 123-10 -a abc-5 echo

Verá que GNU Parallel solo imprimirá los contenidos de 123-10 una vez, pero repetirá los contenidos del archivo abc-5 hasta que coincida con la longitud de 10 archivos:

Comando parallel con --xapply

Comando parallel con –xapply

4. Uso con comandos

Hasta ahora solo hemos estado usando el comando echo para generar caracteres. Veamos un ejemplo que realmente usa comandos. Digamos que tenemos un directorio llamado TEST. Dentro de esa carpeta hay un archivo llamado archivo y un subdirectorio llamado C1 que contiene los archivos archivo y archivo2.

Uso de parallel con comandos

Uso de parallel con comandos

Digamos que queremos cambiar el nombre de archivo a archivo1, cambiar el nombre de archivo1 a archivo2, hacer tar a la carpeta C1 y luego renombrar ese archivo tar. Entonces podríamos crear un archivo con los siguientes contenidos:

mv archivo archivo1
mv archivo1 archivo2
tar cfz C1.tar.gz C1
mv C1.tar.gz C2.tar.gz

Guarde y cierre ese archivo, nombrándolo como geek (para este ejemplo). Ahora tomamos la información de los ‘trabajos’ con el comando parallel, así:

parallel --jobs 4 < geek

La opción –jobs indica a GNU Parallel cuántos comandos se permiten ejecutar. En nuestro caso, tenemos 4 comandos. Si hubiera más comandos que jobs permitidos, los comandos restantes se colocarían en una cola. En términos generales, es seguro permitir más trabajos que comandos. Entonces emitiendo el comando:

parallel --jobs 6 < geek

Estaría bien.

Comandos parallel --jobs

Comandos parallel para varias tareas

No habrá salida del comando. Si cambia al directorio TEST, verá que todo ha cambiado, de acuerdo con nuestro archivo de comandos de entrada.

5. Conclusión

Acabamos de arañar la superficie de GNU Parallel. Le recomiendo que lea el GNU Parallel tutorial oficial para que pueda entender las complejidades de la herramienta (de las cuales hay muchas). Pero esto le ayudará a empezar a usar los comandos con más eficiencia.

¡Pruébalo hoy! Por favor, ¡No olvides compartirlo! :’)


¡Mantente actualizado!

Suscríbete a nuestro boletín semanal...

Suscríbete a nuestro boletín electrónico para recibir artículos útiles y ofertas especiales. No te perderás absolutamente de nada!

Enviaremos solamente boletines al email y no compartiremos tu email.