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: Omdirigering รคndrar ett kommandos standardinmatning eller -utmatning frรฅn tangentbordet och skรคrmen till en fil eller enhet.
  • โžก๏ธ Produktion: Operatorn > skriver utdata till en fil, medan >> lรคgger till i en befintlig fil utan att radera den.
  • โฌ…๏ธ Ingรฅng: Operatorn < matar in en fil i ett kommando som standardinmatning istรคllet fรถr tangentbordet.
  • ๐Ÿ”ข Filbeskrivningar: Varje รถppen fil fรฅr ett nummer: 0 fรถr stdin, 1 fรถr stdout och 2 fรถr stderr.
  • โš ๏ธ Felomdirigering: Om du anvรคnder 2> skickas felmeddelanden till en separat fil sรฅ att de inte stรถr den normala utdata.
  • ๐Ÿ”— Kombinerade strรถmmar: Syntaxen 2>&1 dirigerar standardfelet till samma mรฅl som standardutdata.
  • ๐Ÿค– AI-hjรคlp: AI-assistenter och GitHub Copilot kan bygga och fรถrklara omdirigeringskommandon och skalskript.

Omdirigering av in- och utdata i Linux och Unix med exempel

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.

Grafik fรถr rubrik fรถr 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.

Terminal som visar ls -al-listan omdirigerad till listningsfilen

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 '>>'.

Terminal som visar kommandoutdata tillagd till en befintlig fil med den dubbla stรถrre-รคn-operatorn

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.

Grafik fรถr rubrik fรถr omdirigering av inmatning

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.

mail-kommando med omdirigering av indata fรถr att bifoga en fil till ett e-postmeddelande

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.

Diagram รถver standardingรฅngs-, utgรฅngs- och felstrรถmmar 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.

Terminal som kรถr mittprogram med standardfel omdirigerad till errorsfile-filen

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.

Diagram รถver standardutdata och standardfel, bรฅda omdirigerade till filen dirlist

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.

Diagram som sammanfattar inmatning, utmatning och felomdirigering i Linux och Unix

Vanliga frรฅgor

A Rรถret (|) skickar utdata frรฅn ett kommando direkt till ett annat kommando som indata. Omdirigering kopplar istรคllet ett kommando till en fil eller enhet, skriver utdata till den eller lรคser indata frรฅn den. Pipes joinar kommandon; omdirigering kopplar ett kommando till en fil.

Operatorn > skriver ett kommandos utdata till en fil och ersรคtter befintligt innehรฅll. Operatorn >> lรคgger istรคllet till utdata i slutet av filen, keeping det som redan finns dรคr. Anvรคnd >> nรคr du vill lรคgga till i en fil istรคllet fรถr att skriva รถver den.

/dev/null รคr en speciell fil som kasserar allt som skrivits till den. Om du lรคgger till 2>/dev/null till ett kommando omdirigeras dess felmeddelanden till den filen och kasseras tyst sรฅ att endast normal utdata visas pรฅ skรคrmen. Det รคr ett vanligt sรคtt att dรถlja oรถnskat felmeddelanden.

Kommandot tee lรคser frรฅn standardindata och skriver data till bรฅde skรคrmen och en eller flera filer samtidigt, till exempel ls -al | tee listing.txt. Det lรฅter dig spara ett kommandos utdata till en fil medan du fortfarande visar det pรฅ skรคrmen.

Ett here-dokument anvรคnder operatorn << fรถr att mata in flera rader inbรคddad text i ett kommando som indata, och slutar med ett markeringsord du vรคljer. Det รคr praktiskt i shellskript fรถr att skicka inmatning med flera rader, till exempel en e-postmeddelandetext, utan en separat fil.

Anvรคnd syntaxen 2>&1 efter omdirigering av utdata, som i command > file 2>&1, sรฅ att standardfelet fรถljer standardutdata in i filen. I moderna Bash gรถr fรถrkortningen command &> file samma sak. Ordningen spelar roll: placera 2>&1 efter omdirigeringen av utdata.

AI-assistenter kan omvandla en begรคran pรฅ vanlig engelska till rรคtt omdirigeringskommando, fรถrklara vad operatorer som 2>&1 eller &> gรถr och flagga misstag innan du kรถr dem. Maskininlรคrningsverktyg skannar ocksรฅ omdirigerade logg- och felfiler fรถr att upptรคcka avvikelser som manuell granskning skulle missa.

Ja. GitHub Copilot kan generera kommandon och skript som omdirigerar inmatning, utmatning och fel frรฅn en kort kommentar som beskriver mรฅlet, och slutfรถra dem medan du skriver. Revvisa alla fรถreslagna kommandon mot dina filer, sรคrskilt de som anvรคnder > och som skriver รถver befintlig data.

Sammanfatta detta inlรคgg med: