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.