Opi Linux I/O (Input/Output) -ohjauksen perusteet
Yksi tärkeimmistä ja mielenkiintoisimmista aiheista Linux-hallinnossa on I/O-uudelleenohjaus. Tämän komentorivin ominaisuuden avulla voit ohjata komentojen syötteen ja/tai lähdön tiedostoista ja/tai tiedostoihin tai liittää useita komentoja yhteen putkien avulla muodostamaan ns. Komentoputkijärjestelmän.
Kaikki suorittamamme komennot tuottavat pohjimmiltaan kahdenlaisia tuloksia:
- komentotulos - tiedot, jotka ohjelma on suunniteltu tuottamaan, ja
- ohjelman tila- ja virheilmoitukset, jotka ilmoittavat käyttäjälle ohjelman suorituksen yksityiskohdista.
Linuxissa ja muissa Unix-tyyppisissä järjestelmissä on kolme alla nimettyä oletustiedostoa, jotka myös kuori tunnistaa tiedostokuvaajien numeroilla:
- stdin tai 0 - se on kytketty näppäimistöön, useimmat ohjelmat lukevat tämän tiedoston syötteen.
- stdout tai 1 - se on liitetty ruutuun, ja kaikki ohjelmat lähettävät tulokset tähän tiedostoon ja
- 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än mahdollistavat “<”
ja “>”
uudelleenohjausoperaattorit.
Kuinka ohjata vakiolähtö tiedostoon Linuxissa
Voit ohjata vakiolähdön kuten alla olevassa esimerkissä, tässä haluamme tallentaa ylimmän komennon lähdön myöhempää tarkastusta varten:
$ top -bn 5 >top.log
Missä liput:
-
-b
- sallii topin suorittamisen eräajotilassa, jotta voit ohjata sen lähdön tiedostoon tai toiseen komentoon. -
-n
- määrittää iteraatioiden määrän ennen komennon päättymistä.
Voit tarkastella top.log
-tiedoston sisältöä cat-komennolla seuraavasti:
$ cat top.log
Voit lisätä komennon lähdön “>>”
-operaattorilla.
Esimerkiksi, jos haluat liittää yläkomennon lähdön yläosaan top.log-tiedostoon erityisesti komentosarjassa (tai komentorivillä), kirjoita alla oleva rivi:
$ top -bn 5 >>top.log
Huomaa: Tiedostokuvaajan numeroa käyttämällä yllä oleva uudelleenohjauskomento on sama kuin:
$ top -bn 5 1>top.log
Kuinka ohjata tavallinen virhe tiedostoon Linuxissa
Jos haluat ohjata komennon vakiovirheen, sinun on määritettävä kuoren tiedostokuvaajan numero 2
, jotta ymmärrät mitä yrität tehdä.
Esimerkiksi alla oleva komento ls tuottaa virheen, kun normaali järjestelmän käyttäjä suorittaa sen ilman pääkäyttöoikeuksia:
$ ls -l /root/
Voit ohjata tavallisen virheen tiedostoon seuraavasti:
$ ls -l /root/ 2>ls-error.log $ cat ls-error.log
Liitä vakiovirhe käyttämällä seuraavaa komentoa:
$ ls -l /root/ 2>>ls-error.log
Kuinka ohjata vakiolähtö/virhe yhteen tiedostoon
On myös mahdollista siepata kaikki komennon lähdöt (sekä vakiolähtö että vakiovirhe) yhteen tiedostoon. Tämä voidaan tehdä kahdella mahdollisella tavalla määrittämällä tiedostokuvaajien numerot:
1. Ensimmäinen on suhteellisen vanha menetelmä, joka toimii seuraavasti:
$ ls -l /root/ >ls-error.log 2>&1
Yllä oleva komento tarkoittaa, että kuori lähettää ensin ls-komennon lähdön tiedostoon ls-error.log (käyttäen > ls-error.log
) ja kirjoittaa sitten kaikki virheilmoitukset tiedostokuvaajaan 2 (vakiolähtö), joka on ohjattu tiedostoon ls-error.log (käyttäen 2> & 1
). Tarkoituksena on, että vakiovirhe lähetetään myös samaan tiedostoon kuin vakiolähtö.
2. Toinen ja suora menetelmä on:
$ ls -l /root/ &>ls-error.log
Voit myös liittää vakiotulosteen ja vakiovirheen yhteen tiedostoon näin:
$ ls -l /root/ &>>ls-error.log
Kuinka ohjata vakiosyöttö tiedostoon
Suurin osa, elleivät kaikki komennot saa syötteensä vakiotulosta, ja oletusarvoisesti vakiotulo liitetään näppäimistöön.
Voit ohjata vakiosyötteen muusta tiedostosta kuin näppäimistöstä käyttämällä “<”
-operaattoria seuraavasti:
$ cat <domains.list
Kuinka ohjata vakiotulo/-lähtö tiedostoon
Voit suorittaa vakiosyötön, vakiolähdön uudelleenohjauksen samanaikaisesti käyttämällä alla olevaa lajittelukomentoa:
$ sort <domains.list >sort.output
Kuinka käyttää I/O-uudelleenohjausta putkilla
Voit ohjata yhden komennon lähdön toisen syötteenä käyttämällä putkia, tämä on tehokas tapa rakentaa hyödyllisiä komentorivejä monimutkaisiin operaatioihin.
Esimerkiksi alla olevassa komennossa luetellaan viisi viimeisintä muokattua tiedostoa.
$ ls -lt | head -n 5
Tässä vaihtoehdot:
-
-l
- mahdollistaa pitkän luettelomuodon -
-t
- lajittelu muokkausajan mukaan uusimmat tiedostot näytetään ensin -
-n
- määrittää näytettävien otsikkorivien määrän
Tärkeitä komentoja putkilinjojen rakentamiseen
Tässä tarkastelemme lyhyesti kahta tärkeää komentoa putkilinjojen rakentamiseksi ja ne ovat:
xargs, jota käytetään komentorivien rakentamiseen ja suorittamiseen vakiotulosta. Alla on esimerkki putkistosta, joka käyttää xargsia. 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:
-
-n 1
- kehottaa xargsia käyttämään enintään yhtä argumenttia komentoriviä kohti ja lähettämään sen cp-komennolle -
cp
- kopioi tiedoston -
-v
- näyttää kopiointikomennon edistymisen.
Lisää käyttömahdollisuuksia ja tietoja lukemalla xargs man -sivun
$ man xargs
Tee-komento lukee vakiotulosta ja kirjoittaa vakiotulosteeseen ja tiedostoihin. Voimme osoittaa tien toiminnan seuraavasti:
$ echo "Testing how tee command works" | tee file1
Linux-järjestelmänhallintatehtävät.
Lisätietoja Linux-suodattimista ja -putkista on tässä artikkelissa. Etsi 10 parasta IP-osoitetta, jotka käyttävät Apache-palvelinta, ja siinä on hyödyllinen esimerkki suodattimien ja putkien käytöstä.
Tässä artikkelissa selitimme I/O-uudelleenohjauksen perusteet Linuxissa. Muista jakaa ajatuksesi alla olevan palauteosan kautta.