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: