Twee krachtige functies van de Linux-opdrachtregelshell zijn omleiding en pipes waarmee de uitvoer (of zelfs invoer) van een programma naar een bestand of een ander programma kan worden verzonden. Mogelijk hebt u deze functies al gebruikt zonder u hiervan bewust te zijn. Wanneer u het teken " > " in een opdracht hebt gebruikt of " | "Dan heb je respectievelijk een omleiding of een pijp gebruikt.

Op alle Unix-achtige besturingssystemen, zoals Linux en FreeBSD, gaat de uitvoer van een opdrachtregelprogramma automatisch naar een plaats die bekend staat als standaarduitvoer (stdout). Standaard is standaard het scherm (de console) maar dat kan worden gewijzigd met behulp van leidingen en omleiding. Evenzo wordt het toetsenbord beschouwd als de standaardinvoer (stdin) en kan het, net als bij standaarduitgangen, worden gewijzigd.

pipes

Met pipes kunt u de uitvoer van de ene opdracht naar de andere leiden, waar deze als invoer wordt gebruikt. Met andere woorden, de standaarduitvoer van het ene programma wordt de standaardinvoer voor een ander.

Het " more " commando neemt de standaard invoer en pagineert het op de standaard uitvoer (het scherm). Dit betekent dat als een opdracht meer informatie toont dan op één scherm kan worden getoond, het programma " more " zal pauzeren nadat het eerste scherm vol is (pagina) en wacht tot de gebruiker op SPATIE drukt om de volgende pagina te zien of RETOUR om de volgende regel.

Hier is een voorbeeld van een lijst met alle bestanden, met details ( -la ) in de /dev directory en de uitvoer naar more . De /dev directory moet tientallen bestanden bevatten en dus zorgen dat more paginaten nodig zijn.

 ls -la / dev | meer 

Let op de - --More-- vraag aan de onderkant van het scherm. Druk op SPATIE om de volgende pagina te bekijken en druk op SPATIE totdat de uitvoer is voltooid.

Hier is nog een pijp voorbeeld, dit keer met behulp van de " wc " (woordentelling) tool.

 ls -1 / dev | wc 

wc telt het aantal regels, woorden en tekens in de standaardinvoer. Als u de parameter -l, wordt alleen het aantal regels weergegeven, wat een goede manier is om te zien hoeveel bestanden zich in een map bevinden!

De In depth Look bij Linux's Archiving en Compression Commands tutorial heeft een voorbeeld met behulp van tar en 7-Zip samen:

 tar cvf - * | 7zr a -si somefiles.tar.7z 

In dit geval geeft het koppelteken na de f optie aan dat tar de uitvoer naar de standaarduitvoer stuurt en niet naar een bestand. De uitvoer van tar zal door de pijp worden gevoerd in 7zr, die wacht op invoer van standaard in als gevolg van de optie -si.

Redirection

Doorverwijzing lijkt op pijpen behalve het gebruik van bestanden in plaats van een ander programma. De standaarduitvoer voor een programma is het scherm. Met behulp van het > (groter dan) symbool kan de uitvoer van een programma naar een bestand worden verzonden. Hier is weer een directorylijst van /dev, maar deze keer omgeleid naar een bestand met de naam listing.txt

 ls -la> listing.txt 

Er zal niets op de terminal worden weergegeven omdat alles naar het bestand is verzonden. U kunt het bestand bekijken met behulp van het cat commando (dat kan worden ingevoegd in more ) of voor het gemak kunt u alleen het more command op zichzelf gebruiken:

 meer listing.txt 

Als listing.txt al bestond, wordt het overschreven. Maar je kunt toevoegen aan een bestaand bestand met >> zoals dit:

 ls -la / home> listing.txt ls -la / dev >> listing.txt 

De eerste omleiding overschrijft het bestand listing.txt terwijl het tweede eraan toevoegt.

De cat opdracht kan worden gebruikt om een ​​bestand te maken met behulp van omleiding, bijvoorbeeld:

 cat> atextfile.txt 

Nu wordt elke tekst die u typt verzonden naar het bestand atextfile.txt totdat u op Control-D drukt. Op dat moment wordt het bestand gesloten en keert u terug naar de opdrachtprompt. Als u meer tekst aan het bestand wilt toevoegen, gebruikt u hetzelfde commando maar met twee groter dan tekens ( >> ).

Conclusie

Veel van Linux commandoregelprogramma's zijn ontworpen om te werken met omleiding en pijpen, probeer ermee te experimenteren en te zien hoe ze met elkaar omgaan. De uitvoer van de opdracht ps, die de huidige processen vermeldt, kan bijvoorbeeld in grep worden grep . Kijk of je kunt uitzoeken hoe je de processen van root in een lijst kunt opnemen.