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:
- rezultat ukaza - podatki, ki jih je program zasnovan, in
- 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:
- stdin ali 0 - povezan je s tipkovnico, večina programov bere vnos iz te datoteke.
- stdout ali 1 - pritrjen je na zaslon in vsi programi pošljejo svoje rezultate v to datoteko in
- 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:
-
-b
- omogoča, da se vrh zažene v paketnem načinu, tako da lahko njegov izhod preusmerite v datoteko ali drug ukaz. -
-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:
-
-l
- omogoča format dolgega seznama -
-t
- razvrsti glede na čas spremembe, pri čemer so najprej prikazane najnovejše datoteke -
-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:
-
-n 1
- naroči xargs, da uporabijo največ en argument na ukazno vrstico in pošljejo ukazu cp -
cp
- kopira datoteko -
-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.