Sisendväljundi ümbersuunamine Linuxi/Unixi näidetes

⚡ Nutikas kokkuvõte

Ümbersuunamine Linuxis ja Unixis muudab käsku sisendi lugemise või väljundi saatmise kohta, vahetabping klaviatuuri ja ekraani failide või seadmete jaoks, kasutades operaatoreid nagu suurem-kui-märk, väiksem-kui-märk ja lisamisoperaator.

  • 🔀 Ümbersuunamine: Ümbersuunamine muudab käsu standardse sisendi või väljundi klaviatuurilt ja ekraanilt failiks või seadmeks.
  • ➡️ Väljund: Operaator > kirjutab väljundi faili, samas kui >> lisab väljundi olemasolevale failile seda kustutamata.
  • ⬅️ sisend: Operaator < annab faili käsule standardsisendina klaviatuuri asemel.
  • 🔢 Failikirjeldajad: Iga avatud fail saab numbri: 0 standardväljundi (stdin) jaoks, 1 standardväljundi (stdout) jaoks ja 2 standardväljundi (stderr) jaoks.
  • ⚠️ Ümbersuunamise viga: 2> kasutamine saadab veateated eraldi faili, et need ei segaks tavalist väljundit.
  • 🔗 Kombineeritud vood: 2>&1 süntaks suunab standardvea samasse sihtkohta kui standardväljund.
  • 🤖 Tehisintellekti abi: Tehisintellekti assistendid ja GitHub Copilot saavad luua ja selgitada ümbersuunamiskäsklusi ja shelli skripte.

Sisend-väljundi ümbersuunamine Linuxis ja Unixis koos näidetega

Ümbersuunamine on üks kasulikumaid funktsioone Linux ja Unixi kest, sest see võimaldab teil otsustada, kuhu käsk sisendit loeb ja väljundit saadab. See leht selgitab väljundit, sisendit ja vea ümbersuunamist koos näidetega.

Mis on ümbersuunamine?

Ümbersuunamine on Linuxi funktsioon, mis võimaldab käsu täitmisel muuta standardseid sisend- ja väljundseadmeid. Iga käsu põhiline töövoog Linuxi käsk on see, et see võtab sisendi ja annab väljundi.

  • Standardne sisendseade (stdin) on klaviatuur.
  • Standardne väljund (stdout) seade on ekraan.

Ümbersuunamise abil saab ülaltoodud standardset sisendit ja väljundit muuta.

Väljundi ümbersuunamine

Allolev graafik tähistab väljundi ümbersuunamise näidete algust.

Väljundi ümbersuunamise jaotise päisegraafika

Väljundi (STDOUT) ümbersuunamiseks kasutatakse sümbolit '>'.

Näide:

ls -al > listings

Siin suunatakse käsu ls -al väljund ekraanipildi asemel faili „listings“. Allolev ekraanipilt näitab tulemust.

Terminal, mis kuvab käsuga ls -al ümbersuunatud kirje faili

Märkus: Kasutage käsu väljundi failile ümbersuunamisel õiget failinime. Kui sama nimega fail on juba olemas, kustutab ümbersuunatud käsk selle sisu ja kirjutab selle seejärel üle.

Kui te ei soovi faili ülekirjutamist, kuid soovite olemasolevale failile sisu lisada, kasutage operaatorit '>>'. Allolev ekraanipilt näitab sisu, millele on lisatud '>>'.

Terminal, mis näitab käsu väljundit, mis on lisatud olemasolevale failile kahekordse suurema kui operaatoriga

Standardväljundit saab suunata mitte ainult failidesse, vaid ka seadmetesse.

$ cat music.mp3 > /dev/audio

Käsk cat loeb faili muusikat.mp3 ja saadab väljundi kausta /dev/audio, mis on heliseade. Kui teie arvuti helikonfiguratsioon on õige, esitab see käsk failimuusikat.mp3.

Sisestuse ümbersuunamine

Allolev graafik tutvustab sisendi ümbersuunamist.

Sisendi ümbersuunamise jaotise pealkirja graafik

Sümbolit '<' kasutatakse sisendi (STDIN) ümbersuunamiseks.

Näide: Linuxi meiliprogramm aitab teil terminalist e-kirju saata.

Saate e-kirja sisu sisestada klaviatuuri abil, mis on standardne sisestusseade. Aga kui soovite e-kirjale faili lisada, saate kasutada sisestuse ümbersuunamise operaatorit järgmises vormingus.

mail -s "Subject" to-address < Filename

Allolev ekraanipilt näitab, kuidas e-posti käsk loeb sisendiks faili.

e-kirjale faili lisamiseks käsk e-posti sisendi ümbersuunamise abil

See lisab faili e-kirjale ja see saadetakse adressaadile.

Ülaltoodud näited olid lihtsad. Nüüd vaatame mõningaid täiustatud ümbersuunamistehnikaid, mis kasutavad failikirjeldajaid.

Fail Descriptors (FD)

Linuxis ja Unixis on kõik failid. Tavalised failid, kataloogid ja isegi seadmed on failid. Igal failil on seotud number, mida nimetatakse faili deskriptoriks (FD).

Allolev diagramm näitab standardvooge ja nende failikirjeldusi.

Standardsete sisend-, väljund- ja veavoogude ning nende failikirjelduste skeem

Sinu ekraanil on ka failideskriptor. Programmi käivitamisel saadetakse väljund ekraani failideskriptorisse ja sa näed programmi väljundit oma monitoril. Kui väljund saadetaks printeri failideskriptorisse, prinditaks programmi väljund.

Viga ümbersuunamisel

Alati, kui terminalis programmi või käsku käivitad, on avatud kolm faili: standardsisend, standardväljund ja standardveafail.

Need failid on programmi käivitamisel alati olemas. Nagu varem selgitatud, on iga failiga seotud failikirjeldaja.

Fail Fail Descriptor
Standardsisend STDIN 0
Standardväljund STDOUT 1
Standardviga STDERR 2

Vaikimisi kuvatakse veavoog ekraanil. Vea ümbersuunamine suunab vead ekraanilt muusse faili.

Miks ümbersuunamise viga?

Vea ümbersuunamine on üks Unixi ja Linuxi väga populaarseid funktsioone.

Sagedased Unixi kasutajad teavad, et paljud käsud annavad tohutul hulgal vigu. Näiteks failide otsimisel tekib tavaliselt luba keelatud vead, mis tavaliselt ei aita konkreetse faili otsijat. Shelliskriptide käivitamisel ei ole sageli soovitatav, et veateated risustaksid tavalist programmi väljundit.

Lahendus on veateadete faili suunamine.

Näiteks 1

$ myprogram 2>errorsfile

Allolev ekraanipilt näitab seda käsku terminalis.

Terminal, kus töötab minuprogramm standardveaga, suunatakse ümber veafaili faili

Ülalpool käivitame programmi nimega minuprogramm. Standardvea failideskriptor on 2. Kasutades „2>“, suuname veaväljundi ümber faili nimega „veafail“. Seega ei ole programmi väljund vigadest üle koormatud.

Näiteks 2

Siin on veel üks näide, mis kasutab find-lauset.

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

Käsu find abil otsime praegusest kataloogist „.” faili, mille nimi algab tähega „minu” ja saadame kõik vead faili error.log.

Näide 3: Vaatame keerulisemat näidet.

Serveriadministraatorid loetlevad sageli katalooge ja salvestavad nii vea- kui ka standardväljundi faili, mida saab hiljem töödelda. Siin on käsk.

ls Documents ABC> dirlist 2>&1

Allolev diagramm näitab mõlema voo jäädvustamist ühte faili.

Standardväljundi ja standardvea diagramm, mis mõlemad suunatakse failikataloogi

siin:

  • 2>&1 tähendab, et STDERR suunatakse ümber samale sihtmärgile kui STDOUT (mis on failikataloog).
  • Veaväljund suunatakse standardväljundisse, mis omakorda suunatakse faili „dirlist“. Seega kirjutatakse mõlemad vood faili „dirlist“.

Allolev diagramm võtab kokku, kuidas sisend, väljund ja vea ümbersuunamine omavahel sobivad.

Linuxi ja Unixi sisendi, väljundi ja vea ümbersuunamise kokkuvõtte diagramm

KKK

A toru (|) saadab ühe käsu väljundi otse teise käsu sisendina. Ümbersuunamine ühendab käsu faili või seadmega, kirjutades sinna väljundi või lugedes sealt sisendit. Käskude ühendamiseks kasutatakse torujuhtmeid; ümbersuunamine ühendab käsu failiga.

Operaator > kirjutab käsu väljundi faili, asendades olemasoleva sisu. Operaator >> lisab väljundi hoopis faili lõppu, ntping mis on juba olemas. Kasutage >> alati, kui soovite failile midagi lisada, mitte seda üle kirjutada.

/dev/null on spetsiaalne fail, mis kustutab kõik sinna kirjutatu. 2>/dev/null lisamine käsule suunab käsu veateated sellesse faili, kustutades need vaikselt, nii et ekraanile ilmub ainult tavaline väljund. See on levinud viis soovimatute veateadete peitmiseks.

Käsk tee loeb standardsisendist ja kirjutab andmed korraga nii ekraanile kui ka ühte või mitmesse faili, näiteks ls -al | tee listing.txt. See võimaldab käsu väljundi salvestada faili, vaadates seda samal ajal ekraanil.

Dokument „here“ kasutab operaatorit <<, et sisestada käsku sisendina mitu rida teksti, mis lõpevad valitud markersõnaga. See on mugav shelliskriptides mitmerealise sisendi (nt e-kirja sisu) edastamiseks ilma eraldi failita.

Kasutage väljundi ümbersuunamise järel süntaksit 2>&1, nagu käsul command > file 2>&1, nii et standardviga järgneb standardväljundile failis. Tänapäevases Bashis teeb lühend command &> file sama asja. Järjekord on oluline: asetage 2>&1 pärast väljundi ümbersuunamist.

Tehisintellekti assistendid suudavad lihtsa inglise keele päringu õigeks ümbersuunamiskäsuks muuta, selgitada operaatorite (nt 2>&1 või &>) funktsioone ja enne nende käivitamist vead märgistada. Masinõppe tööriistad skannivad ka ümbersuunatud logi- ja veafaile, et leida anomaaliaid, mida käsitsi ülevaatamine ei märkaks.

Jah. GitHubi koopia saab genereerida käske ja skripte, mis suunavad sisendi, väljundi ja vead ümber lühikesest eesmärki kirjeldavast kommentaarist ning täidavad need kirjutamise ajal. RevVaadake kõiki failide jaoks soovitatud käske, eriti neid, mis kasutavad > ja kirjutavad olemasolevad andmed üle.

Võta see postitus kokku järgmiselt: