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: