Preusmjeravanje ulaznog izlaza u Linux/Unix primjerima

⚡ Pametni sažetak

Preusmjeravanje u Linuxu i Unixu mijenja gdje naredba čita ulaz ili šalje izlaz, zamjenjujeping tipkovnicu i zaslon za datoteke ili uređaje pomoću operatora kao što su znak veće od, znak manje od i operator dodavanja.

  • 🔀 Preusmjeravanje: Preusmjeravanje mijenja standardni ulaz ili izlaz naredbe s tipkovnice i zaslona u datoteku ili uređaj.
  • ➡️ Izlaz: Operator > zapisuje izlaz u datoteku, dok >> dodaje izlaz postojećoj datoteci bez brisanja.
  • ⬅️ Ulazni: Operator < unosi datoteku u naredbu kao standardni ulaz umjesto tipkovnice.
  • 🔢 Deskriptori datoteka: Svaka otvorena datoteka dobiva broj: 0 za stdin, 1 za stdout i 2 za stderr.
  • ⚠️ Preusmjeravanje zbog greške: Korištenjem naredbe 2> poruke o pogreškama šalju se u zasebnu datoteku kako ne bi zatrpavale normalan izlaz.
  • 🔗 Kombinirani tokovi: Sintaksa 2>&1 usmjerava standardnu ​​grešku na isti cilj kao i standardni izlaz.
  • 🤖 Pomoć umjetne inteligencije: AI asistenti i GitHub Copilot mogu izraditi i objasniti naredbe za preusmjeravanje i shell skripte.

Preusmjeravanje ulaza i izlaza u Linuxu i Unixu s primjerima

Preusmjeravanje je jedna od najkorisnijih značajki Linux i Unix shell, jer vam omogućuje da odlučite gdje naredba čita svoj ulaz i šalje izlaz. Ova stranica objašnjava izlaz, ulaz i preusmjeravanje pogrešaka s rađenim primjerima.

Što je preusmjeravanje?

Preusmjeravanje je značajka u Linuxu koja vam omogućuje promjenu standardnih ulaznih i izlaznih uređaja prilikom izvršavanja naredbe. Osnovni tijek rada bilo kojeg Linux naredba jest da prima ulaz i daje izlaz.

  • Standardni ulazni (stdin) uređaj je tipkovnica.
  • Standardni izlazni (stdout) uređaj je ekran.

Preusmjeravanjem se može promijeniti gore navedeni standardni ulaz i izlaz.

Preusmjeravanje izlaza

Donja grafika označava početak primjera preusmjeravanja izlaza.

Grafika naslova odjeljka preusmjeravanja izlaza

Simbol '>' se koristi za preusmjeravanje izlaza (STDOUT).

Primjer:

ls -al > listings

Ovdje se izlaz naredbe ls -al preusmjerava u datoteku „listings“ umjesto na vaš zaslon. Snimka zaslona u nastavku prikazuje rezultat.

Terminal koji prikazuje ls -al popis preusmjeren u datoteku popisa

Napomena: Koristite ispravan naziv datoteke prilikom preusmjeravanja izlaza naredbe u datoteku. Ako datoteka s istim nazivom već postoji, preusmjerena naredba briše njezin sadržaj, a zatim ga prepisuje.

Ako ne želite da se datoteka prebriše, ali želite dodati više sadržaja postojećoj datoteci, upotrijebite operator '>>'. Snimka zaslona u nastavku prikazuje sadržaj kojem je dodan znak '>>'.

Terminal koji prikazuje izlaz naredbe dodan postojećoj datoteci s operatorom dvostruko veće od

Standardni izlaz možete preusmjeriti ne samo na datoteke, već i na uređaje.

$ cat music.mp3 > /dev/audio

Naredba cat čita glazbenu datoteku.mp3 i šalje izlaz na /dev/audio, što je audio uređaj. Ako je konfiguracija zvuka na vašem računalu ispravna, ova naredba reproducira glazbenu datoteku.mp3.

Preusmjeravanje unosa

Donja grafika prikazuje preusmjeravanje unosa.

Slika naslova odjeljka preusmjeravanja unosa

Simbol '<' se koristi za preusmjeravanje ulaza (STDIN).

Primjer: Program za poštu u Linuxu može vam pomoći u slanju e-pošte s terminala.

Sadržaj e-pošte možete upisati pomoću tipkovnice, standardnog uređaja za unos. Ali ako želite priložiti datoteku e-pošti, možete upotrijebiti operator preusmjeravanja unosa u sljedećem formatu.

mail -s "Subject" to-address < Filename

Snimka zaslona u nastavku prikazuje naredbu mail koja čita datoteku kao svoj ulaz.

naredba mail korištenjem preusmjeravanja ulaza za prilaganje datoteke e-pošti

Ovim se datoteka prilaže e-poruci i ona se šalje primatelju.

Gornji primjeri bili su jednostavni. Sada pogledajte neke napredne tehnike preusmjeravanja koje koriste deskriptore datoteka.

file Descriptili (FD)

U Linuxu i Unixu, sve je datoteka. Obične datoteke, direktoriji, pa čak i uređaji su datoteke. Svaka datoteka ima pridruženi broj koji se naziva deskriptor datoteke (FD).

Donji dijagram prikazuje standardne tokove i njihove deskriptore datoteka.

Dijagram standardnih ulaznih, izlaznih i tokova pogrešaka te njihovih deskriptora datoteka

Vaš zaslon također ima deskriptor datoteke. Kada se program izvršava, izlaz se šalje deskriptoru datoteke zaslona i vidite izlaz programa na svom monitoru. Ako bi se izlaz poslao deskriptoru datoteke pisača, izlaz programa bi se ispisao.

Greška Preusmjeravanje

Kad god izvršavate program ili naredbu u terminalu, uvijek su otvorene tri datoteke, i to standardni ulaz, standardni izlaz i standardna datoteka za pogreške.

Ove datoteke su uvijek prisutne kad god se program izvršava. Kao što je već objašnjeno, svakoj od ovih datoteka pridružen je deskriptor datoteke.

file file Descriptor
Standardni ulaz STDIN 0
Standardni izlaz STDOUT 1
Standardna pogreška STDERR 2

Prema zadanim postavkama, tok pogrešaka prikazuje se na zaslonu. Preusmjeravanje pogrešaka usmjerava pogreške u datoteku koja nije zaslon.

Zašto preusmjeravanje pogreške?

Preusmjeravanje pogrešaka jedna je od vrlo popularnih značajki Unixa i Linuxa.

Česti korisnici Unixa znaju da mnoge naredbe daju ogroman broj grešaka. Na primjer, prilikom pretraživanja datoteka, obično se dobije dopuštenje odbijene pogreške, koje obično ne pomažu osobi koja traži određenu datoteku. Tijekom izvršavanja shell skripti često ne želite da poruke o pogreškama zatrpavaju normalan izlaz programa.

Rješenje je preusmjeriti poruke o pogrešci u datoteku.

Primjer 1

$ myprogram 2>errorsfile

Snimka zaslona ispod prikazuje ovu naredbu u terminalu.

Terminal koji pokreće myprogram sa standardnom greškom preusmjerenom na datoteku errorsfile

Iznad, izvršavamo program pod nazivom myprogram. Deskriptor datoteke za standardnu ​​pogrešku je 2. Korištenjem "2>" preusmjeravamo izlaz pogreške u datoteku pod nazivom "errorsfile". Na taj način, izlaz programa nije pretrpan greškama.

Primjer 2

Evo još jednog primjera koji koristi naredbu find.

find . -name 'my*' 2>error.log

Pomoću naredbe find pretražujemo trenutni direktorij "." za datoteku čije ime počinje s "my" i šaljemo sve pogreške u error.log.

Primjer 3: Pogledajmo složeniji primjer.

Administratori poslužitelja često popisuju direktorije i pohranjuju i izlaz s greškama i standardni izlaz u datoteku, što se kasnije može obraditi. Evo naredbe.

ls Documents ABC> dirlist 2>&1

Donji dijagram prikazuje kako se oba toka snimaju u jednu datoteku.

Dijagram standardnog izlaza i standardne pogreške, oba preusmjerena na popis direktorija datoteka

Ovdje:

  • 2>&1 znači da se STDERR preusmjerava na isti cilj kao i STDOUT (što je popis direktorija datoteka).
  • Izlaz pogreške preusmjerava se na standardni izlaz, koji se pak preusmjerava na popis direktorija datoteke. Stoga se oba toka zapisuju u popis direktorija datoteke.

Donji dijagram sažima kako se ulaz, izlaz i preusmjeravanje pogrešaka uklapaju.

Dijagram koji sažima ulaz, izlaz i preusmjeravanje grešaka u Linuxu i Unixu

Pitanja i odgovori

A cijev (|) šalje izlaz jedne naredbe izravno u drugu naredbu kao njen ulaz. Preusmjeravanje umjesto toga povezuje naredbu s datotekom ili uređajem, zapisujući izlaz na njega ili čitajući ulaz s njega. Cijevi spajaju naredbe; preusmjeravanje spaja naredbu s datotekom.

Operator > zapisuje izlaz naredbe u datoteku, zamjenjujući postojeći sadržaj. Operator >> dodaje izlaz na kraj datoteke, keeping što je već tamo. Koristite >> kad god želite dodati nešto u datoteku umjesto da je prepišete.

/dev/null je posebna datoteka koja odbacuje sve što je u nju zapisano. Dodavanje 2>/dev/null naredbi preusmjerava njezine poruke o pogreškama u tu datoteku, tiho ih odbacujući tako da se na zaslonu pojavljuje samo normalan izlaz. To je uobičajen način skrivanja neželjenog gomilanja pogrešaka.

Naredba tee čita sa standardnog ulaza i zapisuje podatke na zaslon i u jednu ili više datoteka odjednom, na primjer ls -al | tee listing.txt. Omogućuje vam spremanje izlaza naredbe u datoteku dok ga i dalje gledate na zaslonu.

Dokument here koristi operator << za ubacivanje nekoliko redaka teksta u naredbu kao ulaz, završavajući na odabranoj riječi markera. To je korisno u shell skriptama za prosljeđivanje višelinijskog unosa, poput tijela e-pošte, bez zasebne datoteke.

Koristite sintaksu 2>&1 nakon preusmjeravanja izlaza, kao u naredba > datoteka 2>&1, tako da standardna greška slijedi standardni izlaz u datoteku. U modernom Bashu skraćenica naredba &> datoteka radi isto. Redoslijed je važan: stavite 2>&1 nakon preusmjeravanja izlaza.

AI asistenti mogu pretvoriti zahtjev na običnom engleskom jeziku u ispravnu naredbu za preusmjeravanje, objasniti što rade operatori poput 2>&1 ili &> i označiti pogreške prije nego što ih pokrenete. Alati za strojno učenje također skeniraju preusmjerene datoteke zapisnika i pogrešaka kako bi otkrili anomalije koje bi ručni pregled propustio.

Da. GitHub kopilot može generirati naredbe i skripte koje preusmjeravaju ulaz, izlaz i pogreške iz kratkog komentara koji opisuje cilj i dovršavaju ih dok tipkate. RevPogledajte sve predložene naredbe za svoje datoteke, posebno one koje koriste > i prepisuju postojeće podatke.

Sažmite ovu objavu uz: