Input Output Redirection i Linux/Unix-eksempler

โšก Smart oppsummering

Omdirigering i Linux og Unix endrer hvor en kommando leser input eller sender output, swapping tastaturet og skjermen for filer eller enheter som bruker operatorer som stรธrre enn-tegnet, mindre enn-tegnet og tilfรธyningsoperatoren.

  • ๐Ÿ”€ Omdirigering: Omdirigering endrer standardinndata eller -utdata for en kommando fra tastaturet og skjermen til en fil eller enhet.
  • โžก๏ธ Utgang: Operatoren > skriver utdata til en fil, mens >> legger til en eksisterende fil uten รฅ slette den.
  • ร‚ยฌ i ... Inngang: <-operatoren mater en fil inn i en kommando som standard input i stedet for tastaturet.
  • ๐Ÿ”ข Filbeskrivelser: Hver รฅpne fil fรฅr et tall: 0 for stdin, 1 for stdout og 2 for stderr.
  • โš ๏ธ Feilomdirigering: Hvis du bruker 2>, sendes feilmeldinger til en separat fil, slik at de ikke forstyrrer normal utdata.
  • ๐Ÿ”— Kombinerte strรธmmer: Syntaksen 2>&1 ruter standardfeil til samme mรฅl som standardutdata.
  • ๐Ÿค– AI-hjelp: AI-assistenter og GitHub Copilot kan bygge og forklare omdirigeringskommandoer og skallskript.

Omdirigering av input-output i Linux og Unix med eksempler

Omdirigering er en av de mest nyttige funksjonene i Linux og Unix-skallet, fordi det lar deg bestemme hvor en kommando leser input og sender output. Denne siden forklarer output, input og omdirigering av feil med eksempler.

Hva er omdirigering?

Omdirigering er en funksjon i Linux som gjรธr at du kan endre standard inn- og utgangsenheter nรฅr du kjรธrer en kommando. Den grunnleggende arbeidsflyten for enhver Linux kommando er at den tar imot en input og gir en output.

  • Standardinngangsenheten (stdin) er tastaturet.
  • Standard utgangsenhet (stdout) er skjermen.

Med omdirigering kan standard input og output ovenfor endres.

Omdirigering av utdata

Grafikken nedenfor markerer starten pรฅ eksemplene pรฅ omdirigering av utdata.

Grafikk for overskrift for omdirigering av utdata

Symbolet '>' brukes for omdirigering av utdata (STDOUT).

Eksempel:

ls -al > listings

Her blir resultatet av kommandoen ls -al omdirigert til filen ยซlistingsยป i stedet for skjermen din. Skjermbildet nedenfor viser resultatet.

Terminal som viser ls -al-oppfรธringen omdirigert til oppfรธringsfilen

Merk: Bruk riktig filnavn nรฅr du omdirigerer kommandoutdata til en fil. Hvis en fil med samme navn allerede finnes, sletter den omdirigerte kommandoen innholdet og overskriver det.

Hvis du ikke vil at en fil skal overskrives, men vil legge til mer innhold i en eksisterende fil, bruker du operatoren '>>'. Skjermbildet nedenfor viser innhold lagt til med '>>'.

Terminal som viser kommandoutdata lagt til en eksisterende fil med den doble stรธrre-enn-operatoren

Du kan omdirigere standardutdata ikke bare til filer, men ogsรฅ til enheter.

$ cat music.mp3 > /dev/audio

Katt-kommandoen leser musikkfilen.mp3 og sender utdataene til /dev/audio, som er lydenheten. Hvis lydkonfigurasjonen pรฅ PC-en din er riktig, spiller denne kommandoen av musikkfilen.mp3.

Input omdirigering

Grafikken nedenfor introduserer omdirigering av inndata.

Grafikk for overskrift for omdirigering av input-seksjon

Symbolet '<' brukes til omdirigering av input (STDIN).

Eksempel: E-postprogrammet i Linux kan hjelpe deg med รฅ sende e-poster fra terminalen.

Du kan skrive innholdet i e-posten ved hjelp av tastaturet, standard inndataenhet. Men hvis du vil legge ved en fil i e-posten, kan du bruke omdirigeringsoperatoren for inndata i fรธlgende format.

mail -s "Subject" to-address < Filename

Skjermbildet nedenfor viser mail-kommandoen som leser en fil som input.

mail-kommando ved bruk av omdirigering av input for รฅ legge ved en fil i en e-post

Dette legger filen ved e-posten, og den sendes til mottakeren.

Eksemplene ovenfor var enkle. Se nรฅ pรฅ noen avanserte omdirigeringsteknikker som bruker filbeskrivelser.

filet Descriptors (FD)

I Linux og Unix er alt en fil. Vanlige filer, kataloger og til og med enheter er filer. Hver fil har et tilknyttet nummer kalt en filbeskrivelse (FD).

Diagrammet nedenfor viser standardstrรธmmene og deres filbeskrivelser.

Diagram over standard input-, output- og error-strรธmmer og deres filbeskrivelser

Skjermen din har ogsรฅ en filbeskrivelse. Nรฅr et program kjรธres, sendes utdataene til filbeskrivelsen pรฅ skjermen, og du ser programutdataene pรฅ skjermen. Hvis utdataene ble sendt til skriverens filbeskrivelse, ville programutdataene blitt skrevet ut.

Feil omdirigering

Nรฅr du kjรธrer et program eller en kommando i terminalen, er det alltid tre filer รฅpne, nemlig standard input, standard output og standard error.

Disse filene er alltid til stede nรฅr et program kjรธrer. Som forklart tidligere, er en filbeskrivelse knyttet til hver av disse filene.

filet filet Descriptor
Standardinngang STDIN 0
Standard utgang STDOUT 1
Standardfeil STDERR 2

Som standard vises feilstrรธmmen pรฅ skjermen. Omdirigering av feil ruter feilene til en annen fil enn skjermen.

Hvorfor feilomadressering?

Feilomdirigering er en av de svรฆrt populรฆre funksjonene i Unix og Linux.

Hyppige Unix-brukere vet at mange kommandoer gir deg enorme mengder feil. For eksempel, nรฅr man sรธker etter filer, fรฅr man vanligvis tillatelse avviste feil, som vanligvis ikke hjelper personen som sรธker etter en bestemt fil. Nรฅr du kjรธrer skallskript, vil du ofte ikke at feilmeldinger skal rote til den vanlige programutdataen.

Lรธsningen er รฅ omdirigere feilmeldingene til en fil.

Eksempel 1

$ myprogram 2>errorsfile

Skjermbildet nedenfor viser denne kommandoen i terminalen.

Terminal som kjรธrer mittprogram med standardfeil omdirigert til errorsfile-filen

Ovenfor kjรธrer vi et program som heter mittprogram. Filbeskrivelsen for standardfeil er 2. Ved รฅ bruke ยซ2>ยป omdirigerer vi feilutdataene til en fil som heter ยซfeilfilยป. Dermed blir ikke programutdataene overfylt med feil.

Eksempel 2

Her er et annet eksempel som bruker find-setningen.

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

Ved รฅ bruke find-kommandoen sรธker vi i gjeldende katalog ยซ.ยป etter en fil med navn som starter med ยซmyยป, og sender eventuelle feil til error.log.

Eksempel 3: La oss se pรฅ et mer komplekst eksempel.

Serveradministratorer lister ofte opp kataloger og lagrer bรฅde feil- og standardutdata i en fil, som kan behandles senere. Her er kommandoen.

ls Documents ABC> dirlist 2>&1

Diagrammet nedenfor viser begge strรธmmingene som blir fanget opp i รฉn fil.

Diagram over standardutdata og standardfeil, begge omdirigert til filen dirlist

Her:

  • 2>&1 betyr at STDERR blir omdirigert til samme mรฅl som STDOUT (som er filens dirlist).
  • Feilutdataene blir omdirigert til standardutdata, som igjen blir omdirigert til filen dirlist. Derfor skrives begge strรธmmene til filen dirlist.

Diagrammet nedenfor oppsummerer hvordan input, output og feilomdirigering henger sammen.

Diagram som oppsummerer input, output og omdirigering av feil i Linux og Unix

Spรธrsmรฅl og svar

A rรธr (|) sender utdataene fra รฉn kommando direkte til en annen kommando som input. Omdirigering kobler i stedet en kommando til en fil eller enhet, skriver utdata til den eller leser input fra den. Pipes kobler sammen kommandoer; omdirigering kobler sammen en kommando med en fil.

Operatoren > skriver utdataene fra en kommando til en fil, og erstatter eventuelt eksisterende innhold. Operatoren >> legger i stedet til utdataene pรฅ slutten av filen, keeping det som allerede er der. Bruk >> nรฅr du vil legge til noe i en fil i stedet for รฅ overskrive den.

/dev/null er en spesiell fil som forkaster alt som er skrevet til den. Hvis du legger til 2>/dev/null i en kommando, omdirigeres feilmeldingene til den filen, og forkaster dem i stillhet slik at bare normal utdata vises pรฅ skjermen. Det er en vanlig mรฅte รฅ skjule uรธnsket feilrot pรฅ.

tee-kommandoen leser fra standard input og skriver dataene til bรฅde skjermen og รฉn eller flere filer samtidig, for eksempel ls -al | tee listing.txt. Den lar deg lagre utdataene fra en kommando til en fil mens du fortsatt ser den pรฅ skjermen.

Et here-dokument bruker <<-operatoren til รฅ mate inn flere linjer med innebygd tekst i en kommando som input, og avsluttes med et markeringsord du velger. Det er nyttig i skallskript for รฅ sende inndata over flere linjer, for eksempel en e-posttekst, uten en separat fil.

Bruk syntaksen 2>&1 etter omdirigering av utdata, som i command > file 2>&1, slik at standardfeilen fรธlger standardutdata inn i filen. I moderne Bash gjรธr forkortelsen command &> file det samme. Rekkefรธlgen er viktig: plasser 2>&1 etter omdirigeringen av utdata.

AI-assistenter kan gjรธre en forespรธrsel pรฅ vanlig engelsk om til riktig omdirigeringskommando, forklare hva operatorer som 2>&1 eller &> gjรธr, og flagge feil fรธr du kjรธrer dem. Maskinlรฆringsverktรธy skanner ogsรฅ omdirigerte logg- og feilfiler for รฅ avdekke avvik som manuell gjennomgang ville oversett.

Ja. GitHub Copilot kan generere kommandoer og skript som omdirigerer input, output og feil fra en kort kommentar som beskriver mรฅlet, og fullfรธre dem mens du skriver. Revse alle foreslรฅtte kommandoer mot filene dine, spesielt de som bruker > som overskriver eksisterende data.

Oppsummer dette innlegget med: