Sådan køres Linux-kommandoer samtidigt med GNU Parallel

Når du kører kommandoer på Linux, hvad enten de er ad gangen ad gangen eller fra et bash-script, kører disse kommandoer i rækkefølge. Den første kommando kører, efterfulgt af den anden, efterfulgt af den tredje. Indrømmet, tiden mellem kommandoer er så ubetydelig, det blotte øje ville ikke bemærke det. I nogle tilfælde er det måske ikke det mest effektive middel til at køre kommandoer. Hvis du befinder dig i en situation, hvor du har brug for flere kommandoer, der skal køres nøjagtigt på samme tid (sige på dit datacenter Linux-servere), hvad gør du så?
Datacenter skal læses
- 8 datacenters forudsigelser for 2020
- 7 netværksforudsigelser for 2020: Automation, edge computing, Wi-Fi 6 og mere
- Bedste praksis for server virtualisering og tip til, hvad man ikke skal gøre
- Kvanteberegning: Syv sandheder, du har brug for at vide
Du vender dig til GNU Parallel.
Hvad er GNU-parallel?
GNU Parallel er et shell-værktøj, der gør det muligt at udføre job parallelt ved hjælp af en eller flere computere. Et job kan være en enkelt kommando eller input fra en fil, der indeholder ting som en liste over kommandoer, en liste over filer, en liste over værter, en liste over brugere, en liste med URL'er eller en liste med tabeller. GNU Parallel kan også tage information fra en pipette-kommando.
Jeg vil gerne vise dig, hvordan du installerer GNU Parallel og derefter det grundlæggende i brugen af det.
Installation
Jeg vil demonstrere på en Ubuntu Server 16.04. GNU Parallel kan installeres på næsten enhver Linux-distribution, så hvis du bruger en anden distribution end Ubuntu, skal du ændre installationskommandoen, så den passer til din platform.
Da GNU Parallel findes i standardlageret, er installationen enkel. Åbn et terminalvindue og udsend kommandoen:
sudo apt installeres parallelt
Når installationen er afsluttet, ønsker du at afbryde citeringsbanneret. Dette er på plads for at sikre, at alle, der bruger GNU Parallel til publican-citerer udviklerne.
For at dæmpe citeringsbanneret skal du udstede kommandoen parallelt - bibliotek . Derefter får du citeringsinformationen og bliver bedt om at skrive citerer ( figur A ).
Figur A

Hvis du ikke ønsker at nævne udviklerne, kan du altid betale 10000 EUR.
Du er nu klar til at bruge GNU Parallel.
Anvendelse
Den enkleste måde at demonstrere GNU Parallel på er at bruge ekko-kommandoen. Lad os sige, at vi vil bruge ekko-kommandoen til at udskrive en to tre tre fire. Kommandoen for dette ville være:
ekko "en to tre fire fire"
Outputet ville se sådan ud i figur B.
Figur B

Vores ekko output.
Samme kommando ved hjælp af parallel ville være:
parallelt ekko ::: en to tre fire fire
Outputet til ovenstående ville se sådan ud i figur C.
Fig

Vores parallelle version af ekko.
Vi kunne også give to stykker inputdata som sådan:
parallelt ekko ::: 1 2 3 4 ::: ABCD
Outputet til ovennævnte kommando vil se ud som vist i figur D.
Figur D

To inputkilder fra kommandolinjen.
Som du kan se, afgrænser vi kommandoen fra inputvariablerne med :::-tegnene. Du kan også bruge filer som input til kommandoen. Lad mig demonstrere. Opret to filer. Den første, navngivet abc-fil med indholdet:
ABCDEFGHIK
Den anden fil, kaldet 123-fil, har indholdet:
1 2 3 4 5 6 7 8 9 10
Nu bruger vi disse to filer til at generere output. Kommandoen til dette kan se ud:
parallel-en abc-fil-et 123-fil ekko
Outputet ser ud som vist i figur E.
Figur E

Input fra en fil ser sådan ud.
Hvis dine input-filer ikke er af samme længde, hvad gør du så? GNU Parallel pakker output af den kortere fil, så den matcher med den længere fil. Outputet vil være det samme som i figur E (ovenfor). Hvad nu, hvis vi ønsker at få lidt mere kontrol over dette output. I stedet for at GNU parallelt gentager (For at matche inputene):
1 A 1 A 1 A 1 A 1 A 2 B 2 B 2 B 2 B 2 B
Det er muligt at gøre brug af argumentet -applik . Lad os sige, at vi har 10-filen med 10 inputlinjer (12345678910 - et tal pr. Linje) og 5-filen med fem linjer input (ABCDE - et tal pr. Linje). Giv kommandoen:
parallel --applik-en 10-fil-et 5-fil ekko
Du vil se, at GNU Parallel kun udskriver indholdet af 10-filer én gang, men gentager indholdet af 5-filer, indtil det matcher længden på 10-fil ( figur F ).
Figur F

Indpakning af output med - så hurtigt som muligt.
Brug med kommandoer
Indtil videre har vi lige brugt ekko-kommandoen til at sende tegn. Lad os se et eksempel, der faktisk bruger kommandoer. Lad os sige, at vi har et bibliotek, der hedder TEST. Inde i den mappe er der en fil, der kaldes test og en undermappe, der kaldes 1, som indeholder filtesten og test2. Lad os sige, at vi vil omdøbe test til test1, omdøbe test1 til test2, tjære 1-biblioteket og derefter omdøbe det tarredede bibliotek. Vi kunne oprette en fil med følgende indhold:
mv test test1 mv test1 test2 tar cfz 1.tar.gz 1 mv 1.tar.gz 2.tar.gz
Gem og luk filen, ved at navngive den job. Nu tager vi input fra job med den parallelle kommando, sådan:
parallel --jobs 4 <job
Indstillingen --jobs instruerer GNU Parallel, hvor mange kommandoer der er tilladt at køre. I vores tilfælde har vi 4 kommandoer. Hvis der var flere kommandoer end tilladte job, ville de resterende kommandoer blive placeret i en kø. Generelt er det sikkert at tillade flere job, end du har kommandoer. Så udsteder kommandoen:
parallel --jobs 6 <job
Ville være fint.
Der kommer ingen output fra kommandoen. Hvis du skifter til TEST-biblioteket, vil du se, at alt er ændret i henhold til vores input-kommandofil.
Skraber overfladen
Vi har kun lige ridset overfladen på GNU Parallel. Jeg anbefaler stærkt, at du giver den officielle GNU-parallelvejledning en læsning og ser denne video-tutorial-serie på Yutube, så du kan forstå kompleksiteten af værktøjet (hvoraf der er mange). Men dette vil komme i gang på en vej til at hjælpe dit datacenter Linux-servere med at bruge kommandoer med mere effektivitet.
Datacenter Trends Nyhedsbrev
DevOps, virtualisering, hybrid sky, opbevaring og driftseffektivitet er blot nogle af de datacenteremner, vi vil fremhæve. Leveres mandage og onsdage
Tilmeld dig i dag