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)