Bemeneti kimenet átirányítása Linux/Unix rendszerben Példák

⚡ Okos összefoglaló

Az átirányítás Linuxban és Unixban megváltoztatja, hogy egy parancs hol olvassa a bemenetet vagy küldi a kimenetet, swapping a billentyűzet és a képernyő fájlokhoz vagy eszközökhöz olyan operátorok használatával, mint a nagyobb-mint jel, a kisebb-mint jel és a hozzáfűző operátor.

  • 🔀 Átirányítás: Az átirányítás a parancs billentyűzetről és képernyőről érkező szabványos bemenetét vagy kimenetét fájlba vagy eszközre módosítja.
  • ➡️ output: A > operátor kimenetet ír egy fájlba, míg a >> hozzáfűz egy meglévő fájlhoz anélkül, hogy törölné azt.
  • ⬅️ Bemenet: A < operátor a fájlt a parancsba szabványos bemenetként adja be a billentyűzet helyett.
  • 🔢 Fájlleírók: Minden megnyitott fájl kap egy számot: 0 a stdin, 1 a stdout és 2 a stderr esetén.
  • ⚠️ Hiba átirányításkor: A 2> használata esetén a hibaüzenetek külön fájlba kerülnek, így nem zavarják a normál kimenetet.
  • 🔗 Kombinált adatfolyamok: A 2>&1 szintaxis a standard hibát ugyanarra a célállomásra irányítja, mint a standard kimenetet.
  • 🤖 MI segítség: A mesterséges intelligencia asszisztensek és a GitHub Copilot átirányítási parancsokat és shell szkripteket hozhatnak létre és magyarázhatnak el.

Bemeneti és kimeneti átirányítás Linuxban és Unixban példákkal

Az átirányítás az egyik leghasznosabb funkciója a Linux és Unix shell, mivel lehetővé teszi annak eldöntését, hogy egy parancs hová olvassa a bemenetét és hová küldi a kimenetét. Ez az oldal a kimenetet, a bemenetet és a hiba átirányítását ismerteti példákkal.

Mi az átirányítás?

Az átirányítás egy olyan Linux funkció, amely lehetővé teszi, hogy egy parancs végrehajtásakor megváltoztassuk a szabványos bemeneti és kimeneti eszközöket. Bármely parancs alapvető munkafolyamata Linux parancs az, hogy bemenetet fogad és kimenetet ad.

  • A szabványos beviteli (stdin) eszköz a billentyűzet.
  • A szabványos kimeneti (stdout) eszköz a képernyő.

Átirányítással a fenti standard bemenet és kimenet megváltoztatható.

Kimenet átirányítása

Az alábbi ábra a kimeneti átirányítási példák kezdetét jelöli.

Kimeneti átirányítási szakasz címsor grafikája

A '>' szimbólum a kimenet (STDOUT) átirányítására szolgál.

Példa:

ls -al > listings

Itt az ls -al parancs kimenete a képernyő helyett a „listings” fájlba kerül átirányításra. Az alábbi képernyőkép mutatja az eredményt.

A terminál az ls -al listázást mutatja, amely átirányításra került a listázófájlba

Megjegyzés: A parancs kimenetének fájlba átirányításakor használja a helyes fájlnevet. Ha már létezik egy azonos nevű fájl, az átirányított parancs törli a tartalmát, majd felülírja azt.

Ha nem szeretné, hogy egy fájl felülíródjon, de további tartalmat szeretne hozzáadni egy meglévő fájlhoz, akkor használja a '>>' operátort. Az alábbi képernyőképen a '>>' jellel kiegészített tartalom látható.

Terminál, amely egy meglévő fájlhoz hozzáfűzött parancskimenetet mutat a dupla „nagyobb, mint” operátorral.

A szabványos kimenetet nemcsak fájlokba, hanem eszközökre is átirányíthatod.

$ cat music.mp3 > /dev/audio

A cat parancs beolvassa a zenefájlt.mp3 és a kimenetet a /dev/audio könyvtárba küldi, ami az audioeszköz. Ha a számítógép hangbeállításai megfelelőek, ez a parancs lejátssza a fájl zenéjét.mp3.

Bemeneti átirányítás

Az alábbi ábra bemutatja a bemenet átirányítását.

Beviteli átirányítás szakasz címsor grafikája

A '<' szimbólum a bemenet (STDIN) átirányítására szolgál.

Példa: A Linux levelezőprogramja segíthet e-mailek küldésében a terminálból.

Az e-mail tartalmát beírhatja a billentyűzettel, amely a szabványos beviteli eszköz. De ha fájlt szeretne csatolni az e-mailhez, használhatja a beviteli átirányítási operátort a következő formátumban.

mail -s "Subject" to-address < Filename

Az alábbi képernyőképen a mail parancs egy fájlt olvas be bemenetként.

mail parancs bemenet átirányításával fájl csatolásához e-mailhez

Ez csatolja a fájlt az e-mailhez, és elküldi a címzettnek.

A fenti példák egyszerűek voltak. Most nézzünk meg néhány fejlett átirányítási technikát, amelyek fájlleírókat használnak.

filé Descriptors (FD)

Linuxban és Unixban minden fájl. A hagyományos fájlok, könyvtárak és még az eszközök is fájlok. Minden fájlhoz tartozik egy szám, amelyet fájlleírónak (FD) neveznek.

Az alábbi ábra a szabványos adatfolyamokat és azok fájlleíróit mutatja.

A szabványos bemeneti, kimeneti és hibafolyamok, valamint azok fájlleíróinak diagramja

A képernyőnknek is van egy fájlleírója. Amikor egy program végrehajtódik, a kimenet a képernyő fájlleírójába kerül, és a program kimenetét látod a monitorodon. Ha a kimenetet a nyomtató fájlleírójába küldenénk, a program kimenete nyomtatódna ki.

Hiba az átirányításban

Amikor egy programot vagy parancsot futtatunk a terminálon, három fájl mindig nyitva van: a standard bemenet, a standard kimenet és a standard hiba.

Ezek a fájlok mindig jelen vannak, amikor egy program fut. Ahogy korábban említettük, mindegyik fájlhoz tartozik egy fájlleíró.

filé filé Descriptor
Standard bemenet STDIN 0
Standard kimenet STDOUT 1
Standard hiba STDERR 2

Alapértelmezés szerint a hibafolyam megjelenik a képernyőn. A hibaátirányítás a hibákat egy másik fájlba irányítja, mint a képernyő.

Miért az átirányítási hiba?

A hibaátirányítás a Unix és a Linux egyik nagyon népszerű funkciója.

A gyakori Unix-felhasználók tudják, hogy sok parancs rengeteg hibát okoz. Például fájlok keresésekor az ember jellemzően a következőt kapja: engedély megtagadott hibák, amelyek általában nem segítenek az adott fájlt kereső személynek. A shell szkriptek futtatása közben gyakran nem szeretnénk, hogy a hibaüzenetek eltorzítsák a normál programkimenetet.

A megoldás az, hogy a hibaüzeneteket átirányítjuk egy fájlba.

Példa 1

$ myprogram 2>errorsfile

Az alábbi képernyőkép ezt a parancsot mutatja a terminálban.

A myprogram futtató terminál standard hibával átirányítva az errorsfile fájlra

Fent egy myprogram nevű programot futtatunk. A standard hiba fájlleírója 2. A „2>” használatával a hiba kimenetét átirányítjuk egy „errorsfile” nevű fájlba. Így a program kimenete nem lesz hibákkal zsúfolt.

Példa 2

Íme egy másik példa, amely a find utasítást használja.

find . -name 'my*' 2>error.log

A find parancs használatával az aktuális „.” könyvtárban keresünk egy „my” betűvel kezdődő nevű fájlt, és a hibákat az error.log fájlba küldjük.

Példa 3: Nézzünk egy összetettebb példát.

A szerveradminisztrátorok gyakran listázzák a könyvtárakat, és a hiba- és a szabványos kimenetet egy fájlban tárolják, amelyet később feldolgozhatnak. Íme a parancs.

ls Documents ABC> dirlist 2>&1

Az alábbi ábra azt mutatja, hogy mindkét adatfolyamot egyetlen fájlban rögzítik.

A szabványos kimenet és a szabványos hiba diagramja, mindkettő átirányítva a fájlkönyvtár-listára

Itt:

  • A 2>&1 azt jelenti, hogy az STDERR ugyanarra a célra van átirányítva, mint az STDOUT (ami a fájl könyvtárlista).
  • A hibaüzenetet a rendszer a standard kimenetre irányítja, amely viszont a „dirlist” fájlba kerül. Így mindkét adatfolyam a „dirlist” fájlba íródik.

Az alábbi ábra összefoglalja, hogyan illeszkedik egymáshoz a bemenet, a kimenet és a hibaátirányítás.

A bemenet, a kimenet és a hibaátirányítás összefoglaló diagramja Linux és Unix rendszereken

GYIK

A cső A (|) egy parancs kimenetét közvetlenül egy másik parancs bemenetévé teszi. Az átirányítás ehelyett egy parancsot egy fájlhoz vagy eszközhöz kapcsol, kimenetet ír oda, vagy bemenetet olvas onnan. Parancsokat csatol (pipe-on), míg az átirányítás egy parancsot egy fájllal kapcsol össze.

A > operátor a parancs kimenetét egy fájlba írja, lecserélve a meglévő tartalmat. A >> operátor ehelyett a kimenetet a fájl végéhez fűzi hozzá, ígyping ami már ott van. Használd a >> parancsot, ha egy fájlhoz hozzá szeretnél adni a felülírás helyett.

A /dev/null egy speciális fájl, amely mindent eldob, amit ráírtak. A 2>/dev/null hozzáadása egy parancshoz átirányítja a hibaüzeneteket erre a fájlra, csendben törli azokat, így csak a normál kimenet jelenik meg a képernyőn. Ez egy gyakori módja a nem kívánt hibaüzenetek elrejtésének.

A tee parancs a szabványos bemenetről olvas be, és egyszerre írja ki az adatokat a képernyőre és egy vagy több fájlba is, például ls -al | tee listing.txt. Lehetővé teszi a parancs kimenetének fájlba mentését, miközben továbbra is látható a képernyőn.

Egy here dokumentum a << operátort használja több sornyi beágyazott szöveg bemenetére egy parancsban, amely egy kiválasztott jelölőszóval végződik. Ez hasznos shell szkriptekben többsoros bemenet, például egy e-mail törzsének külön fájl nélküli átadásához.

A kimenet átirányítása után a 2>&1 szintaxist kell használni, például a command > file 2>&1 parancsban, így a standard hiba a standard kimenetet követi a fájlban. A modern Bash-ben a command &> file rövidített változat ugyanezt teszi. A sorrend számít: a 2>&1 a kimenet átirányítása után kerüljön.

A mesterséges intelligencia asszisztensei képesek egy egyszerű angol kérést a megfelelő átirányítási parancssá alakítani, elmagyarázni az olyan operátorok működését, mint a 2>&1 vagy a &>, és megjelölni a hibákat, mielőtt futtatnád őket. A gépi tanulási eszközök az átirányított napló- és hibafájlokat is átvizsgálják, hogy olyan anomáliákat jelenítsenek meg, amelyeket a manuális ellenőrzés nem észlelne.

Igen. GitHub másodpilóta parancsokat és szkripteket generálhat, amelyek átirányítják a bemenetet, a kimenetet és a hibákat egy rövid, a célt leíró megjegyzésből, és gépelés közben kiegészítik azokat. RevTekintse meg a fájljaira vonatkozó javasolt parancsokat, különösen azokat, amelyek > jelet használnak, és felülírják a meglévő adatokat.

Foglald össze ezt a bejegyzést a következőképpen: