Spoznajte osnove preusmeritve vhodno-izhodnih (vhodno/izhodnih) sistema Linux


Ena najpomembnejših in najbolj zanimivih tem pod skrbništvom Linuxa je preusmeritev V/I. Ta funkcija ukazne vrstice vam omogoča, da preusmerite vhod in/ali izhod ukazov iz in/ali v datoteke ali združite več ukazov skupaj s pomočjo cevi, da oblikujete tako imenovani\"cevovod ukazov".

Vsi ukazi, ki jih izvajamo, v bistvu ustvarijo dve vrsti rezultatov:

  1. rezultat ukaza - podatki, ki jih je program zasnovan, in
  2. stanje programa in sporočila o napakah, ki uporabnika obveščajo o podrobnostih izvajanja programa.

V Linuxu in drugih sistemih, podobnih Unixu, so spodaj imenovane tri privzete datoteke, ki jih lupina prav tako prepozna s številkami deskriptorjev datotek:

  1. stdin ali 0 - povezan je s tipkovnico, večina programov bere vnos iz te datoteke.
  2. stdout ali 1 - pritrjen je na zaslon in vsi programi pošljejo svoje rezultate v to datoteko in
  3. stderr ali 2 - programi pošiljajo sporočila o stanju/napaki tej datoteki, ki je prav tako priložena zaslonu.

Zato vam I/O preusmeritev omogoča spreminjanje vhodnega vira ukaza in mesta pošiljanja njegovih izhodnih sporočil in sporočil o napakah. In to omogočata operaterja preusmeritve \"<” in \">” .

Kako preusmeriti standardni izhod v datoteko v Linuxu

Standardni izhod lahko preusmerite kot v spodnjem primeru, tukaj želimo shraniti izhod zgornjega ukaza za kasnejši pregled:

$ top -bn 5 >top.log

Kje zastave:

  1. -b - omogoča, da se vrh zažene v paketnem načinu, tako da lahko njegov izhod preusmerite v datoteko ali drug ukaz.
  2. -n - določa število ponovitev pred zaključkom ukaza.

Vsebino datoteke top.log si lahko ogledate z ukazom cat na naslednji način:

$ cat top.log

Če želite dodati izhod ukaza, uporabite operator \">>” .

Če želite na primer dodati izhod zgornjega ukaza zgoraj v datoteko top.log, še posebej znotraj skripta (ali v ukazni vrstici), vnesite spodnjo vrstico:

$ top -bn 5 >>top.log

Opomba: Z uporabo številke deskriptorja datoteke je zgornji ukaz za preusmeritev enak kot:

$ top -bn 5 1>top.log

Kako preusmeriti standardno napako v datoteko v Linuxu

Če želite preusmeriti standardno napako ukaza, morate izrecno določiti številko deskriptorja datoteke, 2 , da lupina razume, kaj poskušate storiti.

Na primer spodnji ukaz ls bo povzročil napako, če ga bo izvedel običajni sistemski uporabnik brez korenskih pravic:

$ ls -l /root/

Standardno napako lahko preusmerite v datoteko, kot je prikazano spodaj:

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

Če želite dodati standardno napako, uporabite spodnji ukaz:

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

Kako preusmeriti standardni izhod/napako v eno datoteko

Prav tako je mogoče v eno datoteko zajeti ves izhod ukaza (tako standardni izhod kot standardno napako). To lahko storite na dva možna načina z določitvijo številk deskriptorjev datotek:

1. Prva je razmeroma stara metoda, ki deluje na naslednji način:

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

Zgornji ukaz pomeni, da bo lupina najprej poslala izhod ukaza ls v datoteko ls-error.log (z uporabo > ls-error.log ), nato pa vsa sporočila o napakah zapiše v deskriptor datoteke 2 (standardni izhod), ki je bil preusmerjen v datoteko ls-error.log (z uporabo 2> & 1 ). Kaže, da je standardna napaka poslana v isto datoteko kot standardni izhod.

2. Druga in neposredna metoda je:

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

Prav tako lahko v eno datoteko dodate standardni izhod in standardno napako tako:

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

Kako preusmeriti standardni vnos v datoteko

Večina, če ne vsi ukazi, dobijo svoj vnos s standardnega vnosa, privzeto pa je standardni vhod pritrjen na tipkovnico.

Če želite standardni vnos preusmeriti iz datoteke, ki ni tipkovnica, uporabite operator \"<” , kot je prikazano spodaj:

$ cat <domains.list 

Kako preusmeriti standardni vhod/izhod v datoteko

Hkrati lahko izvedete standardni vhod in standardno preusmeritev izhoda z ukazom za razvrščanje, kot je prikazano spodaj:

$ sort <domains.list >sort.output

Kako uporabljati preusmeritev V/I s pomočjo cevi

Če želite izhod enega ukaza preusmeriti kot vhod drugega, lahko uporabite cevi, kar je močno sredstvo za gradnjo uporabnih ukaznih vrstic za zapletene operacije.

Na primer, spodnji ukaz bo navedel prvih pet nedavno spremenjenih datotek.

$ ls -lt | head -n 5 

Tu so možnosti:

  1. -l - omogoča format dolgega seznama
  2. -t - razvrsti glede na čas spremembe, pri čemer so najprej prikazane najnovejše datoteke
  3. -n - določa število vrstic glave, ki jih je treba prikazati

Pomembni ukazi za gradnjo cevovodov

Tu bomo na kratko pregledali dva pomembna ukaza za gradnjo cevovodov ukazov, in sicer:

xargs, ki se uporablja za gradnjo in izvajanje ukaznih vrstic iz standardnega vnosa. Spodaj je primer cevovoda, ki uporablja xargs, ta ukaz se uporablja za kopiranje datoteke v več imenikov v Linuxu:

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

In možnosti:

  1. -n 1 - naroči xargs, da uporabijo največ en argument na ukazno vrstico in pošljejo ukazu cp
  2. cp - kopira datoteko
  3. -v - prikazuje napredek ukaza za kopiranje.

Za več možnosti uporabe in informacije preberite stran z informacijami o xargs:

$ man xargs 

Ukaz tee bere iz standardnega vhoda in piše v standardni izhod in datoteke. Kako deluje tee, lahko dokažemo na naslednji način:

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

Naloge skrbništva sistema Linux.

Če želite izvedeti več o filtrih in ceveh Linux, preberite ta članek Poiščite 10 najboljših naslovov IP, ki dostopajo do strežnika Apache, in prikazuje koristen primer uporabe filtrov in cevi.

V tem članku smo razložili osnove preusmeritve V/I v Linuxu. Ne pozabite deliti svojih misli v spodnjem oddelku za povratne informacije.