Jos joskus käytät putkia ja uudelleenohjauksia Linux-kuoren alla, on myös todennäköistä, että joudut joskus käyttämään tee
apuohjelma.
Mitä Tee tekee?
Komento kuten
ls
näyttää nykyisen hakemistosi sisällön. Toisin sanoen se näyttää nämä sisällöt stdout-tiedostoksi (vakiolähtö), joka on normaalisti näyttösi tai tarkemmin sanottuna virtuaalisen päätelaitteen näyttö.
Komento kuten
ls > file123
ei näytä mitään näytölläsi. Se johtuu siitä >
merkki ohjaa kaiken ulostulon tiedostoon sen sijaan, että se näytetään stdout-tiedostona. tiedosto123 täytetään nyt näytöllä aiemmin näytetyllä sisällöllä.
Voit näyttää hakemistosi sisällön näytöllä ja kirjoittaa tämän tiedostoon käyttämällä kahta komentoa. Kanssa tee
voit tehdä molemmat näistä asioista kerralla.
ls | tee file123
Miksi käyttää teetä, jos voit suorittaa samanlaisen komennon kahdesti?
Yllä olevassa esimerkissä et tietenkään tarvitse teetä, jos voit suorittaa ls
normaalisti ja suorita se sitten uudelleen ja ohjaa ulostulo tiedostoon. Tulet kuitenkin kohtaamaan tilanteita, joissa tulos on ainutlaatuinen. Kuvittele skenaario, jossa yrität diagnosoida ongelman. Sinä juokset diagnose | tee error.log
. Saamasi virheet voivat olla ainutlaatuisia. Haluat heidän näkyvän ruudulla, jotta näet mitä tapahtuu, kun testaat asioita. Mutta haluat myös, että virheet tallennetaan tiedostoon, joten voit tarkistaa ne myöhemmin tai liittää lähdön keskustelufoorumiin ja kysyä ihmisiltä.
Toinen usein kohtaama tilanne, kun tarvitset teetä, on tämä: haluat kirjoittaa komennon lähdön paikkaan, jossa vain pääkäyttäjä voi lukea tai kirjoittaa. Tämä ei toimi.
/sbin/blkid > /root/somefile
Sitten saatat ajatella: ”No, tietysti, käytä vain sudoa!” Ja olet yllättynyt siitä, että tämä ei myöskään toimi:
sudo blkid > /root/somefile
Se johtuu siitä, kun sudo blkid
suorittaa, olet edelleen kirjautuneena tavallisena, ei-root-käyttäjänä. Ja kuoresi (yleensä bash) yrittää kirjoittaa /root/somefile
tavallisilla käyttäjätiedoillasi. Voit ratkaista tämän käyttämällä teetä:
/sbin/blkid | sudo tee /root/somefile
Lisätään tekstiä ja ohjataan virheitä
tee on hyödyllinen, mutta yksinkertainen komento; perus command | tee somefile
riittää useimmiten. Saatat kuitenkin kohdata kaksi skenaariota, jotka vaativat näitä vinkkejä.
Ensinnäkin on tiedettävä, että tee korvaa oletusarvoisesti aina tiedoston. Jos juokset
ls | tee somefile
ja sitten
ls /tmp | tee somefile
toinen komento korvaa somefile-sisällön, ja näet vain viimeisen suoritetun komennon sisällön. Voit muuttaa tätä käyttäytymistä tekemällä tee liittämään tekstin korvaamisen sijaan. Voit tehdä sen vain käyttämällä -a
komentokytkin.
ls | tee -a somefile
Toinen asia on tietää, että kaikki tuotokset eivät ole samanlaisia. Virhesanomia kohdellaan eri tavalla, ja vaikka ne näkyvät ruudulla, niitä ei pidetä vakioina, joten tee ei tartu niihin. (Niitä pidetään stderr.) Tässä on esimerkki grepistä.
grep -r L2TP /etc | tee somefile
Se näyttää jotain seuraavanlaista.

Lupa evätyt viestit kirjoitetaan stderr: ään. Ainoa stdoutille kirjoitettu asia on korostettu teksti. Siksi huomaat, että ”somefile” -sivuston sisältö on sama kuin alla olevassa kuvassa.

Tässä tapauksessa, jossa tekstin hakemiseen käytetään grep-tiedostoa, on hyödyllistä, että virheilmoituksia ei ohjata tiedostoon. He vain täyttävät tiedoston tarpeettomalla roskalla. Haluat vain nähdä löydetyt tulokset. Mutta kun tarvitset virheilmoituksia, käytä 2>&1
, joka ohjaa stderr: n stdout: ksi.
grep -r L2TP /etc 2>&1 | tee somefile
Tämän komennon avulla huomaat, että somefile sisältää nyt myös virheilmoitukset.
Johtopäätös
Toivottavasti tämä opetusohjelma kattaa kaiken mitä tarvitset, jotta tee-komento voidaan hyödyntää mahdollisimman tehokkaasti. Mutta jos kohtaat tilanteen, jossa juutut tee-aiheisiin, jätä kommentti alla, ja voimme ehkä auttaa.