Opi Linuxin I/O (Input/Output) -uudelleenohjauksen perusteet


Yksi tärkeimmistä ja mielenkiintoisimmista aiheista Linuxin hallinnassa on I/O-uudelleenohjaus. Tämän komentorivin ominaisuuden avulla voit uudelleenohjata komentojen syötteen ja/tai tulosteen tiedostoista ja/tai tiedostoihin tai yhdistää useita komentoja putkien avulla muodostamaan niin sanotun "komentoputkilinjan". .

Kaikki suorittamamme komennot tuottavat pohjimmiltaan kahdenlaisia tulosteita:

  1. komennon tulos – tiedot, joita ohjelma on suunniteltu tuottamaan, ja
  2. ohjelman tila ja virheilmoitukset, jotka ilmoittavat käyttäjälle ohjelman suoritustiedot.

Linuxissa ja muissa Unix-tyyppisissä järjestelmissä on kolme alla nimettyä oletustiedostoa, jotka myös tunnistetaan komentotulkin avulla tiedostokuvausnumeroiden avulla:

  1. stdin tai 0 – se on yhdistetty näppäimistöön, useimmat ohjelmat lukevat syötteen tästä tiedostosta.
  2. stdout tai 1 – se on liitetty näyttöön, ja kaikki ohjelmat lähettävät tulokset tähän tiedostoon ja
  3. stderr tai 2 – ohjelmat lähettävät tila-/virheilmoituksia tähän tiedostoon, joka on myös liitetty näyttöön.

Siksi I/O-uudelleenohjauksen avulla voit muuttaa komennon tulolähdettä sekä sitä, mihin sen lähtö- ja virheilmoitukset lähetetään. Ja tämä on mahdollista “< ”- ja “> ”-uudelleenohjausoperaattorien avulla.

Kuinka ohjata vakiotulostus tiedostoon Linuxissa

Voit ohjata vakiotulosteen kuten alla olevassa esimerkissä, tässä, haluamme tallentaa top-komennon lähdön myöhempää tarkastelua varten:

top -bn 5 >top.log

Missä liput:

  1. -b – mahdollistaa top:n suorittamisen erätilassa, jotta voit ohjata sen tulosteen tiedostoon tai toiseen komentoon.
  2. -n – määrittää iteraatioiden määrän ennen komennon päättymistä.

Voit tarkastella top.log-tiedoston sisältöä cat-komennolla seuraavasti:

cat top.log

Liitä komennon tulos käyttämällä ">> "-operaattoria.

Jos esimerkiksi haluat liittää yllä olevan top-komennon tulosteen top.log-tiedostoon erityisesti komentosarjan sisällä (tai komentorivillä), kirjoita alla oleva rivi:

top -bn 5 >>top.log

Huomaa: käyttämällä tiedostokuvaajan numeroa, yllä oleva tulosteen uudelleenohjauskomento on sama kuin:

top -bn 5 1>top.log

Kuinka ohjata vakiovirhe tiedostoon Linuxissa

Jos haluat ohjata komennon vakiovirheen, sinun on määritettävä nimenomaisesti tiedostokuvaajan numero 2, jotta komentotulkki ymmärtää, mitä yrität tehdä.

Esimerkiksi alla oleva ls-komento tuottaa virheen, kun sen suorittaa normaali järjestelmän käyttäjä ilman pääkäyttäjän oikeuksia:

ls -l /root/

Voit ohjata vakiovirheen tiedostoon seuraavasti:

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

Voit lisätä vakiovirheen käyttämällä alla olevaa komentoa:

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

Kuinka ohjata vakiolähtö/virhe yhteen tiedostoon

On myös mahdollista kaapata kaikki komennon tulos (sekä vakiotuloste että vakiovirhe) yhdeksi tiedostoksi. Tämä voidaan tehdä kahdella mahdollisella tavalla määrittämällä tiedostojen kuvaajan numerot:

1. Ensimmäinen on suhteellisen vanha menetelmä, joka toimii seuraavasti:

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

Yllä oleva komento tarkoittaa, että komentotulkki lähettää ensin ls-komennon tulosteen tiedostoon ls-error.log (käyttäen >ls-error.log-komentoa) ja kirjoittaa sitten kaikki virheilmoitukset tiedostokuvaajaan 2 (vakiolähtö), joka on uudelleenohjattu tiedostoon ls-error.log (käyttäen 2>&1 ). Tämä tarkoittaa, että vakiovirhe lähetetään myös samaan tiedostoon kuin vakiotuloste.

2. Toinen ja suora menetelmä on:

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

Voit myös liittää vakiotulosteen ja vakiovirheen yhteen tiedostoon seuraavasti:

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

Kuinka ohjata vakiosyöte tiedostoon

Useimmat, elleivät kaikki, komennot saavat syötteensä vakiosyötteestä, ja oletusarvoisesti vakiosyöte on liitetty näppäimistöön.

Jos haluat ohjata vakiosyötteen muusta tiedostosta kuin näppäimistöstä, käytä “< ”-operaattoria seuraavasti:

cat <domains.list 

Kuinka ohjata vakiosyöte/lähtö tiedostoon

Voit suorittaa vakiosyötön, vakiolähdön uudelleenohjauksen samanaikaisesti käyttämällä sort-komentoa alla:

sort <domains.list >sort.output

I/O-uudelleenohjauksen käyttäminen putkien avulla

Voit ohjata yhden komennon ulostulon toisen syötteeksi käyttämällä putkia. Tämä on tehokas tapa rakentaa hyödyllisiä komentoriviä monimutkaisiin toimintoihin.

Esimerkiksi alla oleva komento luettelee viisi parasta äskettäin muokattua tiedostoa.

ls -lt | head -n 5 

Tässä vaihtoehdot:

  1. -l – mahdollistaa pitkän listauksen muodon
  2. -t – lajittele muokkausajan mukaan, uusimmat tiedostot näytetään ensin
  3. -n – määrittää näytettävien otsikkorivien määrän

Tärkeät komennot putkistojen rakentamiseen

Tässä tarkastellaan lyhyesti kahta tärkeää komentoa komentoputkien rakentamiseen, ja ne ovat:

xargs, jota käytetään komentorivien luomiseen ja suorittamiseen vakiosyötteestä. Alla on esimerkki putkistosta, joka käyttää xargs-komentoa. Tätä komentoa käytetään tiedoston kopioimiseen useisiin hakemistoihin Linuxissa:

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

Ja vaihtoehdot:

  1. -n 1 – käskee xargsia käyttämään korkeintaan yhtä argumenttia per komentorivi ja lähettämään cp-komennolle
  2. cp – kopioi tiedoston
  3. -v – näyttää kopiointikomennon edistymisen.

Lisää käyttövaihtoehtoja ja tietoja löydät xargs -manuaalisivulta:

man xargs 

tee-komento lukee vakiosyötteen ja kirjoittaa vakiolähtöön ja tiedostoihin. Voimme osoittaa, kuinka tee toimii seuraavasti:

echo "Testing how tee command works" | tee file1 

Tiedosto- tai tekstisuodattimia käytetään yleisesti putkien kanssa tehokkaaseen Linux-tiedostotoimintoihin, tietojen käsittelyyn tehokkailla tavoilla, kuten komentojen tulosteen uudelleenjärjestelyllä (tämä voi olla elintärkeää hyödyllisten Linux-raporttien luomiseksi), tiedostojen tekstin muokkaamiseen sekä useisiin muihin Linux-järjestelmän hallintaan. tehtäviä.

Saat lisätietoja Linux-suodattimista ja -putkista lukemalla tämän artikkelin Etsi 10 suosituinta IP-osoitetta, jotka käyttävät Apache-palvelinta, näyttää hyödyllisen esimerkin suodattimien ja putkien käytöstä.

Tässä artikkelissa selitimme I/O-uudelleenohjauksen perusteet Linuxissa. Muista jakaa ajatuksesi alla olevan palauteosion kautta.