Input Output Redirection i Linux/Unix-exempel
⚡ Smart sammanfattning
Omdirigering i Linux och Unix ändras där ett kommando läser indata eller skickar utdata, swapping tangentbordet och skärmen för filer eller enheter med hjälp av operatorer som större än-tecknet, mindre än-tecknet och tilläggsoperatorn.

Omdirigering är en av de mest användbara funktionerna i Linux och Unix-shell, eftersom det låter dig bestämma vart ett kommando läser sin indata och skickar sin utdata. Den här sidan förklarar utdata, indata och felomdirigering med fungerande exempel.
Vad är omdirigering?
Omdirigering är en funktion i Linux som gör att man kan ändra standardinmatnings- och utmatningsenheter när man kör ett kommando. Det grundläggande arbetsflödet för alla Linux kommando är att den tar en ingång och ger en utgång.
- Standardingångsenheten (stdin) är tangentbordet.
- Standardutgångsenheten (stdout) är skärmen.
Med omdirigering kan standardindata och -utdata ovan ändras.
Omdirigering av utdata
Grafiken nedan markerar början på exemplen på omdirigering av utdata.
Symbolen '>' används för omdirigering av utdata (STDOUT).
Exempel:
ls -al > listings
Här omdirigeras utdata från kommandot ls -al till filen "listings" istället för din skärm. Skärmdumpen nedan visar resultatet.
Obs: Använd rätt filnamn när du omdirigerar kommandoutdata till en fil. Om en fil med samma namn redan finns, tar det omdirigerade kommandot bort dess innehåll och skriver sedan över det.
Om du inte vill att en fil ska skrivas över men vill lägga till mer innehåll i en befintlig fil, använd operatorn '>>'. Skärmdumpen nedan visar innehåll tillagt med '>>'.
Du kan omdirigera standardutdata inte bara till filer, utan även till enheter.
$ cat music.mp3 > /dev/audio
Kommandot cat läser filen music.mp3 och skickar utdata till /dev/audio, vilket är ljudenheten. Om ljudkonfigurationen på din dator är korrekt spelar det här kommandot upp filen music.mp3.
Ingångsomdirigering
Grafiken nedan introducerar omdirigering av indata.
Symbolen '<' används för omdirigering av indata (STDIN).
Exempel: E-postprogrammet i Linux kan hjälpa dig att skicka e-postmeddelanden från terminalen.
Du kan skriva innehållet i e-postmeddelandet med hjälp av tangentbordet, standardinmatningsenheten. Men om du vill bifoga en fil till e-postmeddelandet kan du använda omdirigeringsoperatorn för inmatning i följande format.
mail -s "Subject" to-address < Filename
Skärmdumpen nedan visar mail-kommandot som läser en fil som indata.
Detta bifogar filen till e-postmeddelandet och den skickas till mottagaren.
Exemplen ovan var enkla. Titta nu på några avancerade omdirigeringstekniker som använder filbeskrivningar.
Fil Descriptors (FD)
I Linux och Unix är allting en fil. Vanliga filer, kataloger och även enheter är filer. Varje fil har ett associerat nummer som kallas en fildeskriptor (FD).
Diagrammet nedan visar standardströmmarna och deras filbeskrivningar.
Din skärm har också en fildeskriptor. När ett program körs skickas utdata till skärmens fildeskriptor, och du ser programutdata på din bildskärm. Om utdata skickades till skrivarens fildeskriptor skulle programutdata skrivas ut.
Fel omdirigering
När du kör ett program eller kommando i terminalen är tre filer alltid öppna, nämligen standardindata, standardutdata och standardfel.
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ömmen på skärmen. Omdirigering av fel dirigerar felen till en annan fil än skärmen.
Varför felomdirigering?
Felomdirigering är en av de mycket populära funktionerna i Unix och Linux.
De som använder Unix regelbundet vet att många kommandon ger enorma mängder fel. Till exempel, när man söker efter filer får man vanligtvis tillstånd nekade fel, vilket vanligtvis inte hjälper personen som söker efter en viss fil. När man kör shell-skript vill man ofta inte att felmeddelanden ska störa den normala programutdatan.
Lösningen är att omdirigera felmeddelandena till en fil.
Exempelvis 1
$ myprogram 2>errorsfile
Skärmdumpen nedan visar detta kommando i terminalen.
Ovan kör vi ett program som heter mittprogram. Filbeskrivningen för standardfel är 2. Med hjälp av "2>" omdirigerar vi felutdata till en fil med namnet "felfil". Således är programutdata 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 kommandot find söker vi i den aktuella katalogen ”.” efter en fil vars namn börjar med ”my” och skickar eventuella fel till error.log.
Exempel 3: Låt oss titta på 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
Diagrammet nedan visar båda strömmarna som samlas in i en fil.
Här:
- 2>&1 betyder att STDERR omdirigeras till samma mål som STDOUT (vilket är filens dirlist).
- Felutdata omdirigeras till standardutdata, som i sin tur omdirigeras till filen dirlist. Därför skrivs båda strömmarna till filen dirlist.
Diagrammet nedan sammanfattar hur indata, utdata och felomdirigering hänger ihop.






.png)