Zoeken op website

Leer de basisprincipes van hoe Linux I/O (Input/Output)-omleiding werkt


Een van de belangrijkste en interessantste onderwerpen onder Linux-beheer is I/O-omleiding. Met deze functie van de opdrachtregel kunt u de invoer en/of uitvoer van opdrachten van en/of naar bestanden omleiden, of meerdere opdrachten samenvoegen met behulp van pipelines om zo een zogenaamde “opdrachtpijplijn” te vormen. .

Alle opdrachten die we uitvoeren, produceren in principe twee soorten uitvoer:

  1. het opdrachtresultaat – gegevens waarvoor het programma is ontworpen, en
  2. de programmastatus en foutmeldingen die een gebruiker informeren over de details van de programma-uitvoering.

In Linux en andere Unix-achtige systemen zijn er drie standaardbestanden die hieronder worden genoemd en die ook door de shell worden geïdentificeerd met behulp van bestandsdescriptornummers:

  1. stdin of 0 – het is verbonden met het toetsenbord, de meeste programma's lezen invoer uit dit bestand.
  2. stdout of 1 – het is aan het scherm gekoppeld en alle programma's sturen hun resultaten naar dit bestand en
  3. stderr of 2 – programma's sturen status-/foutmeldingen naar dit bestand dat ook aan het scherm is gekoppeld.

Daarom kunt u met I/O-omleiding de invoerbron van een opdracht wijzigen, evenals waar de uitvoer- en foutmeldingen naartoe worden verzonden. En dit wordt mogelijk gemaakt door de omleidingsoperatoren “< ” en “> ”.

Hoe u standaarduitvoer naar een bestand kunt omleiden in Linux

U kunt de standaarduitvoer omleiden zoals in het onderstaande voorbeeld. Hier willen we de uitvoer van het topcommando opslaan voor latere inspectie:

top -bn 5 >top.log

Waar de vlaggen:

  1. -b – zorgt ervoor dat top in batchmodus kan worden uitgevoerd, zodat u de uitvoer ervan kunt omleiden naar een bestand of een ander commando.
  2. -n – specificeert het aantal iteraties voordat de opdracht eindigt.

U kunt de inhoud van het bestand top.log als volgt bekijken met de opdracht cat:

cat top.log

Om de uitvoer van een commando toe te voegen, gebruik je de operator “>> ”.

Om bijvoorbeeld de uitvoer van het commando top hierboven toe te voegen aan het bestand top.log, vooral binnen een script (of op de opdrachtregel), voert u de onderstaande regel in:

top -bn 5 >>top.log

Opmerking: als u het bestandsdescriptornummer gebruikt, is het bovenstaande uitvoeromleidingscommando hetzelfde als:

top -bn 5 1>top.log

Hoe u een standaardfout kunt omleiden naar een bestand in Linux

Om de standaardfout van een opdracht om te leiden, moet u expliciet het bestandsdescriptornummer 2 opgeven, zodat de shell begrijpt wat u probeert te doen.

Het onderstaande ls-commando zal bijvoorbeeld een fout opleveren wanneer het wordt uitgevoerd door een normale systeemgebruiker zonder rootrechten:

ls -l /root/

U kunt de standaardfout omleiden naar een bestand, zoals hieronder:

ls -l /root/ 2>ls-error.log
cat ls-error.log 

Gebruik de onderstaande opdracht om de standaardfout toe te voegen:

ls -l /root/ 2>>ls-error.log

Hoe u standaarduitvoer/fout naar één bestand kunt omleiden

Het is ook mogelijk om alle uitvoer van een opdracht (zowel standaarduitvoer als standaardfout) in één bestand vast te leggen. Dit kan op twee mogelijke manieren worden gedaan door de bestandsdescriptornummers op te geven:

1. De eerste is een relatief oude methode die als volgt werkt:

ls -l /root/ >ls-error.log 2>&1

Het bovenstaande commando betekent dat de shell eerst de uitvoer van het ls-commando naar het bestand ls-error.log zal sturen (met behulp van >ls-error.log), en vervolgens schrijft alle foutmeldingen naar de bestandsdescriptor 2 (standaarduitvoer) die is omgeleid naar het bestand ls-error.log (met behulp van 2>&1 ). Dit impliceert dat de standaardfout ook naar hetzelfde bestand wordt verzonden als de standaarduitvoer.

2. De tweede en directe methode is:

ls -l /root/ &>ls-error.log

U kunt net zo goed standaarduitvoer en standaardfout aan een enkel bestand toevoegen, zoals:

ls -l /root/ &>>ls-error.log

Hoe u standaardinvoer naar een bestand kunt omleiden

De meeste, zo niet alle, opdrachten krijgen hun invoer van standaardinvoer, en standaardinvoer is standaard aan het toetsenbord gekoppeld.

Om standaardinvoer vanuit een ander bestand dan het toetsenbord om te leiden, gebruikt u de operator “< ”, zoals hieronder:

cat <domains.list 

Hoe u standaardinvoer/uitvoer naar een bestand kunt omleiden

U kunt tegelijkertijd standaardinvoer en standaarduitvoeromleiding uitvoeren met behulp van de sorteeropdracht, zoals hieronder:

sort <domains.list >sort.output

I/O-omleiding gebruiken met behulp van Pipes

Om de uitvoer van het ene commando om te leiden als invoer van een ander commando, kun je pipelines gebruiken. Dit is een krachtig middel om nuttige commandoregels te bouwen voor complexe operaties.

Met de onderstaande opdracht worden bijvoorbeeld de vijf meest recentelijk gewijzigde bestanden weergegeven.

ls -lt | head -n 5 

Hier de opties:

  1. -l – maakt lange lijstindeling mogelijk
  2. -t – sorteer op wijzigingstijd, waarbij de nieuwste bestanden eerst worden getoond
  3. -n – specificeert het aantal headerregels dat moet worden weergegeven

Belangrijke opdrachten voor het bouwen van pijpleidingen

Hier zullen we kort twee belangrijke opdrachten voor het bouwen van commandopijplijnen bespreken, en deze zijn:

xargs dat wordt gebruikt om opdrachtregels op te bouwen en uit te voeren op basis van standaardinvoer. Hieronder staat een voorbeeld van een pijplijn die xargs gebruikt. Deze opdracht wordt gebruikt om een bestand naar meerdere mappen in Linux te kopiëren:

echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

En de opties:

  1. -n 1 – instrueert xargs om maximaal één argument per opdrachtregel te gebruiken en naar het cp-commando te sturen
  2. cp – kopieert het bestand
  3. -v – geeft de voortgang van het kopieercommando weer.

Voor meer gebruiksopties en informatie, lees de xargs manpagina:

man xargs 

Een tee-opdracht leest van standaardinvoer en schrijft naar standaarduitvoer en bestanden. We kunnen als volgt demonstreren hoe tee werkt:

echo "Testing how tee command works" | tee file1 

Bestands- of tekstfilters worden vaak gebruikt met pipelines voor effectieve Linux-bestandsbewerkingen, om informatie op krachtige manieren te verwerken, zoals het herstructureren van de uitvoer van opdrachten (dit kan van vitaal belang zijn voor het genereren van nuttige Linux-rapporten), het wijzigen van tekst in bestanden en verschillende andere Linux-systeembeheersmethoden. taken.

Voor meer informatie over Linux-filters en -pipes leest u dit artikel Vind de top 10 IP-adressen die toegang hebben tot Apache Server. Hier vindt u een handig voorbeeld van het gebruik van filters en pipelines.

In dit artikel hebben we de grondbeginselen van I/O-omleiding in Linux uitgelegd. Vergeet niet om uw mening te delen via het feedbackgedeelte hieronder.