Kuinka tallentaa konsolin tulos tiedostoon. Striimit, ohjelmakanavat ja uudelleenohjaukset

Komennon uudelleenohjausoperaattoreita käytetään muuttamaan komentotulo- ja lähtövirtojen oletussijaintia johonkin muuhun paikkaan. Tulo- ja lähtövirran sijaintia kutsutaan kahvaksi.

Seuraavassa taulukossa kuvataan komentojen syöttö- ja lähtövirran uudelleenohjausoperaattorit.

UudelleenohjausoperaattoriKuvaus
> Kirjoittaa komennon tulosteen komentorivin sijaan tiedostoon tai laitteeseen, kuten tulostimeen.
< Lukee komennon syöttövirran tiedostosta näppäimistön sijaan.
>> Liittää komennon tulosteen tiedoston loppuun poistamatta olemassa olevia tietoja tiedostosta.
>& Lukee yhden kuvaajan tulosteen syötteenä toiselle kuvaajalle.
<& Lukee yhden kahvan syötteen toisen kahvan ulostulona.
| Lukee yhden komennon lähdön ja kirjoittaa sen toisen komennon tuloon. Tämä menettely tunnetaan kanavointina.

Oletusarvoisesti komentosyöttö (STDIN-kahva) lähetetään näppäimistöltä komentokulkkiin Cmd.exe, jonka jälkeen Cmd.exe lähettää komentotulosteen (STDOUT-kahva) komentokehoteikkunaan.

Seuraava taulukko näyttää käytettävissä olevat kuvaukset.

Numerot 0-9 edustavat 10 ensimmäistä kuvaajaa. Cmd.exe-komentotulkkia käytetään ohjelman suorittamiseen ja minkä tahansa 10 kahvan uudelleenohjaamiseen. Määritä tarvittava kahva kirjoittamalla sen numero ennen uudelleenohjausoperaattoria. Jos kahvaa ei ole määritetty, oletuksena syötteen uudelleenohjausoperaattori "<» будет ноль (0), а оператором перенаправления вывода «>" on yksi (1). Kun olet saapunut operaattoriin"<» или «>"On välttämätöntä ilmoittaa, missä tietoja luetaan ja mihin kirjoitetaan. Voit määrittää tiedostonimen tai minkä tahansa olemassa olevista kuvauksista.

Jos haluat määrittää uudelleenohjauksen olemassa oleviin kahvoihin, käytä et-merkkiä (&) ja sen jälkeen halutun kahvan numeroa (esim. & kahvan_numero). Jos esimerkiksi haluat ohjata kahvan 2 (STDERR) kahvaan 1 (STDOUT), kirjoita:

Päällekkäiset kuvaukset

Uudelleenohjausoperaattori "&" kopioi tulosteen tai syötteen yhdestä määritetystä kahvasta toiseen määritettyyn kahvaan. Jos esimerkiksi haluat lähettää dir-komennon tulosteen tiedosto.txt-tiedostoon ja lähettää virhetuloksen File.txt-tiedostoon, kirjoita:

dir>c:\file.txt 2>&1

Kuvaajaa kopioitaessa kaikki sen alkuperäiset ominaisuudet kopioidaan.

Jos esimerkiksi kahva on vain kirjoitus, kaikki sen kaksoiskappaleet ovat vain kirjoituskelpoisia. Et voi kopioida vain luku -kahvaa vain kirjoituskahvaksi.<)

Komentosyöttö uudelleenohjaus (<». Например, для ввода команды sort из файла List.txt введите:

Voit ohjata numeronäppäimistön syötteen tiedostoon tai laitteeseen käyttämällä "

järjestellä

Tiedosto.txt-tiedoston sisältö näkyy komentorivillä luettelona aakkosjärjestyksessä.<» открывает заданное имя файла с доступом только для чтения. Поэтому с его помощью нельзя записывать в файл. Например, при запуске программы с оператором <&2 все попытки прочитать дескриптор 0 ни к чему не приведут, так как изначально он был открыт с доступом только для записи.

Operaattori"

  • Huom<».

Kahva 0 on syötteen uudelleenohjausoperaattorin oletusarvo

Uudelleenohjauskomennon lähtö (>)

Lähes kaikkien komentojen tulos näkyy komentokehoteikkunassa. Jopa komennot, jotka tulostavat tietoja levylle tai tulostimeen, tuottavat viestejä ja kehotteita Komentorivi-ikkunassa.

Voit ohjata komentojen tulosteen komentokehoteikkunasta tiedostoon tai laitteeseen käyttämällä ">"-operaattoria. Tätä operaattoria käytetään useimpien komentojen kanssa. Jos haluat esimerkiksi ohjata dir-komennon tulosteen tiedostoon Dirlist.txt, kirjoita:

dir>dirlist.txt Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla.

ohj Suorittaaksesi komennon netsh-reititysvedos

ja lähetä sitten työnsä tulokset Route.cfg:lle, kirjoita:

netsh-reititysvedos > c:\route.cfg<&0 все попытки записать дескриптор 1 ни к чему не приведут, так как изначально дескриптор 0 был открыт с доступом только для чтения.

">"-operaattori avaa määritetyn tiedoston, jolla on vain kirjoitusoikeus. Siksi tiedostoa ei voi lukea tällä operaattorilla. Esimerkiksi suoritettaessa ohjelmaa uudelleenohjausoperaattorilla

  • Huom.

Kahva 1 on oletusarvo tulosten uudelleenohjausoperaattorille ">".<&» для перенаправления ввода и дублирования

käyttämällä operaattoria "

Jotta voit käyttää syötteen uudelleenohjausoperaattoria, määritettävän tiedoston on oltava jo olemassa. Jos syöttötiedosto on olemassa, Cmd.exe-komentotulkki avaa sen vain luku -oikeuksin ja lähettää sen sisällön komennolle ikään kuin se olisi numeronäppäimistön syöte. Kun kahva on määritetty, Cmd.exe-komentotulkki kopioi sen järjestelmässä olevaksi kahvaksi.

Jos haluat esimerkiksi lukea File.txt-tiedoston syötekuvaajaksi 0 (STDIN), kirjoita:

Voit ohjata numeronäppäimistön syötteen tiedostoon tai laitteeseen käyttämällä "< file.txt

Voit avata File.txt-tiedoston, lajitella sen sisällön ja lähettää sen komentokehoteikkunaan (STDOUT) kirjoittamalla:

Voit etsiä File.txt-tiedoston ja ohjata kahvan 1 (STDOUT) ja kahvan 2 (STDERR) Search.txt-tiedostoon kirjoittamalla:<&1

Jos haluat kopioida käyttäjän määrittämän kuvaajan 3 syötteeksi kuvaajalle 0 (STDIN), kirjoita:

Käytä ">&"-operaattoria syötteen uudelleenohjaamiseen ja kopioimiseen

Kun ohjaat tulosteen uudelleen tiedostoon ja määrität olemassa olevan tiedostonimen, Cmd.exe-komentotulkki avaa tiedoston vain kirjoitusoikeuksin ja korvaa sen sisällön. Jos kahva on määritetty, Cmd.exe-komentotulkki kopioi tiedoston olemassa olevaan kahvaan.

Jos haluat kopioida käyttäjän määrittämän kuvaajan 3 kuvaajaksi 1, kirjoita:


Uudelleenohjataksesi kaiken lähdön, mukaan lukien deskriptorin 2 lähdön (STDERR), komennot ipconfig kahvaan 1 (STDOUT) ja ohjaa sitten tulos Output.logiin, kirjoita:


ipconfig.exe>>output.log 2>&1

Käytä ">>" Operaattoria liittämään tulos

Jos haluat liittää komennon tulosteen tiedoston loppuun menettämättä siihen tallennettuja tietoja, käytä kaksinkertaista suurempaa kuin merkkiä (>>). Esimerkiksi seuraava komento lisää komennon luoman hakemistoluettelon Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla, Dirlist.txt-tiedostoon:


dir>>dirlist.txt

Lisää komentotulostus netstat kirjoita Tcpinfo.txt-tiedoston loppuun:


netstat>>tcpinfo.txt

Joskus on mukavampaa kirjoittaa se näin:

SET OutFile="%~n0.html" > %OutFile% ECHO ^ >> %OutFile% ECHO ^ >> %OutFile% ECHO ^ paras sivu^>> %OutFile% ECHO ^>> %OutFile% ECHO ^ >> %OutFile% ECHO Hello World >> %OutFile% ECHO ^>> %OutFile% ECHO ^

Kanavan operaattorin käyttäminen (|)

Pystyviivaputkioperaattori (|) ottaa yhden komennon lähdön (oletus STDOUT) ja ohjaa sen toisen komennon tuloon (oletus STDIN). Esimerkiksi seuraava komento lajittelee hakemiston:

Tässä esimerkissä molemmat komennot suoritetaan samanaikaisesti, mutta komento järjestellä pysähtyy, kunnes komennon ulostulo vastaanotetaan Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla. Joukkue järjestellä käyttää komentolähtöä Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla syötteenä ja lähettää sitten ulostulonsa kuvaajalle 1 (STDOUT).

Komentojen yhdistäminen uudelleenohjausoperaattoreihin

Yhdistämällä suodatinkomentoja muihin komentoihin ja tiedostonimiin voit luoda mukautettuja komentoja. Jos haluat esimerkiksi tallentaa tiedostonimiä, jotka sisältävät merkkijonon "LOG", käytä seuraavaa komentoa:

hakemisto /b | etsi "LOG" > loglist.txt

Komentotulostus Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla lähetetään suodatinkomentoon löytää. Merkkijonon "LOG" sisältävät tiedostonimet tallennetaan Loglist.txt-tiedostoon luettelona (esimerkiksi NetshConfig.log, Logdat.svd ja Mylog.bat).

Käytettäessä useampaa kuin yhtä suodatinta yhdessä komennossa, ne on erotettava putkella (|). Esimerkiksi seuraava komento etsii kustakin C-aseman hakemistosta tiedostoja, joiden nimessä on merkkijono "Log", ja näyttää ne sivulta:

hakemisto c:\ /s /b | etsi "LOG" | lisää

Putken (|) läsnäolo kertoo cmd.exe:lle, että DIR-komennon tulos tulee lähettää suodatinkomentoon löytää. Find-komento valitsee vain ne tiedostonimet, jotka sisältävät merkkijonon "LOG". More-komento näyttää komennolla saadut tiedostonimet löytää tauolla jokaisen näytön täyttymisen jälkeen. Lisätietoja suodatinkomennoista on kohdassa

Komennon uudelleenohjausoperaattoreita käytetään muuttamaan komentotulo- ja lähtövirtojen oletussijaintia johonkin muuhun paikkaan. Tulo- ja lähtövirran sijaintia kutsutaan kahvaksi.

Seuraavassa taulukossa kuvataan komentojen syöttö- ja lähtövirran uudelleenohjausoperaattorit.

Uudelleenohjausoperaattori

Kuvaus

Kirjoittaa komennon tulosteen komentorivin sijaan tiedostoon tai laitteeseen, kuten tulostimeen.

Lukee komennon syöttövirran tiedostosta näppäimistön sijaan.

Liittää komennon tulosteen tiedoston loppuun poistamatta olemassa olevia tietoja tiedostosta.

Lukee yhden kuvaajan tulosteen syötteenä toiselle kuvaajalle.

Lukee yhden kahvan syötteen toisen kahvan ulostulona.

Lukee yhden komennon lähdön ja kirjoittaa sen toisen komennon tuloon. Tämä menettely tunnetaan kanavointina.

Oletusarvoisesti komentosyöttö (STDIN-kahva) lähetetään näppäimistöltä komentokulkkiin Cmd.exe, jonka jälkeen Cmd.exe lähettää komentotulosteen (STDOUT-kahva) komentokehoteikkunaan.

Seuraava taulukko näyttää käytettävissä olevat kuvaukset.

Numerot 0-9 edustavat 10 ensimmäistä kuvaajaa. Cmd.exe-komentotulkkia käytetään ohjelman suorittamiseen ja minkä tahansa 10 kahvan uudelleenohjaamiseen. Määritä tarvittava kahva kirjoittamalla sen numero ennen uudelleenohjausoperaattoria. Jos kahvaa ei ole määritetty, oletuksena syötteen uudelleenohjausoperaattori "<» будет ноль (0), а оператором перенаправления вывода «>" on yksi (1). Kun olet saapunut operaattoriin"<» или «>"On välttämätöntä ilmoittaa, missä tietoja luetaan ja mihin kirjoitetaan. Voit määrittää tiedostonimen tai minkä tahansa olemassa olevista kuvauksista.

Jos haluat määrittää uudelleenohjauksen olemassa oleviin kahvoihin, käytä et-merkkiä (&) ja sen jälkeen halutun kahvan numeroa (esim. & kahvan_numero). Jos esimerkiksi haluat ohjata kahvan 2 (STDERR) kahvaan 1 (STDOUT), kirjoita:

Päällekkäiset kuvaukset

Uudelleenohjausoperaattori "&" kopioi tulosteen tai syötteen yhdestä määritetystä kahvasta toiseen määritettyyn kahvaan. Esimerkiksi komentotulosteen lähettämiseen Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla Tiedosto.txt-tiedostoon ja lähetä virhetuloste File.txt-tiedostoon, kirjoita:

dir>c:\file.txt 2>&1

Kuvaajaa kopioitaessa kaikki sen alkuperäiset ominaisuudet kopioidaan. Jos esimerkiksi kahva on vain kirjoitus, kaikki sen kaksoiskappaleet ovat vain kirjoituskelpoisia. Et voi kopioida vain luku -kahvaa vain kirjoituskahvaksi.

Jos esimerkiksi kahva on vain kirjoitus, kaikki sen kaksoiskappaleet ovat vain kirjoituskelpoisia. Et voi kopioida vain luku -kahvaa vain kirjoituskahvaksi.<)

Voit ohjata numeronäppäimistön syötteen tiedostoon tai laitteeseen käyttämällä "<». Например, для ввода команды järjestellä kirjoita List.txt-tiedostosta:

Voit ohjata numeronäppäimistön syötteen tiedostoon tai laitteeseen käyttämällä "

järjestellä

Tiedosto.txt-tiedoston sisältö näkyy komentorivillä luettelona aakkosjärjestyksessä.<» открывает заданное имя файла с доступом только для чтения. Поэтому с его помощью нельзя записывать в файл. Например, при запуске программы с оператором <&2 все попытки прочитать дескриптор 0 ни к чему не приведут, так как изначально он был открыт с доступом только для записи.

Operaattori"

  • Huom<».

Kahva 0 on syötteen uudelleenohjausoperaattorin oletusarvo

Lähes kaikkien komentojen tulos näkyy komentokehoteikkunassa. Jopa komennot, jotka tulostavat tietoja levylle tai tulostimeen, tuottavat viestejä ja kehotteita Komentorivi-ikkunassa.

Jos haluat ohjata komentokehote-ikkunan tulosteet tiedostoon tai laitteeseen, käytä ">"-operaattoria. Tätä operaattoria käytetään useimpien komentojen kanssa. Esimerkiksi ohjata komennon ulostulo uudelleen Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla kirjoita Dirlist.txt-tiedostoon:

dir>dirlist.txt

Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla.

ohj Suorittaaksesi komennon ja lähetä sitten työnsä tulokset Route.cfg:lle, kirjoita:

Suorittaaksesi komennon>c:\route.cfg

">"-operaattori avaa määritetyn tiedoston, jolla on vain kirjoitusoikeus. Siksi tiedostoa ei voi lukea tällä operaattorilla. Esimerkiksi suoritettaessa ohjelmaa uudelleenohjausoperaattorilla<&0 все попытки записать дескриптор 1 ни к чему не приведут, так как изначально дескриптор 0 был открыт с доступом только для чтения.

">"-operaattori avaa määritetyn tiedoston, jolla on vain kirjoitusoikeus. Siksi tiedostoa ei voi lukea tällä operaattorilla. Esimerkiksi suoritettaessa ohjelmaa uudelleenohjausoperaattorilla

  • Huom.

Kahva 1 on oletusarvo tulosten uudelleenohjausoperaattorille ">".<&» для перенаправления ввода и дублирования

Jotta voit käyttää syötteen uudelleenohjausoperaattoria, määritettävän tiedoston on oltava jo olemassa. Jos syöttötiedosto on olemassa, Cmd.exe-komentotulkki avaa sen vain luku -oikeuksin ja lähettää sen sisällön komennolle ikään kuin se olisi numeronäppäimistön syöte. Kun kahva on määritetty, Cmd.exe-komentotulkki kopioi sen järjestelmässä olevaksi kahvaksi.

Jotta voit käyttää syötteen uudelleenohjausoperaattoria, määritettävän tiedoston on oltava jo olemassa. Jos syöttötiedosto on olemassa, Cmd.exe-komentotulkki avaa sen vain luku -oikeuksin ja lähettää sen sisällön komennolle ikään kuin se olisi numeronäppäimistön syöte. Kun kahva on määritetty, Cmd.exe-komentotulkki kopioi sen järjestelmässä olevaksi kahvaksi.

< tiedosto.txt

Voit avata File.txt-tiedoston, lajitella sen sisällön ja lähettää sen komentokehoteikkunaan (STDOUT) kirjoittamalla:

Voit ohjata numeronäppäimistön syötteen tiedostoon tai laitteeseen käyttämällä "< tiedosto.txt

Voit etsiä File.txt-tiedoston ja ohjata kahvan 1 (STDOUT) ja kahvan 2 (STDERR) Search.txt-tiedostoon kirjoittamalla:

Voit etsiä File.txt-tiedoston ja ohjata kahvan 1 (STDOUT) ja kahvan 2 (STDERR) Search.txt-tiedostoon kirjoittamalla:<&1

Jos haluat kopioida käyttäjän määrittämän kuvaajan 3 syötteeksi kuvaajalle 0 (STDIN), kirjoita:

Käytä ">&"-operaattoria syötteen uudelleenohjaamiseen ja kopioimiseen

Kun ohjaat tulosteen uudelleen tiedostoon ja määrität olemassa olevan tiedostonimen, Cmd.exe-komentotulkki avaa tiedoston vain kirjoitusoikeuksin ja korvaa sen sisällön. Jos kahva on määritetty, Cmd.exe-komentotulkki kopioi tiedoston olemassa olevaan kahvaan.

Jos haluat kopioida käyttäjän määrittämän kuvaajan 3 kuvaajaksi 1, kirjoita:

Uudelleenohjataksesi kaiken lähdön, mukaan lukien deskriptorin 2 lähdön (STDERR), komennot ipconfig kahvaan 1 (STDOUT) ja ohjaa sitten tulos Output.logiin, kirjoita:

ipconfig.exe>>output.log 2>&1

Käytä ">>" Operaattoria liittämään tulos

Jos haluat liittää komennon tulosteen tiedoston loppuun menettämättä siihen tallennettuja tietoja, käytä kaksinkertaista suurempaa kuin merkkiä (>>). Esimerkiksi seuraava komento lisää komennon luoman hakemistoluettelon Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla, Dirlist.txt-tiedostoon:

dir>>dirlist.txt

Lisää komentotulostus netstat kirjoita Tcpinfo.txt-tiedoston loppuun:

netstat>>tcpinfo.txt

Kanavan operaattorin käyttäminen (|)

Pystyviivaputkioperaattori (|) ottaa yhden komennon lähdön (oletus STDOUT) ja ohjaa sen toisen komennon tuloon (oletus STDIN). Esimerkiksi seuraava komento lajittelee hakemiston:

ohjaaja | järjestellä

Tässä esimerkissä molemmat komennot suoritetaan samanaikaisesti, mutta komento järjestellä pysähtyy, kunnes komennon ulostulo vastaanotetaan Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla. Joukkue järjestellä käyttää komentolähtöä Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla syötteenä ja lähettää sitten ulostulonsa kuvaajalle 1 (STDOUT).

Komentojen yhdistäminen uudelleenohjausoperaattoreihin

Yhdistämällä suodatinkomentoja muihin komentoihin ja tiedostonimiin voit luoda mukautettuja komentoja. Jos haluat esimerkiksi tallentaa tiedostonimiä, jotka sisältävät merkkijonon "LOG", käytä seuraavaa komentoa:

hakemisto /b | etsi "LOG" > loglist.txt

Komentotulostus Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla lähetetään suodatinkomentoon löytää. Merkkijonon "LOG" sisältävät tiedostonimet tallennetaan Loglist.txt-tiedostoon luettelona (esimerkiksi NetshConfig.log, Logdat.svd ja Mylog.bat).

Käytettäessä useampaa kuin yhtä suodatinta yhdessä komennossa, ne on erotettava putkella (|). Esimerkiksi seuraava komento etsii kustakin C-aseman hakemistosta tiedostoja, joiden nimessä on merkkijono "Log", ja näyttää ne sivulta:

hakemisto c:\ /s /b | etsi "LOG" | lisää

Putken (|) läsnäolo osoittaa Cmd.exe-tiedostolle, että komento tulostuu Jos Dirlist.txt-tiedostoa ei ole olemassa, Cmd.exe-komentotulkki luo sen. Jos tiedosto on olemassa, Cmd.exe korvaa tiedoston tiedot komennosta saaduilla tiedoilla täytyy lähettää suodatinkomentoon löytää. Joukkue löytää valitsee vain ne tiedostonimet, jotka sisältävät merkkijonon "LOG". Joukkue lisää näyttää komennolla saadut tiedostonimet löytää tauolla jokaisen näytön täyttymisen jälkeen.

Hyvää aikaa lukijani!
Tässä artikkelissa haluan systematisoida tietoni perusperiaatteiden mukaisesti ohjelmavirtojen ja kanavien toiminta tulkissa ja yleensä Linux-käyttöjärjestelmässä sekä mahdollisuuksista uudelleenohjaukset tiedot purot.
Aivan alussa haluaisin huomauttaa, että tulkki toimii kolmen vakiovirran kanssa:

  1. stdout Tämä vakiolähtö, joka tarjoaa komennon tulosteen. Virran kuvaaja on 1.
  2. stderr Tämä normaali virhevirta, joka tulostaa komentovirheet. Sen kuvaaja on 2.
  3. stdin Tämä vakiotulo, joka syöttää komentoja. Sen kuvaaja on 0.

Kuvataan nyt yksinkertaisin sanoin, mitä nämä kolme kohtaa tarkoittavat:

stdout- vakiolähtövirta. Yksinkertaisesti sanottuna tämä on tieto, jonka näemme tulkissa suoritettaessa komentoja. Eli kaikki viestit (ilman virheilmoituksia), jotka tulkissa suoritettu komento raportoi ja näyttää päätteellä (lue: näytöllä). (tulostus näytölle on asetettu oletusarvoisesti, mutta voit myös määrittää tulosteen esimerkiksi tiedostoon tai ohjata toiseen komentoon; kerron kuinka tämä tehdään alla)

stderr- virhevirta. Nämä ovat virheitä suoritettaessa komentoja bashissa, jotka oletusarvoisesti lähetetään stdoutiin eli päätteeseen (jälleen, ellei lähtöä ole määritetty toiseen paikkaan)

stdin- tulovirta. Yksinkertaisesti sanottuna tämä on se, mitä syötämme näppäimistöltä tulkkiin suorittaaksemme komennon.

Nämä virrat on kuvattu erittäin hyvin kuvassa, joka on otettu osoitteesta http://rus-linux.net/:

Tässä kuvassa: Vihreällä näkyvässä Stdinissä on kahva 0
Stdout, joka näkyy punaisella, on kahva 1
Sinisellä näkyvässä Stderrissä on kahva 2

Seuraavaksi kerron sinulle, kuinka nämä streamit voidaan ohjata tiedostoon tai tiedostosta. Eli komentoa suoritettaessa niin, että viestit tai virheet eivät näy näytöllä, vaan ne kirjoitetaan tiedostoon. Mitä varten tämä on? No, esimerkiksi suoritat jotain komentoa, jonka tulos ei mahdu pääteikkunaan. Kerrot sen tallentamaan vakiotulosteen yhteen tiedostoon ja vakiovirheen toiseen. Siten kaikki virheet ja jos standarditulostusta tarvitaan, voit tarkastella yksityiskohtaisesti avaamalla tallennetut tiedostot.

Eli ketjun uudelleenohjaus tehdään näin:

$ komento n> tiedosto

Tämä rivi näyttää: komennon suoritus komento ja virtauksen uudelleenohjaus (jos n= stream-kahva) tiedostoon tiedosto. Kun suoritat tämän uudelleenohjauksen, jos kohdetiedosto on olemassa, se tulee olemaan nauhoitettu uudelleen. Tässä tapauksessa, jos n:ää ei ole määritetty, oletetaan vakiolähtö.

$-komento n>>tiedosto

Tällä komennolla on samanlainen syntaksi, mutta tässä on määritetty ">>"-symboli. Tällä uudelleenohjauksella, jos kohdetiedosto on olemassa, komennon tulos liitetään olemassa oleviin tietoihin.

$komento< file

tässä esimerkissä komento komento suoritetaan ja käyttää tiedostoa syöttölähteenä tiedosto, näppäimistön sijaan

Joskus on tarpeen yhdistää vakiovirhevirta vakiolähtövirtaan, jotta virheet ja normaali ohjelman tulos voidaan käsitellä yhdessä. Näihin tarkoituksiin käytetään yhdistelmää symbolin kanssa: &. Esimerkki tästä toiminnasta:

Etsi / -nimi .name_file > /polku/tiedostoon 2>&1

Kun tämä komento suoritetaan, tiedostoa etsitään tiedostojärjestelmän juuresta nimellä .name_file ja hakutulosten (stdout ja stderr) uudelleenohjaaminen tiedostoon /polku/tiedostoon. Design > /polku/tiedostoon 2>&1 ohjaa vakiotulosteen kohteeseen /polku/tiedostoon ja tulostusvirheet vakiotulostukseen. Tästä huolimatta: 2>&1:n kirjoittaminen ennen > ei toimi, koska tulkki lukeessaan 2>&1 ei vielä tiedä minne vakiolähtövirta ohjataan, joten virhe- ja lähtövirtaa ei yhdistetä.

$ komento > tiedosto 2>&1

samanlainen kuin kirjoittaminen:

$ komento &> tiedosto

$-komento 2>&tiedosto

Jos tulos on jätettävä huomiotta, se voidaan ohjata /dev/null-laitteeseen, tämä on eräänlainen "musta aukko", joka ottaa minkä tahansa määrän tietoa ja muuttaa sen tyhjäksi.

Luulen, että virtauksen uudelleenohjauksesta annetut tiedot riittävät ymmärtämään olemuksen, nyt kerron siitä kuljettimen siirto.

Putkilinja Linuxissa on useiden ohjelmien kyky toimia yhdessä, kun yhden ohjelman tulos siirretään suoraan toisen tuloon ilman väliaikaisia ​​väliaikaistiedostoja. Liukuhihnan käytön syntaksi on seuraava:

$komento1 | komento2

Tässä esimerkissä komento suoritetaan komento1, sen lähtövirtaa käytetään tulovirtana suoritettaessa komento2.

Siinä kaikki tälle päivälle. Otan mielelläni kommentteja ja lisäyksiä. Kiitos.

Ystävällisin terveisin, McSim!

I/O-uudelleenkartoituksen avulla yksi ohjelma voi ohjata tulostensa toisen ohjelman tuloon tai siepata toisen ohjelman lähdön ja käyttää sitä tulonaan. Siten on mahdollista siirtää tietoa prosessista prosessiin minimaalisella ohjelmiston kulutuksella. Käytännössä tämä tarkoittaa, että ohjelmille, jotka käyttävät tavallisia syöttö- ja tulostuslaitteita, käyttöjärjestelmä sallii:

  • lähetä ohjelman viestejä ei näytölle (tavallinen tulostusvirta), vaan tiedostoon tai tulostimeen (ulostulon uudelleenohjaus);
  • lue syöttödataa ei näppäimistöltä (tavallinen syöttövirta), vaan aiemmin valmistetusta tiedostosta (syöttö uudelleenohjaus);
  • välittää yhden ohjelman tuottamat viestit syötteenä toiselle ohjelmalle (liukuhihna tai käskykoostumus).

Nämä ominaisuudet toteutetaan komentoriviltä seuraavasti. Jotta voit ohjata millä tahansa komennolla tulostetut tekstiviestit komentoriviltä tekstitiedostoon, sinun on käytettävä rakennetta komento > tiedostonimi. Jos tulostettavaksi määritetty tiedosto on jo olemassa, se korvataan (vanha sisältö katoaa, jos sitä ei ollut olemassa, se luodaan). Et myöskään voi luoda tiedostoa uudelleen, vaan liittää komennolla tulostetut tiedot olemassa olevan tiedoston loppuun. Tätä varten tulosteen uudelleenohjauskomento on määritettävä seuraavasti: komento >> tiedostonimi. Symbolin käyttö< можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла: команда < имя_файла

Esimerkkejä I/O-uudelleenohjauksesta komentorivillä

Tässä on esimerkkejä I/O-uudelleenohjauksesta.

1. Tulosten tuottaminen ping-komennot arkistoida ping ya.ru > ping.txt

2. Lisää ohjeteksti kohteelle XCOPY-komennot copy.txt-tiedostoon: XCOPY /? >> copy.txt

Tarvittaessa virheilmoitukset (normaali virhevirta) voidaan ohjata tekstitiedostoon komennolla 2> filename konstrukti. Tässä tapauksessa vakiotulostus tulostetaan näytölle. On myös mahdollista tulostaa tieto- ja virheilmoituksia samaan tiedostoon. Tämä tehdään seuraavasti: komento > tiedostonimi 2 >&1

Esimerkiksi seuraava komento ohjaa vakiotulosteen ja vakiovirheen tiedostoon copy.txt: XCOPY A:\1.txt C: > kopioi.txt 2>&1

Mikä tahansa ohjelma on "automaattinen kone", joka on suunniteltu käsittelemään tietoja: vastaanottaessaan yhden tiedon syötteenä se tuottaa toisen työn tuloksena. Vaikka saapuva ja/tai lähtevä informaatio voi olla nolla, toisin sanoen yksinkertaisesti poissa. Ohjelmalle prosessoitavaksi siirrettävä tieto on sen syöttö, mitä se työnsä tuloksena tuottaa, on sen tulos. Jokaisen ohjelman syötteiden ja tulosteiden järjestäminen on käyttöjärjestelmän tehtävä.

Jokainen ohjelma toimii tietyn tyyppisten tietojen kanssa: teksti, grafiikka, ääni jne. Kuten luultavasti on jo käynyt selväksi, Linuxin pääjärjestelmänhallintaliittymä on pääte, joka on suunniteltu siirtämään tekstitietoja käyttäjältä järjestelmään ja takaisin. Koska päätelaitteesta voidaan syöttää ja tulostaa vain tekstitietoja, myös päätteeseen liittyvien ohjelmien tulon ja lähdön on oltava tekstiä. Tarve toimia tekstidatan kanssa ei kuitenkaan rajoita järjestelmän hallintaominaisuuksia, vaan päinvastoin laajentaa niitä. Ihminen voi lukea minkä tahansa ohjelman tulosteen ja selvittää, mitä järjestelmässä tapahtuu, ja eri ohjelmat osoittautuvat keskenään yhteensopiviksi, koska ne käyttävät samantyyppistä tiedon esitystapaa - tekstiä.

Komennot ja komentosarjat voivat vastaanottaa syötteitä kahdella tavalla: vakiosyötteestä (linkitetty näppäimistöön) tai tiedostosta. Samanlainen erottelu on olemassa tulosteille: komennon tai komentosarjan tulos lähetetään oletuksena päätenäytölle, mutta voit ohjata sen uudelleen tiedostoon. Jos käytön aikana tapahtuu virheitä. Niitä koskevat viestit näkyvät myös näytöllä, ja virhevirta voidaan myös ohjata tiedostoon.

Katsotaanpa ensin pari komentoa, joita voidaan käyttää I/O:n järjestämiseen.

Lähtökomennot vakiolähtölaitteeseen

Linux tarjoaa useita komentoja viestien tulostamiseksi vakiotulostukseen:

  • echo - Tulosta merkkijono vakiotulosteeseen.
  • printf - Tulosta muotoiltu teksti vakiotulostukseen.
  • kyllä ​​- Tulosta toistuva teksti vakiotulosteeseen.
  • seq - Tulosta numerosarja vakiotulostukseen
  • Clear Tyhjennä näyttö tai ikkuna.

Jos esimerkiksi käytät echo-komentoa, jos määrität ohjausmerkin \c, silloin kun tulos on valmis, uudelle riville ei siirrytä:

$ echo "Mikä on nimesi?\c"

Mikä sinun nimesi on? $

Tässä $ on kutsusymboli.

Rivi voi myös laskea komentotulkkimuuttujien ja jopa muiden komentojen arvot. Esimerkiksi seuraava komento kertoo, mikä nykyisen käyttäjän kotihakemisto on ($HOME-ympäristömuuttuja) ja mihin päätteeseen hän on yhteydessä (tty-komento on takalainausmerkkien sisällä, jotta tulkki laittaa tulosteen riville).

$ echo "Kotihakemistosi on $HOME, olet yhteydessä terminaaliin - `tty` "

Kotihakemistosi on /home/knoppix, olet yhteydessä päätteeseen - /dev/tty1

Koska kaksoislainausmerkeillä on erityinen tarkoitus komentotulkissa, jotta voit sisällyttää kaksoislainausmerkkejä tulostemerkkijonoon, sinun on kumottava niiden erikoistarkoitus kenoviivalla (\). Tämä peruuttaa minkä tahansa erikoismerkin määrityksen.

Esimerkiksi merkkijonon "/dev/tty1" näyttämiseksi sinun on suoritettava:

$echo “\”/dev/tty1\””

Syötä komennot tavallisesta syöttölaitteesta

Read-komento lukee yhden rivin vakiosyötteestä ja kirjoittaa sen sisällön määritettyihin muuttujiin. Kun määritetään useita muuttujia, ensimmäinen sana kirjoitetaan ensimmäiseen, toinen sana toiseen jne. viimeinen sisältää loput rivistä.

Seuraava komentosarja kutsuu erillisen lukukomennon jokaisen muuttujan lukemiseksi.


$ kissan testi
#!/bin/bash
echo "Nimi: \c"
lue nimi
echo "Sukunimi: \c"
lue sukunimi
echo “Etunimi=” $nimi “Sukunimi=” $sukunimi

Tämän skriptin suorittamiseksi sinun on annettava testitiedostolle suoritusoikeus: chmod 0755 test ja suoritettava se./test.

Teloituksen tulos: Etunimi: Ivan Sukunimi: Petrov Etunimi=Ivan Sukunimi=Petrov

STANDARDIN TULO-, LÄHTÖ- JA VIRHETILA

Jokainen komentotulkin käynnistämä ohjelma vastaanottaa kolme avointa I/O-virtaa:

Vakiotulo (sldin) - vakiolähtö (sldout) - vakiovirhelähtö (stderr)

Oletusarvoisesti nämä säikeet liittyvät terminaaliin. Ne. Kaikki ohjelmat, jotka eivät käytä muita kuin vakiovirtoja, odottavat syötettä päätteen näppäimistöltä, mukaan lukien virheilmoitukset, näkyvät päätenäytössä.

Lisäksi jokaiseen komentotulkkiin suoritettuun prosessiin (komento, komentosarja jne.) liittyy useita avoimia tiedostoja, joista prosessi voi lukea tietojaan ja joihin se voi kirjoittaa sen. Jokainen näistä tiedostoista tunnistetaan numerolla, jota kutsutaan tiedostokuvaajaksi, mutta kolme ensimmäistä tiedostoa ovat oletusarvoisia I/O-virtoja:
Tiedoston kuvaus
Vakiosyöttövirta 0
Vakiolähtö 1

Normaali virhevirta 2

Todellisuudessa luodaan 12 avointa tiedostoa, mutta tiedostot, joiden kuvaajat ovat 0, 1 ja 2, on varattu vakiosyötölle, -tulostukselle ja virheille. Käyttäjät voivat myös käsitellä tiedostoja, joiden tiedostokuvaajat ovat 3–9 (varattu).

Vakiotulostetiedostossa (stdout) on kahva 1. Kaikki prosessin tulosteet kirjoitetaan tähän tiedostoon. Oletusarvoisesti tiedot tulostetaan päätenäytölle (device/dev/tty), mutta ne voidaan myös ohjata uudelleen tiedostoon tai ohjata toiseen prosessiin.

Vakiovirhevirran (siderr) tiedostolla on kuvaaja 2. Komennon suorittamisen aikana ilmenevät virheilmoitukset kirjoitetaan tähän tiedostoon. Oletusarvoisesti virheilmoitukset tulostetaan päätenäytölle (laite /dev/tty), mutta ne voidaan myös ohjata tiedostoon. Miksi lokivirheitä varten varataan erityinen tiedosto? Tosiasia on, että tämä on erittäin kätevä tapa eristää todelliset lähtötiedot komennon työn tuloksista sekä hyvä tilaisuus järjestää tehokkaasti erilaisten lokitiedostojen ylläpito.

Suuri määrä apuohjelmia käyttää vain vakiovirtoja. Tällaisissa ohjelmissa komentotulkki mahdollistaa I/O-virtojen uudelleenohjauksen itsenäisesti. Voit esimerkiksi estää virheilmoitukset, asettaa syötteen tai ulostulon tiedostosta.

Ne. Kun kutsut komentoja, voit määrittää, mihin tulo tulee vastaanottaa ja minne lähtö lähetetään, sekä virheilmoitukset. Oletuksena, ellei toisin mainita, työskentely päätelaitteen kanssa oletetaan: tiedot syötetään näppäimistöltä ja näytetään näytöllä. Mutta shell-tulkkissa on uudelleenohjausmekanismi, joka mahdollistaa standardivirtojen liittämisen eri tiedostoihin. Tässä tapauksessa vakiovirhevirtaa ohjattaessa on määritettävä tiedostokuvaaja (2). Tämä ei ole tarpeen tulo- ja lähtövirroille.

Hyödyllinen erikoistapaus säikeen uudelleenohjausmekanismin käyttämiselle on uudelleenohjaus hakemistoon /dev/null, jonka avulla voit päästä eroon tarpeettomista viesteistä näytöllä. Voit luoda tyhjiä tiedostoja samalla mekanismilla:

% cat myfile - luo tyhjän tiedoston myfile nykyiseen hakemistoon.

/dev/null on erityinen tiedosto, joka on ns. "tyhjä laite" Siihen kirjoittaminen onnistuu "tallennettujen" tietojen määrästä riippumatta. Lukeminen tiedostosta /dev/null vastaa tiedoston EOF lopun lukemista.

I/O-virtojen uudelleenohjaus suoritetaan samalla tavalla kuin DOS (tarkemmin sanottuna DOS-käyttöjärjestelmä otti syntaksin virtojen uudelleenohjaukseen UNIXista) käyttämällä symboleja:

- Ohjaa vakiolähtövirta
- vakiolähtövirran uudelleenohjaus liitetilassa
- Ohjaa vakiosyöttövirta
- vastaanottaa tietoja vakiosyötteestä, kunnes erotin havaitaan

Toisin kuin DOS, luotaessa ohjelmakanavaa kahden prosessin välille UNIX/Linux-käyttöjärjestelmä käynnistää molemmat prosessit samanaikaisesti ja siirtää tiedot järjestelmäpuskurin kautta (ilman välitallennusta kiintolevylle). Siten ohjelmistokanavat UNIX/Linux OS:ssä ovat erittäin tehokas tapa vaihtaa. Jos järjestelmäpuskuri vuotaa yli (esimerkiksi jos "lähettävä" ohjelma lähettää tiedot kanavalle nopeammin kuin "vastaanottava" ohjelma pystyy käsittelemään sen), käyttöjärjestelmä keskeyttää automaattisesti prosessin, joka kirjoittaa kanavalle, kunnes puskuri on vapautettu.

Yleisimmät uudelleenohjausoperaattorit

Nro Syntaksikuvaus
1 komentotiedosto Ohjaa vakiotulosteen uuteen tiedostoon

2 komento 1 tiedosto Ohjaa vakiotulosteen määritettyyn tiedostoon

3 tiedostokomento Ohjaa vakiotulosteen määritettyyn tiedostoon (lisäystila)

4 komentotiedosto 2&1 Ohjaa vakiotulosteen ja virheet määritettyyn tiedostoon

5 komento 2 tiedosto Ohjaa vakiovirheen määritettyyn tiedostoon

6 komento 2 tiedosto Ohjaa vakiovirheen määritettyyn tiedostoon (liittämistila)

7 komentotiedosto 2&1 Ohjaa vakiolähdön ja virheen määritettyyn tiedostoon (liittämistila)

8 komento tiedosto1 tiedosto2 Vastaanottaa syötteen ensimmäisestä tiedostosta ja lähettää tulosteen toiseen tiedostoon

9 komentotiedosto vakiosyötteenä vastaanottaa tiedot määritetystä tiedostosta

10 erotinkomento Vastaanottaa tiedot vakiosyötteestä, kunnes erotin havaitaan

11 komento &m Vastaanottaa tiedot tiedostosta, jonka vakiosyötteenä on kuvaaja m

12 komento &m Ohjaa vakiotulosteen tiedostokuvaajaan m

n&m-operaattori sallii tiedoston, jonka kuvaaja on n, uudelleenohjauksen samaan paikkaan kuin tiedosto, jonka kuvaaja on m. Komentorivillä voi olla useita samanlaisia ​​operaattoreita, jolloin ne lasketaan vasemmalta oikealle.

exec-komento ja tiedostokuvaajat

Exec-komento korvaa nykyisen komentotulkin määritetyllä komennolla. Tyypillisesti sitä käytetään sulkemaan nykyinen tulkki ja käynnistämään toinen. Mutta sillä on myös muita käyttötarkoituksia.

Esimerkiksi komento kuten

Exec-tiedosto tekee määritetystä tiedostosta kaikkien komentojen vakiosyötteen. Suorita se sisään
interaktiivisessa tilassa ei ole järkeä - se on tarkoitettu käytettäväksi skripteissä,
niin, että kaikki sen jälkeen tulevat komennot lukevat syötetietonsa tiedostosta. Tässä tapauksessa
komentosarjan lopussa täytyy olla komento

Exec & – joka sulkee vakiosyöttövirran (tässä tapauksessa tiedoston). Samanlaista tekniikkaa käytetään
pääasiassa komentosarjoissa, jotka suoritetaan, kun kirjaudut ulos.

Exec-komento on osoitin tiedostoon, jonka kuvaaja on 0 (stdin). Tämä osoitin voidaan palauttaa vasta, kun komentosarja on suoritettu.
Jos komentosarja aikoo jatkaa tietojen lukemista näppäimistöltä, sinun on tallennettava
osoitin edelliseen tulovirtaan. Alla on lyhyt skripti, joka näyttää kuinka tämä tehdään.

$ cat f_desc
#!/bin/bash
exec 3&0 0 -tiedosto
lue linel
lue rivi 2
suoritus 0&3
echo $1inel
echo $line2

Ensimmäinen exec-komento tallentaa osoittimen vakiosyöttövirtaan (stdin) tiedostokuvaajaan 3
(mikä tahansa kokonaisluku väliltä 3 ja 9 on sallittu) ja avaa sitten tiedoston lukemista varten. Kaksi seuraavaa lukukomentoa
lukea kaksi riviä tekstiä tiedostosta. Toinen exec-komento palauttaa osoittimen vakiosyötteeseen: now
se liittyy stdin-tiedostoon, ei tiedostoon. Viimeiset kaikukomennot näyttävät lukurivien sisällön näytöllä,
jotka tallennettiin linel- ja Iine2-muuttujiin.

Käsikirjoituksen tulos:
$./f_desc
Hei!
Heippa!