Sužinokite, kaip veikia Linux I/O (įvesties/išvesties) peradresavimas


Viena iš svarbiausių ir įdomiausių Linux administravimo temų yra I/O peradresavimas. Ši komandų eilutės funkcija leidžia nukreipti komandų įvestį ir (arba) išvestį iš ir (arba) į failus arba sujungti kelias komandas naudojant vamzdžius, kad sudarytumėte vadinamąjį „komandų konvejerį“. .

Visos mūsų vykdomos komandos iš esmės sukuria dviejų rūšių išvestį:

  1. komandos rezultatas – duomenys, kuriuos programa skirta sukurti, ir
  2. programos būsena ir klaidų pranešimai, informuojantys vartotoją apie programos vykdymo detales.

„Linux“ ir kitose „Unix“ tipo sistemose yra trys numatytieji failai, pavadinti toliau, kuriuos taip pat atpažįsta apvalkalas, naudojant failo deskriptorių numerius:

  1. stdin arba 0 – jis prijungtas prie klaviatūros, dauguma programų nuskaito įvestį iš šio failo.
  2. stdout arba 1 – jis pridedamas prie ekrano, o visos programos siunčia rezultatus į šį failą ir
  3. stderr arba 2 – programos siunčia būsenos/klaidų pranešimus į šį failą, kuris taip pat pridedamas prie ekrano.

Todėl I/O peradresavimas leidžia pakeisti komandos įvesties šaltinį, taip pat kur siunčiami jos išvesties ir klaidų pranešimai. Ir tai įmanoma naudojant “< ” ir „> ” peradresavimo operatorius.

Kaip peradresuoti standartinę išvestį į failą sistemoje „Linux“.

Galite peradresuoti standartinę išvestį, kaip parodyta toliau pateiktame pavyzdyje, čia norime išsaugoti viršutinės komandos išvestį vėlesniam patikrinimui:

top -bn 5 >top.log

Kur vėliavos:

  1. -b – įgalina top paleisti paketiniu režimu, kad galėtumėte nukreipti jo išvestį į failą ar kitą komandą.
  2. -n – nurodo iteracijų skaičių prieš baigiant komandą.

Galite peržiūrėti failo top.log turinį naudodami cat komandą taip:

cat top.log

Norėdami pridėti komandos išvestį, naudokite operatorių ">> ".

Pavyzdžiui, norėdami pridėti aukščiau esančios komandos išvestį top.log faile, ypač scenarijuje (arba komandinėje eilutėje), įveskite toliau pateiktą eilutę:

top -bn 5 >>top.log

Pastaba: naudojant failo deskriptoriaus numerį, aukščiau pateikta išvesties peradresavimo komanda yra tokia pati:

top -bn 5 1>top.log

Kaip peradresuoti standartinę klaidą į failą sistemoje „Linux“.

Norėdami peradresuoti standartinę komandos klaidą, turite aiškiai nurodyti failo deskriptoriaus numerį 2, kad apvalkalas suprastų, ką bandote padaryti.

Pavyzdžiui, toliau pateikta komanda ls sukels klaidą, kai ją vykdys įprastas sistemos vartotojas be root teisių:

ls -l /root/

Standartinę klaidą galite peradresuoti į failą, kaip nurodyta toliau:

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

Norėdami pridėti standartinę klaidą, naudokite toliau pateiktą komandą:

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

Kaip peradresuoti standartinę išvestį/klaidą į vieną failą

Taip pat galima užfiksuoti visą komandos išvestį (tiek standartinę išvestį, tiek standartinę klaidą) į vieną failą. Tai galima padaryti dviem būdais, nurodant failo deskriptorių numerius:

1. Pirmasis yra gana senas metodas, kuris veikia taip:

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

Aukščiau pateikta komanda reiškia, kad apvalkalas pirmiausia išsiųs komandos ls išvestį į failą ls-error.log (naudodamas >ls-error.log), tada parašys visi klaidų pranešimai failo deskriptoriui 2 (standartinė išvestis), kuris buvo peradresuotas į failą ls-error.log (naudojant 2>&1 ). Tai reiškia, kad standartinė klaida taip pat siunčiama į tą patį failą kaip standartinė išvestis.

2. Antrasis ir tiesioginis metodas yra:

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

Taip pat galite pridėti standartinę išvestį ir standartinę klaidą prie vieno failo, pavyzdžiui:

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

Kaip peradresuoti standartinę įvestį į failą

Dauguma, jei ne visos, įvestį gauna iš standartinės įvesties, o pagal numatytuosius nustatymus standartinė įvestis yra prijungta prie klaviatūros.

Norėdami peradresuoti standartinę įvestį iš kito failo nei klaviatūra, naudokite operatorių “< ”, kaip nurodyta toliau:

cat <domains.list 

Kaip peradresuoti standartinę įvestį/išvestį į failą

Galite atlikti standartinį įvestį, standartinį išvesties peradresavimą tuo pačiu metu naudodami rūšiavimo komandą, kaip nurodyta toliau:

sort <domains.list >sort.output

Kaip naudoti I/O peradresavimą naudojant vamzdžius

Norėdami nukreipti vienos komandos išvestį į kitos komandos įvestį, galite naudoti vamzdžius, tai yra galinga priemonė sukurti naudingas komandų eilutes sudėtingoms operacijoms.

Pavyzdžiui, toliau pateiktoje komandoje bus išvardyti penki populiariausi neseniai modifikuoti failai.

ls -lt | head -n 5 

Čia parinktys:

  1. -l – įgalina ilgo sąrašo formatą
  2. -t – rūšiavimas pagal modifikavimo laiką, pirmiausia rodomi naujausi failai
  3. -n – nurodo rodomų antraščių eilučių skaičių

Svarbios komandos statant vamzdynus

Čia trumpai apžvelgsime dvi svarbias komandas kuriant komandų vamzdynus ir jos yra:

xargs, kuris naudojamas komandų eilutėms kurti ir vykdyti iš standartinės įvesties. Toliau pateikiamas vamzdyno, kuris naudoja xargs, pavyzdys. Ši komanda naudojama failui nukopijuoti į kelis Linux katalogus:

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

Ir variantai:

  1. -n 1 – nurodo xargs naudoti ne daugiau kaip vieną argumentą komandų eilutėje ir siųsti į komandą cp
  2. cp – kopijuoja failą
  3. -v – rodo kopijavimo komandos eigą.

Daugiau naudojimo parinkčių ir informacijos rasite xargs vadovo puslapyje:

man xargs 

Komanda tee nuskaito iš standartinės įvesties ir įrašo į standartinę išvestį bei failus. Galime parodyti, kaip veikia tee:

echo "Testing how tee command works" | tee file1 

Failų arba teksto filtrai dažniausiai naudojami su vamzdžiais efektyvioms Linux failų operacijoms, informacijai apdoroti galingais būdais, tokiais kaip komandų išvesties restruktūrizavimas (tai gali būti labai svarbu kuriant naudingas Linux ataskaitas), keisti tekstą failuose ir keletą kitų Linux sistemos administravimo būdų. užduotys.

Norėdami sužinoti daugiau apie „Linux“ filtrus ir vamzdžius, skaitykite šį straipsnį „Rasti 10 populiariausių IP adresų, pasiekiančių „Apache“ serverį, rodomas naudingas filtrų ir vamzdžių naudojimo pavyzdys.

Šiame straipsnyje paaiškinome įvesties/išvesties peradresavimo Linux sistemoje pagrindus. Nepamirškite pasidalinti savo mintimis toliau pateiktoje atsiliepimų skiltyje.