Input Output Redirection i Linux/Unix-exempel

Vad är omdirigering?

Omdirigering är en funktion i Linux så att när du kör ett kommando kan du ändra standardinmatnings-/utgångsenheterna. Det grundläggande arbetsflödet för någon Linux kommando är att det tar en input och ger en output.

  • Standardingångsenheten (stdin) är tangentbordet.
  • Standardutgångsenheten (stdout) är skärmen.

Med omdirigering kan ovanstående standardinmatning/utgång ändras.

Klicka här. om videon inte är tillgänglig

Omdirigering av utdata

Din '>'-symbolen används för omdirigering av utdata (STDOUT).

Omdirigering av utdata

Exempelvis:

ls -al > listings

Här omdirigeras utgången av kommandot ls -al till filen "listings" istället för din skärm.

Omdirigering av utdata

Anmärkningar: Använd rätt filnamn när du omdirigerar kommandoutdata till en fil. Om det finns en befintlig fil med samma namn, kommer det omdirigerade kommandot att ta bort innehållet i den filen och sedan kan den skrivas över."

Om du inte vill att en fil ska skrivas över men vill lägga till mer innehåll i en befintlig fil, bör du använda '>>' operatör.

Omdirigering av utdata

Du kan omdirigera standardutdata, till inte bara filer utan även enheter!

$ cat music.mp3 > /dev/audio

Kattkommandot läser filen music.mp3 och skickar utdata till /dev/audio som är ljudenheten. Om ljudkonfigurationerna i din PC är korrekta kommer detta kommando att spela upp filen music.mp3

Ingångsomdirigering

Din ''-symbolen används för omdirigering av input (STDIN).

Ingångsomdirigering

Exempelvis: E-postprogrammet i Linux kan hjälpa dig att skicka e-post från terminalen.

Du kan skriva innehållet i e-postmeddelandet med enhetens standardtangentbord. Men om du vill bifoga en fil till e-post kan du använda indataomdirigeringsoperatorn i följande format.

Mail -s "Subject" to-address < Filename

Ingångsomdirigering

Detta skulle bifoga filen med e-postmeddelandet och den skulle skickas till mottagaren.

Exemplen ovan var enkla. Låt oss titta på några avancerade omdirigeringstekniker som använder File Descriptorer.

Fil Descriptors (FD)

I Linux/Unix är allt en fil. Vanliga filer, kataloger och till och med enheter är filer. Varje fil har ett tillhörande nummer som heter File Descripteller (FD).

Din skärm har också en fil Descripteller. När ett program körs skickas utdata till fil Descripteller på skärmen, och du ser programutmatning på din bildskärm. Om utdata skickas till fil Descripteller av skrivaren, skulle programmets utdata ha skrivits ut.

Fel omdirigering

När du kör ett program/kommando vid terminalen är alltid 3 filer öppna, nämligen standardinmatning, standardutgång, standardfel.

Fel omdirigering

Dessa filer finns alltid när ett program körs. Som förklarats tidigare är en filbeskrivning associerad med var och en av dessa filer.

Fil Fil Descriptor
Standardingång STDIN 0
Standardutgång STDOUT 1
Standardfel STDERR 2

Som standard visas felström på skärmen. Felomdirigering dirigerar felen till en annan fil än skärmen.

Varför felomdirigering?

Omdirigering av fel är en av de mycket populära funktionerna i Unix / Linux.

Frekventa UNIX-användare kommer att tro att många kommandon ger dig enorma mängder fel.

  • Till exempel, när man söker efter filer, får man vanligtvis fel med tillstånd nekad. Dessa fel hjälper vanligtvis inte personen som söker efter en viss fil.
  • När du kör skalskript vill du ofta INTE att felmeddelanden ska störa den normala programutgången.

Lösningen är att omdirigera felmeddelandena till en fil.

Exempelvis 1

$ myprogram 2>errorsfile

Varför felomdirigering

Ovan kör vi ett program som heter mittprogram.

Filbeskrivningen för standardfel är 2.

Med hjälp av "2>" omdirigerar vi felutgången till en fil med namnet "errorfile"

Programutgången är alltså inte belamrad med fel.

Exempelvis 2

Här är ett annat exempel som använder find-satsen -

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

Med hjälp av "hitta"-kommandot söker vi efter "." aktuell katalog för en fil med "namn" som börjar med "min"

Varför felomdirigering

Exempel 3: Låt oss se ett mer komplext exempel,

Serveradministratörer listar ofta kataloger och lagrar både fel och standardutdata i en fil, som kan bearbetas senare. Här är kommandot.

ls Documents ABC> dirlist 2>&1

Här,

  • som skriver utdata från en fil till indata från en annan fil. 2>&1 betyder att STDERR omdirigerar till målet för STDOUT (som är filkatalogen)
  • Vi omdirigerar felutdata till standardutdata som i sin tur omdirigeras till filkatalogen. Därför skrivs både utdata till filen dirlist

Varför felomdirigering

Sammanfattning

  • Varje fil i Linux har en motsvarande fil Descripteller förknippas med det
  • Tangentbordet är standardinmatningsenheten medan din skärm är standardutgångsenheten
  • ">" är utgångsomdirigeringsoperatören. ">>" lägger till utdata till en befintlig fil
  • "<" är indataomdirigeringsoperatorn
  • ">&" omdirigerar utdata från en fil till en annan.
  • Du kan omdirigera fel med motsvarande fil Descripteller 2.