Startpagina > Omgeving & hulpmiddelen > pipe(|)

De pijp (|) volledig beheersen: Het essentiële hulpmiddel voor het verbinden van commando's

De pipe (pijp) is een mechanisme in de Linux/Unix-shell dat twee of meer commando's met elkaar verbindt, waarbij de standaarduitvoer van het ene commando wordt doorgestuurd naar de standaardinvoer van het volgende commando. Het is een van de kernfuncties van de shell die wordt gebruikt om complexe taken op te splitsen in meerdere eenvoudige commando's en deze sequentieel te verwerken. Het werkt als een waterleiding, waarbij gegevens in één richting stromen.

Overzicht van de pijp

De pijp verwijst naar het '|'-symbool dat in de Linux/Unix-shell wordt gebruikt en heeft de functie om de resultaten van het linkercommando als invoer naar het rechtercommando door te sturen. Hierdoor kunnen gebruikers meerdere commando's combineren om krachtige en flexibele dataprocessing-pijplijnen te bouwen.

Hoe de pijp werkt

De standaarduitvoer (stdout) van het eerste commando wordt opgeslagen in een tijdelijke buffer die door de shell is aangemaakt, en de inhoud van deze buffer wordt doorgestuurd naar de standaardinvoer (stdin) van het tweede commando. Dit proces kan meerdere commando's met elkaar verbinden om een pijplijn te vormen.

Kenmerken van de pijp

  • Eenrichtingsstroom: Gegevens stromen altijd van links naar rechts, slechts in één richting.
  • Gegevenshergebruik: Het resultaat van een eerder commando kan direct als invoer voor het volgende commando worden gebruikt.
  • Modularisatie: Grote en complexe taken kunnen worden opgesplitst in kleinere, eenvoudigere commando's en verwerkt.
  • Efficiëntie: Efficiënt omdat gegevens in het geheugen worden verwerkt zonder dat er tijdelijke bestanden hoeven te worden aangemaakt.

Voorbeelden van pijpgebruik

Ervaar de kracht van de pijp met praktische voorbeelden die laten zien hoe u meerdere commando's kunt combineren.

Zoeken naar een specifiek patroon in een bestandslijst

ls -l | grep json

Toont de bestandslijst van de huidige directory met het `ls -l` commando en zoekt vervolgens met `grep` naar regels die de tekenreeks 'json' bevatten. Deze pijplijn stuurt de uitvoer van `ls -l` door als invoer voor `grep`.

Een specifiek proces vinden in een proceslijst

ps aux | grep nginx | grep -v grep

Controleert alle proceslijsten met het `ps aux` commando en filtert vervolgens alleen de 'nginx' processen met `grep`. Aangezien `grep` zelf ook een proces is, moet het `grep nginx` proces worden uitgesloten.

De 5 grootste bestanden vinden

ls -lh | sort -rh | head -5

Toont een gedetailleerde bestandslijst met `ls -lh`, en sorteert deze vervolgens in omgekeerde volgorde (`-r`) op grootte (dankzij de `-h` optie in een menselijk leesbaar formaat) met `sort -rh`. Tot slot toont `head -5` alleen de top 5 resultaten.

Het aantal .txt bestanden in de huidige directory tellen

ls | grep '.txt' | wc -l

Toont een bestandslijst met `ls`, filtert vervolgens alleen bestanden met de '.txt' extensie met `grep`. Tot slot telt `wc -l` het aantal gefilterde regels (de `-l` optie) om het totale aantal bestanden te verkrijgen.

Bestanden verwijderen door pipe en xargs te combineren

find . -name '*.log' | xargs rm

Vindt bestanden met een specifiek patroon met het `find` commando, en stuurt vervolgens de gevonden bestandslijst via `xargs` door als argumenten naar het `rm` commando om ze te verwijderen. Omdat het moeilijk is om argumenten direct met alleen een pipe aan `rm` door te geven, wordt het samen met `xargs` gebruikt.

Verschil met Omleiding (Redirection)

Omleiding, dat vaak samen met de pijp wordt gebruikt, is vergelijkbaar in die zin dat het de gegevensstroom controleert, maar er zijn belangrijke verschillen in de manier waarop het werkt.

Pijp vs. Omleiding

  • Pipe (`|`): Verbindt de **uitvoer** van één commando met de **invoer** van een ander commando.
  • Omleiding (`>`, `>>`): Stuurt de **uitvoer** van een commando naar een bestand, of stuurt de inhoud van een bestand als **invoer** naar een commando.

Voorbeeld van omleiding

ls -l > file_list.txt

Slaat de resultaten van `ls -l` op in het bestand `file_list.txt`. Dit wordt niet gebruikt als invoer voor een ander commando, maar direct naar het bestand geschreven.


gerelateerde commando's

Functional vergelijkbare of vaak samen gebruikte commando's.


Hétzelfde categoriecommando