Omleiding van invoer en uitvoer in Linux/Unix-voorbeelden
Wat is omleiding?
Omleiding is een functie in Linux, zodat u bij het uitvoeren van een opdracht de standaard invoer-/uitvoerapparaten kunt wijzigen. De basisworkflow van elk Linux-commando is dat er een input nodig is en een output ontstaat.
- Het standaard invoerapparaat (stdin) is het toetsenbord.
- Het standaarduitvoerapparaat (stdout) is het scherm.
Met omleiding kan de bovenstaande standaard invoer/uitvoer worden gewijzigd.
Klik hier als de video niet toegankelijk is
Uitvoer omleiding
Ocuco's Medewerkers '>' symbool wordt gebruikt voor output (STDOUT) omleiding.
Voorbeeld:
ls -al > listings
Hier wordt de uitvoer van het commando ls -al omgeleid naar het bestand "lijsten" in plaats van naar uw scherm.
Note: gebruik de juiste bestandsnaam bij het omleiden van opdrachtuitvoer naar een bestand. Als er een bestaand bestand met dezelfde naam is, verwijdert de omgeleide opdracht de inhoud van dat bestand en kan het worden overschreven."
Als u niet wilt dat een bestand wordt overschreven, maar meer inhoud aan een bestaand bestand wilt toevoegen, gebruik dan '>>'beheerder.
U kunt standaarduitvoer omleiden naar niet alleen bestanden, maar ook naar apparaten!
$ cat music.mp3 > /dev/audio
Het cat-commando leest het bestand music.mp3 en stuurt de uitvoer naar /dev/audio, het audioapparaat. Als de geluidsconfiguraties op uw pc correct zijn, zal deze opdracht het bestand music.mp3 afspelen
Invoeromleiding
Ocuco's Medewerkers ''-symbool wordt gebruikt voor invoer(STDIN)-omleiding
Voorbeeld: Met het e-mailprogramma in Linux kunt u e-mails versturen vanuit de Terminal.
U kunt de inhoud van de e-mail typen met het standaard toetsenbord van het apparaat. Maar als u een bestand aan een e-mail wilt toevoegen, kunt u de invoeromleidingsoperator in de volgende indeling gebruiken.
Mail -s "Subject" to-address < Filename
Hiermee wordt het bestand bij de e-mail gevoegd en naar de ontvanger verzonden.
De bovenstaande voorbeelden waren eenvoudig. Laten we eens kijken naar enkele geavanceerde omleidingstechnieken die gebruik maken van File Descriptors.
Dien in Descriptoren (FD)
In Linux/Unix is alles een bestand. Normaal bestand, mappen en zelfs apparaten zijn bestanden. Elk bestand heeft een bijbehorend nummer genaamd Bestand Descriptof (FD).
Je scherm heeft ook een bestand Descriptof. Wanneer een programma wordt uitgevoerd, wordt de uitvoer naar Bestand verzonden Descriptof van het scherm, en u ziet de programma-uitvoer op uw monitor. Als de uitvoer naar File Descriptof van de printer, zou de programma-uitvoer zijn afgedrukt.
Foutomleiding
Wanneer u een programma/opdracht uitvoert op de terminal, zijn er altijd 3 bestanden open, namelijk 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 error stream op het scherm weergegeven. Error redirection is het routeren van de errors naar een ander bestand dan het scherm.
Waarom foutomleiding?
Foutomleiding is een van de zeer populaire functies van Unix / Linux.
Frequente UNIX-gebruikers zullen denken dat veel commando's enorme hoeveelheden fouten opleveren.
- Bijvoorbeeld, bij het zoeken naar bestanden krijg je meestal permission denied foutmeldingen. Deze foutmeldingen helpen de persoon die naar een bepaald bestand zoekt meestal niet.
- Bij het uitvoeren van shellscripts wil je vaak GEEN foutmeldingen die de normale programma-uitvoer vervuilen.
De oplossing is om de foutmeldingen om te leiden naar een bestand.
Voorbeeld 1
$ myprogram 2>errorsfile
Hierboven voeren we een programma uit met de naam myprogram.
De bestandsdescriptor voor standaardfout is 2.
Met behulp van "2>" leiden we de foutuitvoer om naar een bestand met de naam "errorfile"
De programma-uitvoer is dus niet vol met fouten.
Voorbeeld 2
Hier is nog een voorbeeld dat de instructie find gebruikt -
find . -name 'my*' 2>error.log
Met behulp van de opdracht "find" doorzoeken we de huidige directory "." naar een bestand waarvan de "naam" begint met "my".
Voorbeeld 3: Laten we eens een complexer voorbeeld bekijken:
Serverbeheerders maken vaak een lijst van directories en slaan zowel de fout- als de standaarduitvoer op in een bestand, dat later kan worden verwerkt. Hier is de opdracht.
ls Documents ABC> dirlist 2>&1
Hier
- die de uitvoer van het ene bestand naar de invoer van een ander bestand schrijft. 2>&1 betekent dat STDERR doorverwijst naar het doel van STDOUT (dat is de bestandsdirlist)
- We leiden foutuitvoer om naar standaarduitvoer, die op zijn beurt wordt omgeleid naar de bestandslijst. Daarom wordt zowel de uitvoer naar de bestandsmap geschreven
Samenvatting
- Elk bestand in Linux heeft een bijbehorend bestand Descriptof ermee geassocieerd zijn
- Het toetsenbord is het standaard invoerapparaat, terwijl uw scherm het standaard uitvoerapparaat is
- “>” is de uitvoeromleidingsoperator. “>>” voegt uitvoer toe aan een bestaand bestand
- “<” is de invoeromleidingsoperator
- ">&" stuurt de uitvoer van het ene bestand naar het andere.
- U kunt de fout omleiden met behulp van het bijbehorende bestand Descriptof 2.