Léiert d'Grondlage wéi Linux I/O (Input/Output) Viruleedung funktionnéiert


Ee vun de wichtegsten an interessantsten Themen ënner Linux Administratioun ass I/O Viruleedung. Dës Fonktioun vun der Kommandozeil erlaabt Iech den Input an/oder Ausgang vu Kommandoen vun an/oder op Dateien ze redirectéieren, oder e puer Befehle matenee verbannen mat Päifen fir ze bilden wat als Command Pipeline bekannt ass.

All d'Befehle, déi mir lafen, produzéieren grondsätzlech zwou Aarte vun Output:

  1. d'Kommandoresultat - Daten déi de Programm entwéckelt ass fir ze produzéieren, an
  2. de Programmstatus a Fehlermeldungen, déi e Benotzer iwwer d'Ausféierungsdetailer vum Programm informéieren.

A Linux an aner Unix-ähnlech Systemer ginn et dräi Standarddateien hei ënnen genannt, déi och vun der Shell identifizéiert ginn mat Dateideskriptornummeren:

  1. stdin oder 0 - et ass mat der Tastatur ugeschloss, déi meescht Programmer liesen Input vun dëser Datei.
  2. stdout oder 1 - et ass um Écran befestegt, an all Programmer schécken hir Resultater op dës Datei an
  3. stderr oder 2 - Programmer schécken Status-/Fehlermeldungen un dës Datei déi och um Bildschierm verbonnen ass.

Dofir erlaabt d'I/O Viruleedung Iech d'Inputquell vun engem Kommando z'änneren wéi och wou seng Ausgang a Fehlermeldungen geschéckt ginn. An dëst ass méiglech duerch d'\< an \> Viruleedungsoperateuren.

Wéi Redirect Standard Output op Datei am Linux

Dir kënnt Standardoutput viruleiren wéi am Beispill hei drënner, hei wëlle mir den Output vum Top Kommando späicheren fir spéider Inspektioun:

$ top -bn 5 >top.log

Wou d'Fändelen:

  1. -b – erlaabt Top am Batch-Modus ze lafen, sou datt Dir säin Output op eng Datei oder en anere Kommando ëmgeleet.
  2. -n – spezifizéiert d'Zuel vun Iteratiounen ier de Kommando ofgeschloss ass.

Dir kënnt d'Inhalter vun der top.log Datei kucken andeems Dir de Cat Kommando benotzt wéi follegt:

$ cat top.log

Fir den Ausgang vun engem Kommando ze addéieren, benotzt den \>> Bedreiwer.

Zum Beispill fir d'Ausgab vum Top Kommando uewen an der top.log Datei besonnesch an engem Skript (oder op der Kommandozeil) ze addéieren, gitt d'Linn hei drënner:

$ top -bn 5 >>top.log

Bemierkung: Mat der Datei Descriptor Nummer ass den Output Redirect Kommando uewen d'selwecht wéi:

$ top -bn 5 1>top.log

Wéi Redirect Standard Feeler op Datei am Linux

Fir Standardfehler vun engem Kommando ze redirectéieren, musst Dir d'Dateibeschreiwungsnummer explizit spezifizéieren, 2 fir d'Schuel ze verstoen wat Dir probéiert ze maachen.

Zum Beispill de Kommando ls hei drënner wäert e Feeler produzéieren wann et vun engem normale System Benotzer ouni Root Privilegien ausgefouert gëtt:

$ ls -l /root/

Dir kënnt de Standardfehler op eng Datei redirect wéi hei ënnen:

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

Fir de Standardfehler ze addéieren, benotzt de Kommando hei ënnen:

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

Wéi Viruleedung Standard Output/Feeler op eng Datei

Et ass och méiglech all d'Output vun engem Kommando (souwuel Standardausgang a Standardfehler) an eng eenzeg Datei opzehuelen. Dëst kann op zwou méiglech Manéier gemaach ginn andeems Dir d'Dateibeschreiwungsnummeren spezifizéiert:

1. Déi éischt ass eng relativ al Method déi funktionnéiert wéi follegt:

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

De Kommando hei uewen bedeit datt d'Schuel als éischt d'Ausgab vum ls Kommando an d'Datei ls-error.log schéckt (benotzt >ls-error.log), a schreift dann all Fehlermeldungen un de Dateideskriptor 2 (Standardausgang) déi op d'Datei ls-error.log ëmgeleet gouf (mat 2>&1). Implizéiert datt de Standardfehler och an déiselwecht Datei als Standardoutput geschéckt gëtt.

2. Déi zweet an direkt Method ass:

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

Dir kënnt och Standardoutput a Standardfehler op eng eenzeg Datei addéieren wéi sou:

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

Wéi Redirect Standard Input op Datei

Déi meescht wann net all Kommandoen kréien hiren Input vum Standardinput, a Standardinput ass mat der Tastatur befestegt.

Fir Standardinput vun engem anere Fichier wéi d'Tastatur ze redirectéieren, benotzt den \<” Bedreiwer wéi hei ënnen:

$ cat <domains.list 

Wéi Redirect Standard Input/Output op Datei

Dir kënnt Standard Input, Standard Output Viruleedung zur selwechter Zäit mat der Sort Kommando wéi hei ënnen ausféieren:

$ sort <domains.list >sort.output

Wéi benotzen ech I/O Viruleedung mat Pipes

Fir den Ausgang vun engem Kommando als Input vun engem aneren ze redirectéieren, kënnt Dir Päifen benotzen, dëst ass e mächtege Mëttel fir nëtzlech Kommandozeilen fir komplex Operatiounen ze bauen.

Zum Beispill gëtt de Kommando hei ënnen déi Top fënnef kierzlech geännert Dateien.

$ ls -lt | head -n 5 

Hei sinn d'Optiounen:

  1. -l - erlaabt laang Oplëschtungsformat
  2. -t - sortéiert no Ännerungszäit mat den neisten Dateie ginn als éischt gewisen
  3. -n – spezifizéiert d'Zuel vun den Headerlinnen fir ze weisen

Wichteg Kommandoe fir Pipelines ze bauen

Hei wäerte mir zwee wichteg Kommandoe kuerz iwwerpréiwen fir Kommandopipelines ze bauen a si sinn:

xargs déi benotzt gëtt fir Kommandozeilen aus Standardinput ze bauen an auszeféieren. Drënner ass e Beispill vun enger Pipeline déi xargs benotzt, dëse Kommando gëtt benotzt fir eng Datei a verschidde Verzeichnisser am Linux ze kopéieren:

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

An d'Optiounen:

  1. -n 1 - instruéiert xargs fir maximal een Argument pro Kommandozeil ze benotzen an un de cp Kommando ze schécken
  2. cp – kopéiert de Fichier
  3. -v – weist de Fortschrëtt vum Kopie Kommando.

Fir méi Benotzungsoptiounen an Informatioun, liest duerch d'xargs Man Säit:

$ man xargs 

En Tee Kommando liest vum Standardinput a schreift op Standardoutput a Dateien. Mir kënne weisen wéi den Tee funktionnéiert wéi follegt:

$ echo "Testing how tee command works" | tee file1 

Linux System Administratioun Aufgaben.

Fir méi iwwer Linux Filteren a Päifen ze léieren, liest dësen Artikel.

An dësem Artikel hu mir d'Grondlage vun der I/O Viruleedung an Linux erkläert. Denkt drun Är Gedanken iwwer de Feedback Rubrik hei drënner ze deelen.