Naučite osnove kako funkcionira Linux I/O (ulaz/izlaz) preusmjeravanje


Jedna od najvažnijih i najzanimljivijih tema pod administracijom Linuxa je I/O preusmjeravanje. Ova funkcija komandne linije omogućava vam da preusmjerite unos i/ili izlaz komandi iz i/ili na datoteke, ili da spojite više komandi zajedno koristeći cijevi kako biste formirali ono što je poznato kao “komandni cjevovod” .

Sve naredbe koje izvodimo u osnovi proizvode dvije vrste izlaza:

  1. rezultat naredbe – podaci za koje je program dizajniran da proizvede, i
  2. status programa i poruke o grešci koje obavještavaju korisnika o detaljima izvršavanja programa.

U Linuxu i drugim sistemima sličnim Unixu, postoje tri zadane datoteke navedene ispod koje su također identificirane ljuskom pomoću brojeva deskriptora datoteke:

  1. stdin ili 0 – povezan je sa tastaturom, većina programa čita unos iz ove datoteke.
  2. stdout ili 1 – prikačen je na ekran i svi programi šalju svoje rezultate u ovaj fajl i
  3. stderr ili 2 – programi šalju status/poruke o grešci ovoj datoteci koja je također priložena ekranu.

Stoga, I/O preusmjeravanje vam omogućava da promijenite ulazni izvor komande, kao i mjesto na koje se šalju njeni izlazni podaci i poruke o grešci. A to je omogućeno “< ” i “> ” operatorima preusmjeravanja.

Kako preusmjeriti standardni izlaz u datoteku u Linuxu

Možete preusmjeriti standardni izlaz kao u primjeru ispod, ovdje želimo pohraniti izlaz naredbe top za kasniju inspekciju:

top -bn 5 >top.log

Gdje su zastave:

  1. -b – omogućava top da radi u batch modu, tako da možete preusmjeriti njegov izlaz na datoteku ili drugu komandu.
  2. -n – specificira broj iteracija prije završetka naredbe.

Možete pogledati sadržaj datoteke top.log koristeći cat komandu kako slijedi:

cat top.log

Da biste dodali izlaz naredbe, koristite “>> ” operator.

Na primjer, da dodate izlaz gornje naredbe top u datoteku top.log, posebno unutar skripte (ili na komandnoj liniji), unesite red ispod:

top -bn 5 >>top.log

Napomena: Koristeći broj deskriptora datoteke, gornja naredba za preusmjeravanje izlaza je ista kao:

top -bn 5 1>top.log

Kako preusmjeriti standardnu grešku u datoteku u Linuxu

Da biste preusmjerili standardnu grešku naredbe, morate eksplicitno navesti broj deskriptora datoteke, 2 za shell da bi razumio šta pokušavate učiniti.

Na primjer, naredba ls ispod će proizvesti grešku kada je izvrši običan sistemski korisnik bez root privilegija:

ls -l /root/

Standardnu grešku možete preusmjeriti na datoteku na sljedeći način:

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

Da biste dodali standardnu grešku, koristite naredbu ispod:

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

Kako preusmjeriti standardni izlaz/grešku u jednu datoteku

Također je moguće snimiti sav izlaz naredbe (i standardni izlaz i standardna greška) u jednu datoteku. Ovo se može uraditi na dva moguća načina navođenjem brojeva deskriptora datoteke:

1. Prva je relativno stara metoda koja radi na sljedeći način:

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

Gornja naredba znači da će ljuska prvo poslati izlaz naredbe ls u datoteku ls-error.log (koristeći >ls-error.log), a zatim upisati sve poruke o grešci u deskriptor datoteke 2 (standardni izlaz) koji je preusmjeren na datoteku ls-error.log (koristeći 2>&1 ). Podrazumijevajući da se standardna greška također šalje u istu datoteku kao standardni izlaz.

2. Druga i direktna metoda je:

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

Možete dodati standardni izlaz i standardnu grešku u jednu datoteku na sljedeći način:

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

Kako preusmjeriti standardni unos u datoteku

Većina, ako ne i sve komande dobijaju svoj unos iz standardnog unosa, a standardno je standardni unos vezan za tastaturu.

Za preusmjeravanje standardnog unosa iz datoteke koja nije tastatura, koristite “< ” operator kao ispod:

cat <domains.list 

Kako preusmjeriti standardni ulaz/izlaz u datoteku

Možete izvršiti standardni unos, standardno preusmjeravanje izlaza u isto vrijeme koristeći naredbu sortiranja kao u nastavku:

sort <domains.list >sort.output

Kako koristiti I/O preusmjeravanje pomoću cijevi

Da biste preusmjerili izlaz jedne komande kao ulaz druge, možete koristiti cijevi, ovo je moćno sredstvo za izgradnju korisnih komandnih linija za složene operacije.

Na primjer, naredba u nastavku će navesti prvih pet nedavno izmijenjenih datoteka.

ls -lt | head -n 5 

Evo opcija:

  1. -l – omogućava format dugog popisa
  2. -t – sortiraj prema vremenu modifikacije s najnovijim datotekama koje se prikazuju prvi
  3. -n – specificira broj redova zaglavlja za prikaz

Važne naredbe za izgradnju cjevovoda

Ovdje ćemo ukratko pregledati dvije važne naredbe za izgradnju komandnih cjevovoda, a to su:

xargs koji se koristi za pravljenje i izvršavanje komandnih linija iz standardnog unosa. Ispod je primjer cjevovoda koji koristi xargs, ova naredba se koristi za kopiranje datoteke u više direktorija u Linuxu:

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

I opcije:

  1. -n 1 – navodi xargs da koristi najviše jedan argument po komandnoj liniji i pošalje na cp komandu
  2. cp – kopira fajl
  3. -v – prikazuje napredak komande kopiranja.

Za više opcija upotrebe i informacija, pročitajte xargs man stranicu:

man xargs 

Komanda tee čita sa standardnog ulaza i upisuje u standardni izlaz i datoteke. Možemo pokazati kako tee funkcionira na sljedeći način:

echo "Testing how tee command works" | tee file1 

Filteri datoteka ili teksta se obično koriste sa cijevima za efikasne operacije Linux datoteka, za obradu informacija na moćne načine kao što je restrukturiranje izlaza naredbi (ovo može biti od vitalnog značaja za generiranje korisnih Linux izvještaja), modificiranje teksta u datotekama plus nekoliko drugih Linux sistemskih administracija zadataka.

Da biste saznali više o Linux filterima i cijevima, pročitajte ovaj članak Pronađi top 10 IP adresa koje pristupaju Apache serveru, pokazuje koristan primjer korištenja filtera i cijevi.

U ovom članku objasnili smo osnove I/O preusmjeravanja u Linuxu. Ne zaboravite podijeliti svoje misli putem odjeljka za povratne informacije u nastavku.