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.

Uitvoer 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.

Uitvoer omleiding

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.

Uitvoer omleiding

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

Invoeromleiding

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

Invoeromleiding

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..

Foutomleiding

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

Waarom foutomleiding

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".

Waarom foutomleiding

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

Waarom foutomleiding

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.