Átirányítás – alapok

Az adatok egyszerű írása szöveges fájlokba Linux alatt – átirányítás. Azaz ismerjük meg az adatok, parancsok átirányítás lehetőségeit. Bár maga a teendő egyszerű, és már használtuk is valamiféle megoldással, de érdemes alapszinten begyakorolni. Egy grafikus asztali környezetben nem lesz sokszor rá szükséged, de adatok, parancsok kimenetét terminálban sokszor használhatjuk. Mire is gondolunk ilyenkor? Az árirányítást most úgy értjük, hogy egy parancs, amit a terminálba írunk, az legyen szíves azt, amit a terminálba írna egy megadott szöveges fájlba (is) beleírni.

Miért irányítjuk át a parancsot?

Mármint a parancs kimenetét egy szöveges fájlba? Az első, és talán legfontosabb, ha a parancs kimenete fontos információt tartalmaz és a célunk ennek a megszerzése. A másik téma lehet a parancs eredményének az elemzése, pld. egy fájl. program mikor, milyen tevékenységet végzett el. Bár ezt a terminálban is követhetjük, de kissé nehézkes lenne a strace kdenlive kimenetét élőben követni. A strace mindent és azontúl is kiír az adott program futása alatt. Próbáld ki 🙂 Ok, pipe-vel is lehetne szűrni, de azt utólag nem tudjuk elemezni, csak élő futás alatt. Hasonló eset, ha egy program kimenetét továbbiakban fel kell dolgozni. Akkor sok esetben érdemes fájlba menteni, majd azt beolvasni a másik programba.
Itt térek ki a harmadikra is, ami nagyon fontos: a hibajelek mentése. Ha egy program nem azt teszi, amit kell, akkor sokkal kényelmesebb a hibakimenetet lementeni, majd nyugodt körülmények közt elemezni. Nem a terminálban lapozni el és vissza, hanem egy ismert szövegszerkesztői környezetben dolgozni. Ez ismert téma, hiszen a logok, naplók is ezen az elven működnek: a naplózó programok beleírnak egy fájlba, amit hol egyszerűbben, hogy speciális programmal, de olvasni tudunk.

Mit irányíthatunk át?

stdin (STandarD INput)
stdout (STandarD OUTput)
stderr (STandarD ERRor)

A megnevezések egyértelműek. Az első a stdin. Ez az adatfolyam az információk beviteléhez. Bármilyen eszközről, például billentyűzetről vagy egérről érkező bemenet a szokásos bemeneti adatfolyam alá tartozik. Az stdin értékét 0 adatfolyam azonosító jelöli.

A második a stdout. Ez az adatkimenet adatfolyama. Kimenete a szokásos kimeneti adatfolyam alá kerül, jellemzően a pancssorba beírt CLI programok a terminálba írnak, amit mi át akarunk irányítani majd. Az stdout-ot 1 adatfolyam azonosítója jelöli. Ez az, amit a legtöbbször használunk, azaz a parancs legyen szíves az összes kimenetét, kiírandó dolgait egy fájlba írni.

A standard hiba, a stderr, a parancsok által okozott hibák kezelésére szolgál. Figyelmeztet arra, hogy valami nem megfelelő, nem jó, vagy hibás. A stderr-t 2 Stream ID jelöli. Hibakeresésnél, hibák logolásánál nagyon hasznos tud lenni!
Ezeket a 0,1,2 számokat érdemes megjegyezni, ismerni.

Hogyan írhatunk egy fájlba?

Az átirányítási operátorokkal irányítjuk az adatokat a stdout és stderr adatfolyamokból át egy szöveges fájlba. Az átirányítás egy standard Linux szolgáltatás, amelyet a bemeneti / kimeneti eszközök megváltoztatására használnak egy parancs végrehajtása közben. Azaz nem kell ehhez semmit telepíteni, tudja a rendszered!

Az adatok írásához szöveges fájlba az > és >> átirányítás operátorokkal történik. Itt nagyon kell figyelni mert a kettő nem egyező műveletet végez el. Nagy a hiba lehetősége!

> Felülírja az adatokat egy szöveges fájlban.

>> Adatokat fűz egy szövegfájlhoz.

Azaz ha valamit egy fájlba akarsz írni, akkor ez a legegyszerűbb, alap megoldás:

date > test1.txt

Tedd meg, és nézz bele a fájlba. Ott lesz a date parancs kimenete.

Majd a who > test1.txt kiadása után is nézz bele. Már látni fogod, hogy a date adatai eltűntek, és a who adatai pedig belekerültek. Így minden esetben nagyon gondold át, hogy mit és hova irányítasz!

Ha arra van szükséged, hogy ne felülírj az új adattal, szöveggel, akkor a

date >> test1.txt

megoldást használd, és az eddig tartalom mögé szépen be is írja az újat. Tesztnek a who >> test1.txt kiadása után is nézz bele!

Csak a hibákra vagyunk kíváncsiak, a többire nem, akkor a who 2>> test1.txt megoldást használjuk. Azaz a fenti három, számokkal jelzett lehetőség közül a stderr-t küldjük a fájlba. A kettes és a kacsacsőr közt nincs space!

Alapvetően egyszerű a dolog, de nem árt begyakorolni. Ami nem egy túl megterhelő feladat, ha a fenti példákat már végignézted, és ki is próbáltad, akkor már az alapokat ismered, és használni is tudod majd!

Fórumokon, discordon sokszor kérik, hogy egy parancs kimenetét tedd fel a pastebin-re, vagy másold be. Már ezt meg is tudod tenni!

Így első látásra nem túl izgalmas a dolog, de amikor kap az ember egy programnál kilométer betűdömpinget a terminálba, és abban akar keresni valamit… Na azután jön elő a adatátirányítás szöveges fájlba és az adatok szűrésének a témája. A másik hasznos felhasználása a szkriptekben van, ahol egy-egy hibaüzenetet egy logfájlba küldhetünk, és ellenőrizhetjük a működését a szriptnek.

Related Posts