Input Output Redirection Linux/Unix Esimerkkejä

⚡ Älykäs yhteenveto

Uudelleenohjaus Linuxissa ja Unixissa muuttaa komentojen luku- ja lähetyskohtia, kuten swap-kohtia.ping näppäimistöä ja näyttöä tiedostoille tai laitteille käyttämällä operaattoreita, kuten suurempi kuin -merkki, pienempi kuin -merkki ja liitä-operaattori.

  • 🔀 Uudelleenohjaus: Uudelleenohjaus muuttaa komennon vakiosyötteen tai -tulosteen näppäimistöltä ja näytöltä tiedostoksi tai laitteeksi.
  • ➡️ lähtö: >-operaattori kirjoittaa tulosteen tiedostoon, kun taas >> liittää tuloksen olemassa olevaan tiedostoon poistamatta sitä.
  • ⬅️ input: <-operaattori syöttää tiedoston komentoon sen vakiosyötteenä näppäimistön sijaan.
  • 🔢 Tiedostokuvaukset: Jokainen avattu tiedosto saa numeron: 0 stdin:lle, 1 stdout:lle ja 2 stderr:lle.
  • ⚠️ Virhe uudelleenohjauksessa: 2>-metodin käyttö lähettää virheilmoitukset erilliseen tiedostoon, jotta ne eivät sotke normaalia tulostetta.
  • 🔗 Yhdistetyt virrat: 2>&1-syntaksi reitittää standardivirheen samaan kohteeseen kuin standardituloste.
  • 🤖 Tekoälyn apu: Tekoälyavustajat ja GitHub Copilot voivat rakentaa ja selittää uudelleenohjauskomentoja ja komentosarjoja.

Tulon ja lähdön uudelleenohjaus Linuxissa ja Unixissa esimerkkein

Uudelleenohjaus on yksi hyödyllisimmistä ominaisuuksista Linux ja Unix-kuoressa, koska sen avulla voit päättää, mistä komento lukee syötteen ja lähettää tulosteen. Tällä sivulla selitetään tuloste, syöte ja virheiden uudelleenohjaus toimivien esimerkkien avulla.

Mikä on uudelleenohjaus?

Uudelleenohjaus on Linuxin ominaisuus, jonka avulla komentoa suoritettaessa voidaan vaihtaa vakiomuotoisia syöttö- ja tulostuslaitteita. Minkä tahansa komentojen perustyönkulku Linux-komento on, että se ottaa syötteen ja antaa tulosteen.

  • Tavallinen syöttölaite (stdin) on näppäimistö.
  • Vakiolähtölaite (stdout) on näyttö.

Uudelleenohjauksella yllä olevaa vakiotuloa ja -lähtöä voidaan muuttaa.

Tulostuksen uudelleenohjaus

Alla oleva kuva osoittaa tulosteen uudelleenohjauksen esimerkkien alkua.

Tulosteen uudelleenohjausosan otsikkografiikka

Symbolia '>' käytetään lähdön (STDOUT) uudelleenohjaukseen.

Esimerkiksi:

ls -al > listings

Tässä komennon ls -al tuloste ohjataan tiedostoon ”listings” näytön sijaan. Alla oleva kuvakaappaus näyttää tuloksen.

Pääte, jossa näkyy ls -al -komennon uudelleenohjaus listaustiedostoon

Huomautus: Käytä oikeaa tiedostonimeä ohjatessasi komentoa tiedostoon. Jos samanniminen tiedosto on jo olemassa, uudelleenohjattu komento poistaa sen sisällön ja korvaa sen.

Jos et halua tiedoston päällekirjoitettavan, mutta haluat lisätä sisältöä olemassa olevaan tiedostoon, käytä '>>'-operaattoria. Alla olevassa kuvakaappauksessa sisältö on lisätty '>>'-merkillä.

Pääte, jossa näkyy komennon tuloste liitettynä olemassa olevaan tiedostoon kaksinkertaisella suuremman kuin -operaattorilla

Voit ohjata vakiotulosteen paitsi tiedostoihin, myös laitteisiin.

$ cat music.mp3 > /dev/audio

cat-komento lukee tiedoston musiikkitiedostot.mp3 ja lähettää lähdön /dev/audio-hakemistoon, joka on äänilaite. Jos tietokoneesi ääniasetukset ovat oikein, tämä komento toistaa tiedostomusiikin.mp3.

Tulon uudelleenohjaus

Alla oleva grafiikka esittelee syötteen uudelleenohjauksen.

Syötteen uudelleenohjausosan otsikkografiikka

Symbolia '<' käytetään syötteen (STDIN) uudelleenohjaukseen.

Esimerkki: Linuxin sähköpostiohjelma voi auttaa sinua lähettämään sähköposteja terminaalista.

Voit kirjoittaa sähköpostin sisällön näppäimistöllä, joka on vakiosyöttölaite. Mutta jos haluat liittää sähköpostiin tiedoston, voit käyttää syötteen uudelleenohjausoperaattoria seuraavassa muodossa.

mail -s "Subject" to-address < Filename

Alla olevassa kuvakaappauksessa mail-komento lukee syötteenä tiedostoa.

sähköpostikomento syötteen uudelleenohjauksen avulla tiedoston liittämiseksi sähköpostiin

Tämä liittää tiedoston sähköpostiin ja lähettää sen vastaanottajalle.

Yllä olevat esimerkit olivat yksinkertaisia. Tarkastellaan nyt joitakin edistyneitä uudelleenohjaustekniikoita, jotka hyödyntävät tiedostokuvauksia.

filee Descriptors (FD)

Linuxissa ja Unixissa kaikki on tiedostoa. Tavalliset tiedostot, hakemistot ja jopa laitteet ovat tiedostoja. Jokaisella tiedostolla on siihen liittyvä numero, jota kutsutaan tiedostokuvaajaksi (FD).

Alla oleva kaavio näyttää vakiovirrat ja niiden tiedostokuvaukset.

Kaavio vakiomuotoisista syöte-, tulostus- ja virhevirroista ja niiden tiedostokuvauksista

Näytölläsi on myös tiedostodeskriptori. Kun ohjelma suoritetaan, tuloste lähetetään näytön tiedostodeskriptoriin, ja näet ohjelman tulosteen näytölläsi. Jos tuloste lähetettäisiin tulostimen tiedostodeskriptoriin, ohjelman tuloste tulostuisi.

Virhe uudelleenohjauksessa

Aina kun suoritat ohjelman tai komennon päätelaitteessa, kolme tiedostoa on aina auki: vakiosyöte, vakiotuloste ja vakiovirhetiedosto.

Nämä tiedostot ovat aina läsnä ohjelman suorituksen aikana. Kuten aiemmin selitettiin, jokaiseen näistä tiedostoista liittyy tiedostokuvaaja.

filee filee Descriptor
Vakiotulo STDIN 0
Vakiolähtö STDOUT 1
Vakiovirhe STDERR 2

Oletusarvoisesti virhevirta näkyy näytöllä. Virheiden uudelleenohjaus reitittää virheet muualle kuin näytölle.

Miksi uudelleenohjausvirhe?

Virheiden uudelleenohjaus on yksi Unixin ja Linuxin erittäin suosituista ominaisuuksista.

Usein Unix-käyttäjät tietävät, että monet komennot antavat valtavan määrän virheitä. Esimerkiksi tiedostoja etsittäessä saa tyypillisesti lupa estetty -virheet, jotka eivät yleensä auta tietyn tiedoston etsijää. Shell-skriptejä suoritettaessa ei usein haluta virheilmoitusten tukkivan normaalia ohjelman tulostetta.

Ratkaisu on ohjata virheilmoitukset tiedostoon.

Esimerkki 1

$ myprogram 2>errorsfile

Alla oleva kuvakaappaus näyttää tämän komennon terminaalissa.

Pääte suorittaa myprogram-komennon ja siinä on vakiovirhe, joka ohjataan errorsfile-tiedostoon

Yllä suoritamme ohjelmaa nimeltä myprogram. Standard error -tiedoston kuvaaja on 2. Käyttämällä ”2>” ohjaamme virhetulosteen tiedostoon nimeltä ”errorsfile”. Näin ohjelman tuloste ei ole täynnä virheitä.

Esimerkki 2

Tässä on toinen esimerkki, joka käyttää find-lauseketta.

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

find-komennolla etsimme nykyisestä hakemistosta "." tiedostoa, jonka nimi alkaa kirjaimilla "my", ja lähetämme mahdolliset virheet error.log-tiedostoon.

Esimerkki 3: Katsotaanpa monimutkaisempaa esimerkkiä.

Palvelimen ylläpitäjät listaavat usein hakemistoja ja tallentavat sekä virhe- että vakiotulosteen tiedostoon, jota voidaan käsitellä myöhemmin. Tässä on komento.

ls Documents ABC> dirlist 2>&1

Alla oleva kaavio näyttää molempien virtojen tallentamisen yhteen tiedostoon.

Vakiotulosteen ja vakiovirheen kaavio, jotka molemmat ohjataan tiedostohakemistoon

Tässä:

  • 2>&1 tarkoittaa, että STDERR ohjataan samaan kohteeseen kuin STDOUT (joka on tiedostohakemisto).
  • Virhetuloste ohjataan standarditulosteeseen, joka puolestaan ​​ohjataan tiedostoon dirlist. Näin ollen molemmat virrat kirjoitetaan tiedostoon dirlist.

Alla oleva kaavio havainnollistaa, miten syöte, tuloste ja virheiden uudelleenohjaus sopivat yhteen.

Kaavio, joka tiivistää syötteen, tulosteen ja virheiden uudelleenohjauksen Linuxissa ja Unixissa

UKK

A putki (|) lähettää yhden komennon tulosteen suoraan toisen komennon syötteenä. Uudelleenohjaus sen sijaan yhdistää komennon tiedostoon tai laitteeseen kirjoittamalla siihen tulosteen tai lukemalla siitä syötteen. Pipe-liittää komentoja; uudelleenohjaus yhdistää komennon tiedostoon.

>-operaattori kirjoittaa komennon tulosteen tiedostoon ja korvaa olemassa olevan sisällön. >>-operaattori liittää tulosteen tiedoston loppuun, säilytäping mikä on jo olemassa. Käytä >> aina, kun haluat lisätä tiedostoon jotain sen korvaamisen sijaan.

/dev/null on erikoistiedosto, joka hylkää kaiken siihen kirjoitetun. 2>/dev/null lisääminen komentoon ohjaa sen virheilmoitukset kyseiseen tiedostoon, heittäen ne hiljaisesti pois, jolloin näytölle tulee vain normaali tuloste. Se on yleinen tapa piilottaa ei-toivotut virheet.

tee-komento lukee vakiosyötteestä ja kirjoittaa tiedot sekä näytölle että yhteen tai useampaan tiedostoon kerralla, esimerkiksi ls -al | tee listing.txt. Sen avulla voit tallentaa komennon tulosteen tiedostoon ja katsella sitä edelleen näytöllä.

Here-dokumentissa käytetään <<-operaattoria useiden rivien sisäisen tekstin syöttämiseen komentoon, joka päättyy valitsemaasi merkkisanaan. Se on kätevä komentoskripteissä monirivisten syötteiden, kuten sähköpostin rungon, välittämiseen ilman erillistä tiedostoa.

Käytä 2>&1-syntaksia tulosteen uudelleenohjauksen jälkeen, kuten komennossa command > file 2>&1, jotta standardivirhe seuraa standarditulostetta tiedostoon. Nykyaikaisessa Bashissa lyhenne command &> file tekee saman asian. Järjestyksellä on merkitystä: sijoita 2>&1 tulosteen uudelleenohjauksen jälkeen.

Tekoälyavustajat voivat muuttaa selkokielisen pyynnön oikeaksi uudelleenohjauskomennoksi, selittää operaattoreiden, kuten 2>&1 tai &>, toiminnan ja merkitä virheet ennen niiden suorittamista. Koneoppimistyökalut myös skannaavat uudelleenohjattuja loki- ja virhetiedostoja löytääkseen poikkeavuuksia, jotka manuaalinen tarkistus ei huomaisi.

Kyllä. GitHub Copilot voi luoda komentoja ja skriptejä, jotka ohjaavat syötteen, tulosteen ja virheet lyhyestä tavoitetta kuvaavasta kommentista ja suorittavat ne kirjoittaessasi. RevKatso kaikki tiedostoillesi ehdotetut komennot, erityisesti sellaiset, jotka käyttävät >-merkkiä ja korvaavat olemassa olevia tietoja.

Tiivistä tämä viesti seuraavasti: