Amikor bármely parancs kimenetét átirányítja egy fájlba, észre fogja venni, hogy a hibaüzenetek a terminál ablakába kerülnek nyomtatásra. Bármely parancs, amelyet bármely Linux shellben végrehajtanak, például a bash, három rendes I/O adatfolyamot használ. Az egyes folyamok ábrázolásához numerikus fájlleírót használnak.
- A standard bemeneti adatfolyam (stdin): 0
- A standard kimeneti adatfolyam (stdout): 1
- A standard hibafolyam (stderr): 2
Ebben a bejegyzésben meg fogjuk érteni azokat az információkat, amelyek az stdout és a stderr fájlba való átirányítása alá tartoznak.
Standard kimenet (stdout):
Minden Linux alapú operációs rendszer meggyőződése, hogy a végrehajtott parancs alapértelmezett helye. Ezt a fogalmat mindenki stdout vagy standard kimenetként emlegeti, hogy könnyebb legyen a hangzás. A Bash vagy a Zsh shell folyamatosan keresi az alapértelmezett kimeneti helyet. Amikor a shell új kimenetet észlel, megjeleníti azt a terminál képernyőjén, hogy láthassa. Ellenkező esetben a kimenetet az alapértelmezett helyre küldi.
Standard hiba (stderr):
A standard hiba vagy stderr hasonló a standard bemenethez és kimenethez, de a hibaüzenetek tárolására szolgál. A standard hiba átirányítható a parancssorba vagy egy fájlba egy terminál használatával. Ha üzeneteket szeretne rögzíteni vagy tárolni külön naplófájlban, vagy el szeretné rejteni a hibaüzeneteket, akkor a stderr átirányítása segít. Most menjünk az stdout és a stderr átirányítás gyakorlati oldala felé.
Az stdout és a stderr átirányítása egy fájlba:
Mivel az átirányítás egy módszer a program kimenetének rögzítésére és bemenetként történő elküldésére egy másik parancsra vagy fájlra. Az I/O adatfolyamok átirányíthatók az n> operátor használatba vételével, ahol n a fájlleíró száma. Az stdout átirányításához az 1> -t használjuk, az stderr esetén a 2> operátort adjuk hozzá.
Létrehoztunk egy sample.txt nevű fájlt az átirányított kimenet tárolására az aktuális könyvtárunkban.
A (parancs> fájl) a klasszikus átirányítási operátor, amely csak a szabványos kimenetet irányítja át a terminálon látható standard hibával. Bemutatunk különböző lehetőségeket az stderr átirányítására is.
Az stderr és az stdout átirányítása külön fájlokba:
Az alábbiakban a parancs szintaxisa található az stdout és a stderr fájlok átirányítására.
parancs >ki2>hibaAz alábbi parancs átirányítja a kimenetet a kimeneti fájlba, a hibaüzeneteket pedig a hiba fájlba.
$macskasample.txt>ki2>hiba
A stderr átirányítása az stdout -ba:
Gyakori gyakorlat, hogy az stderr -t egy program szabványos kimenetével átirányítják, hogy mindent egyetlen fájlban tárolja. Itt található a parancs szintaxisa az stderr stdout -ra való átirányításához:
parancs >ki2> &1$ls >samplefile.txt2> &1$macskasamplefile.txt
> out átirányítások átirányítják az stdout fájlt a samplefile.txt fájlra, a 2> & 1 pedig az stdr -t az stdout aktuális helyére.
Ha az stderr először az stdout-ra van átirányítva, akkor az alábbi paranccsal irányítsa át az stdout fájlt.
parancs 2> &1 > fájlt$ls -hoz 2> &1 >samplefile.txt$macskasamplefile.txt
A &> szintén ugyanazokra a funkciókra szolgál, amelyeket a 2> & 1 végez.
parancs &> fájlt$ls &>samplefile.txt$macskasamplefile.txt
Az stdout és a stderr átirányítása egyetlen fájlba:
Az összes shell nem támogatja ezt az űrlap átirányítást, de a bash és a Zsh támogatja. Az Stdout és a stderr átirányítható a következő szintaxis használatával.
parancs &>ki$macskasample.txt&>ki
A cikk közelgő részében megnézzük az stdout és a stderr átirányítás külön példáját.
Az stdout átirányítása egy fájlba:
A szabványos kimenetet az 1 jelzi a fájlleíró számok listájában. A fájlleíró szám nélküli átirányítási parancs esetén a terminál 1 -re állította az értékét. Az stdout fájlba való átirányításának szintaxisa a következő:
parancs > fájltA sample.file fájlt használjuk az ls -al parancs szabványos kimenetének tárolására
$ls -hoz >sample.txt$macskasample.txt
parancs 1> fájlt$ls 1>sample.txt
$macskasample.txt
Stderr átirányítása egy fájlba:
Használja a 2> operátort az stderr fájlba való átirányításához.
parancs 2> fájlt $ls -hoz 2>sample.txt
A stderr és az stdout végrehajtását egyetlen átirányítási parancsban kombinálhatjuk.
parancs 2>error.txt1>output.txtAz alábbi példában a hibaüzenetek a error.txt fájlban lesznek tárolva, ahol a output.txt szabványos kimenete az ls parancs lesz.
$ls 2>error.txt1>output.txt$macskaoutput.txt
Következtetés:
Az I/O adatfolyamok átirányításának és fájlleíróinak koncepciója nagyon értékes, ha Linux terminálon dolgozunk. Ebben a bejegyzésben a rendszeres I/O adatfolyamokról beszéltünk, beleértve a stdout és stderr -t. A bejegyzés első része részletes információkat tartalmaz az átirányításról, az I/O adatfolyamokról és a numerikus fájlleíróról. Ezután láthatta a gyakorlati példát az stdout és a stderr átirányítás különböző formáira.