Omleiding van invoer en uitvoer in Linux/Unix-voorbeelden
⚡ Slimme samenvatting
In Linux en Unix verandert omleiding de locatie waar een commando invoer leest of uitvoer verzendt (swap).ping Het toetsenbord en scherm voor bestanden of apparaten die gebruikmaken van operatoren zoals het groter-dan-teken, het kleiner-dan-teken en de toevoegoperator.

Doorverwijzing is een van de meest nuttige functies van de Linux en de Unix-shell, omdat je daarmee kunt bepalen waar een commando zijn invoer leest en zijn uitvoer naartoe stuurt. Deze pagina legt uitvoer-, invoer- en foutomleiding uit met uitgewerkte voorbeelden.
Wat is omleiding?
Omleiding is een functie in Linux waarmee je, tijdens het uitvoeren van een commando, de standaard invoer- en uitvoerapparaten kunt wijzigen. De basisworkflow van elke Linux-commando Het principe is dat het een invoer ontvangt en een uitvoer geeft.
- Het standaard invoerapparaat (stdin) is het toetsenbord.
- Het standaarduitvoerapparaat (stdout) is het scherm.
Met omleiding kunnen de bovenstaande standaardinvoer en -uitvoer worden gewijzigd.
Uitvoer omleiding
De onderstaande afbeelding markeert het begin van de voorbeelden van uitvoeromleiding.
Het symbool '>' wordt gebruikt voor het omleiden van uitvoer (STDOUT).
Voorbeeld:
ls -al > listings
Hier wordt de uitvoer van het commando `ls -al` omgeleid naar het bestand "listings" in plaats van naar je scherm. De onderstaande schermafbeelding toont het resultaat.
Let op: Gebruik de juiste bestandsnaam bij het omleiden van de uitvoer van een opdracht naar een bestand. Als er al een bestand met dezelfde naam bestaat, verwijdert de omgeleide opdracht de inhoud ervan en overschrijft het vervolgens.
Als u een bestand niet wilt overschrijven, maar wel inhoud aan een bestaand bestand wilt toevoegen, gebruik dan de operator '>>'. De onderstaande schermafbeelding laat zien hoe inhoud is toegevoegd met '>>'.
Je kunt de standaarduitvoer niet alleen naar bestanden, maar ook naar apparaten omleiden.
$ cat music.mp3 > /dev/audio
Het commando `cat` leest het bestand `music`.mp3 en stuurt de uitvoer naar /dev/audio, wat het audioapparaat is. Als de geluidsconfiguratie op uw pc correct is, speelt dit commando het muziekbestand af.mp3.
Invoeromleiding
De onderstaande afbeelding illustreert invoeromleiding.
Het symbool '<' wordt gebruikt voor het omleiden van invoer (STDIN).
Voorbeeld: Met het mailprogramma in Linux kun je e-mails versturen vanuit de terminal.
Je kunt de inhoud van de e-mail typen met het toetsenbord, het standaard invoerapparaat. Maar als je een bestand aan de e-mail wilt toevoegen, kun je de invoeromleidingsoperator gebruiken in het volgende formaat.
mail -s "Subject" to-address < Filename
De onderstaande schermafbeelding laat zien hoe het mailcommando een bestand als invoer leest.
Hiermee wordt het bestand aan de e-mail toegevoegd en naar de ontvanger verzonden.
De bovenstaande voorbeelden waren eenvoudig. Laten we nu eens kijken naar enkele geavanceerde omleidingstechnieken die gebruikmaken van bestandsdescriptors.
Dien in Descriptoren (FD)
In Linux en Unix is alles een bestand. Gewone bestanden, mappen en zelfs apparaten zijn bestanden. Elk bestand heeft een bijbehorend nummer, een zogenaamde bestandsdescriptor (FD).
Het onderstaande diagram toont de standaardstreams en hun bestandsdescriptors.
Je scherm heeft ook een bestandsdescriptor. Wanneer een programma wordt uitgevoerd, wordt de uitvoer naar de bestandsdescriptor van het scherm gestuurd en zie je de programma-uitvoer op je monitor. Als de uitvoer naar de bestandsdescriptor van de printer zou worden gestuurd, zou de programma-uitvoer worden afgedrukt.
Foutomleiding
Wanneer je een programma of commando uitvoert in de terminal, zijn er altijd drie bestanden geopend: standaardinvoer, standaarduitvoer en standaardfout.
Deze bestanden zijn altijd aanwezig wanneer een programma wordt uitgevoerd. Zoals eerder uitgelegd, is aan elk van deze bestanden een bestandsdescriptor gekoppeld.
| Dien in | Dien in Descriptor |
|---|---|
| Standaard invoer STDIN | 0 |
| Standaarduitvoer STDOUT | 1 |
| Standaardfout STDERR | 2 |
Standaard wordt de foutmelding op het scherm weergegeven. Foutomleiding zorgt ervoor dat de foutmeldingen naar een ander bestand dan het scherm worden doorgestuurd.
Waarom foutomleiding?
Foutafhandeling is een van de meest populaire functies van Unix en Linux.
Ervaren Unix-gebruikers weten dat veel commando's enorme hoeveelheden foutmeldingen geven. Bijvoorbeeld, bij het zoeken naar bestanden krijg je vaak de volgende foutmelding: toestemming Foutmeldingen zoals "toegang geweigerd" helpen de persoon die naar een specifiek bestand zoekt meestal niet. Bij het uitvoeren van shellscripts wil je vaak geen foutmeldingen die de normale programma-uitvoer onoverzichtelijk maken.
De oplossing is om de foutmeldingen naar een bestand door te sturen.
Voorbeeld 1
$ myprogram 2>errorsfile
De onderstaande schermafbeelding toont dit commando in de terminal.
Hierboven voeren we een programma uit met de naam myprogram. De bestandsdescriptor voor standaardfout is 2. Met "2>" leiden we de foutmeldingen om naar een bestand met de naam "errorsfile". Op deze manier wordt de programma-uitvoer niet overspoeld met foutmeldingen.
Voorbeeld 2
Hier is nog een voorbeeld waarin de find-opdracht wordt gebruikt.
find . -name 'my*' 2>error.log
Met behulp van het `find`-commando zoeken we in de huidige map "." naar een bestand waarvan de naam begint met "my", en sturen we eventuele fouten naar `error.log`.
Voorbeeld 3: Laten we eens naar een complexer voorbeeld kijken.
Serverbeheerders maken vaak een lijst van mappen en slaan zowel foutmeldingen als standaarduitvoer op in een bestand, dat later kan worden verwerkt. Hier is het commando.
ls Documents ABC> dirlist 2>&1
Het onderstaande diagram laat zien dat beide streams in één bestand worden vastgelegd.
Hier:
- 2>&1 betekent dat STDERR wordt omgeleid naar dezelfde bestemming als STDOUT (namelijk de bestandsdirectorylijst).
- De foutmelding wordt omgeleid naar de standaarduitvoer, die op zijn beurt wordt omgeleid naar het bestand dirlist. Beide streams worden dus naar het bestand dirlist geschreven.
Het onderstaande diagram geeft een overzicht van hoe invoer, uitvoer en foutafhandeling op elkaar aansluiten.






.png)