Input Output Redirection i Linux/Unix eksempler

⚡ Smart opsummering

Omdirigering i Linux og Unix ændrer, hvor en kommando læser input eller sender output, swapping tastaturet og skærmen for filer eller enheder ved hjælp af operatorer som f.eks. større end-tegnet, mindre end-tegnet og tilføjningsoperatoren.

  • 🔀 Omdirigering: Omdirigering ændrer en kommandos standardinput eller -output fra tastaturet og skærmen til en fil eller enhed.
  • ➡️ Output: Operatoren > skriver output til en fil, mens >> tilføjer output til en eksisterende fil uden at slette den.
  • ⬅️ Input: <-operatoren indfører en fil i en kommando som standardinput i stedet for tastaturet.
  • 🔢 Filbeskrivelser: Hver åben fil får et tal: 0 for stdin, 1 for stdout og 2 for stderr.
  • ⚠️ Fejlomdirigering: Brug af 2> sender fejlmeddelelser til en separat fil, så de ikke forstyrrer det normale output.
  • 🔗 Kombinerede strømme: Syntaksen 2>&1 sender standardfejl til samme mål som standardoutput.
  • 🤖 AI-hjælp: AI-assistenter og GitHub Copilot kan bygge og forklare omdirigeringskommandoer og shell-scripts.

Omdirigering af input og output i Linux og Unix med eksempler

Omdirigering er en af ​​de mest nyttige funktioner i Linux og Unix-shell, fordi den lader dig bestemme, hvor en kommando læser sit input og sender sit output hen. Denne side forklarer output, input og fejlomdirigering med eksempler.

Hvad er omdirigering?

Omdirigering er en funktion i Linux, der gør det muligt at ændre standard input- og output-enheder, når du udfører en kommando. Den grundlæggende arbejdsgang for enhver Linux kommando er, at den tager et input og giver et output.

  • Standard input-enheden (stdin) er tastaturet.
  • Standard output-enheden (stdout) er skærmen.

Med omdirigering kan standardinput og -output ovenfor ændres.

Output omdirigering

Grafikken nedenfor markerer starten på eksemplerne på omdirigering af output.

Grafik for overskrift til sektion for omdirigering af output

Symbolet '>' bruges til omdirigering af output (STDOUT).

Eksempel:

ls -al > listings

Her omdirigeres outputtet fra kommandoen ls -al til filen “listings” i stedet for din skærm. Skærmbilledet nedenfor viser resultatet.

Terminal viser ls -al-listen omdirigeret til listningsfilen

Bemærk: Brug det korrekte filnavn, når du omdirigerer kommandoens output til en fil. Hvis en fil med samme navn allerede findes, sletter den omdirigerede kommando dens indhold og overskriver den derefter.

Hvis du ikke ønsker, at en fil skal overskrives, men ønsker at tilføje mere indhold til en eksisterende fil, skal du bruge operatoren '>>'. Skærmbilledet nedenfor viser indhold tilføjet med '>>'.

Terminal viser kommandooutput tilføjet til en eksisterende fil med den dobbelte større-end-operator

Du kan omdirigere standardoutput ikke kun til filer, men også til enheder.

$ cat music.mp3 > /dev/audio

Kommandoen `cat` læser `music`-filen.mp3 og sender outputtet til /dev/audio, som er lydenheden. Hvis lydkonfigurationen på din pc er korrekt, afspiller denne kommando filen music.mp3.

Input omdirigering

Grafikken nedenfor introducerer omdirigering af input.

Grafik for overskrift til omdirigeringssektion for input

Symbolet '<' bruges til omdirigering af input (STDIN).

Eksempel: Mailprogrammet i Linux kan hjælpe dig med at sende e-mails fra terminalen.

Du kan skrive indholdet af e-mailen ved hjælp af tastaturet, standardinputenheden. Men hvis du vil vedhæfte en fil til e-mailen, kan du bruge input-omdirigeringsoperatoren i følgende format.

mail -s "Subject" to-address < Filename

Skærmbilledet nedenfor viser mail-kommandoen, der læser en fil som input.

mail-kommando bruger inputomdirigering til at vedhæfte en fil til en e-mail

Dette vedhæfter filen til e-mailen, og den sendes til modtageren.

Eksemplerne ovenfor var enkle. Se nu på nogle avancerede omdirigeringsteknikker, der bruger filbeskrivelser.

File (Felt) Descriptors (FD)

I Linux og Unix er alting en fil. Almindelige filer, mapper og endda enheder er filer. Hver fil har et tilknyttet nummer kaldet en fildeskriptor (FD).

Diagrammet nedenfor viser standardstrømmene og deres filbeskrivelser.

Diagram over standard input-, output- og fejlstrømme og deres filbeskrivelser

Din skærm har også en filbeskrivelse. Når et program udføres, sendes outputtet til skærmens filbeskrivelse, og du ser programoutputtet på din skærm. Hvis outputtet blev sendt til printerens filbeskrivelse, ville programoutputtet blive udskrevet.

Fejlomdirigering

Når du udfører et program eller en kommando i terminalen, er der altid tre filer åbne, nemlig standardinput, standardoutput og standardfejl.

Disse filer er altid til stede, når et program kører. Som forklaret tidligere er der knyttet en filbeskrivelse til hver af disse filer.

File (Felt) File (Felt) Descriptor
Standardindgang STDIN 0
Standard output STDOUT 1
Standardfejl STDERR 2

Som standard vises fejlstrømmen på skærmen. Fejlomdirigering sender fejlene til en anden fil end skærmen.

Hvorfor fejlomdirigering?

Fejlomdirigering er en af ​​de meget populære funktioner i Unix og Linux.

Hyppige Unix-brugere vil vide, at mange kommandoer giver dig enorme mængder fejl. For eksempel, når man søger efter filer, får man typisk tilladelse afviste fejl, som normalt ikke hjælper den person, der søger efter en bestemt fil. Når man udfører shell-scripts, ønsker man ofte ikke, at fejlmeddelelser roder til det normale programoutput.

Løsningen er at omdirigere fejlmeddelelserne til en fil.

Eksempel 1

$ myprogram 2>errorsfile

Skærmbilledet nedenfor viser denne kommando i terminalen.

Terminal kører mitprogram med standardfejl omdirigeret til errorsfile-filen

Ovenfor udfører vi et program med navnet mitprogram. Filbeskrivelsen for standardfejl er 2. Ved at bruge "2>" omdirigerer vi fejloutputtet til en fil med navnet "fejlfil". Således er programoutputtet ikke fyldt med fejl.

Eksempel 2

Her er et andet eksempel, der bruger find-sætningen.

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

Ved at bruge find-kommandoen søger vi i den aktuelle mappe “.” efter en fil, hvis navn starter med “my”, og sender eventuelle fejl til error.log.

Eksempel 3: Lad os se på et mere komplekst eksempel.

Serveradministratorer viser ofte mapper og gemmer både fejl- og standardoutput i en fil, som kan behandles senere. Her er kommandoen.

ls Documents ABC> dirlist 2>&1

Diagrammet nedenfor viser, at begge streams bliver optaget i én fil.

Diagram over standardoutput og standardfejl, begge omdirigeret til filen dirlist

Her:

  • 2>&1 betyder, at STDERR omdirigeres til samme mål som STDOUT (som er filens dirlist).
  • Fejloutputtet omdirigeres til standardoutputtet, som igen omdirigeres til filen dirlist. Derfor skrives begge streams til filen dirlist.

Diagrammet nedenfor opsummerer, hvordan input, output og fejlomdirigering hænger sammen.

Diagram, der opsummerer input, output og fejlomdirigering i Linux og Unix

Ofte Stillede Spørgsmål

A rør (|) sender outputtet fra én kommando direkte til en anden kommando som input. Omdirigering forbinder i stedet en kommando til en fil eller enhed, skriver output til den eller læser input fra den. Pipes joiner kommandoer; omdirigering joiner en kommando med en fil.

Operatoren > skriver en kommandos output til en fil og erstatter dermed eventuelt eksisterende indhold. Operatoren >> tilføjer i stedet outputtet til slutningen af ​​filen, keeping hvad der allerede er der. Brug >> når du vil tilføje noget til en fil i stedet for at overskrive den.

/dev/null er en speciel fil, der kasserer alt, der er skrevet til den. Hvis du tilføjer 2>/dev/null til en kommando, omdirigeres dens fejlmeddelelser til den fil og kasseres lydløst, så kun normalt output vises på skærmen. Det er en almindelig måde at skjule uønsket fejlrod på.

Kommandoen tee læser fra standardinput og skriver dataene til både skærmen og en eller flere filer på én gang, for eksempel ls -al | tee listing.txt. Den lader dig gemme en kommandos output til en fil, mens du stadig ser den på skærmen.

Et here-dokument bruger operatoren << til at indsætte flere linjer indlejret tekst i en kommando som input, og afsluttes med et markeringsord, du vælger. Det er praktisk i shell-scripts til at sende input over flere linjer, f.eks. en e-mail-brødtekst, uden en separat fil.

Brug syntaksen 2>&1 efter omdirigering af output, som i command > file 2>&1, så standardfejlen følger standardoutputtet ind i filen. I moderne Bash gør forkortelsen command &> file det samme. Rækkefølgen er vigtig: placer 2>&1 efter omdirigeringen af ​​outputtet.

AI-assistenter kan omdanne en anmodning på almindeligt engelsk til den korrekte omdirigeringskommando, forklare, hvad operatorer som 2>&1 eller &> gør, og markere fejl, før du kører dem. Maskinlæringsværktøjer scanner også omdirigerede log- og fejlfiler for at afsløre anomalier, som manuel gennemgang ville overse.

Ja. GitHub Copilot kan generere kommandoer og scripts, der omdirigerer input, output og fejl fra en kort kommentar, der beskriver målet, og fuldføre dem, mens du skriver. RevSe alle foreslåede kommandoer mod dine filer, især dem der bruger > og som overskriver eksisterende data.

Opsummer dette indlæg med: