Lær det grundlæggende om, hvordan Linux I/O (Input/Output) omdirigering fungerer


Et af de vigtigste og mest interessante emner under Linux-administration er I/O-omdirigering. Denne funktion på kommandolinjen giver dig mulighed for at omdirigere input og/eller output af kommandoer fra og/eller til filer eller sammenføje flere kommandoer ved hjælp af rør for at danne det, der kaldes en "kommandorørledning".

Alle kommandoer, som vi kører, producerer fundamentalt to slags output:

  1. kommandoresultatet - data, som programmet er designet til at producere, og
  2. programstatus og fejlmeddelelser, der informerer en bruger om detaljerne i programudførelsen.

I Linux og andre Unix-lignende systemer er der tre standardfiler navngivet nedenfor, som også identificeres af skallen ved hjælp af filbeskrivelsesnumre:

  1. stdin eller 0 - det er tilsluttet tastaturet, de fleste programmer læser input fra denne fil.
  2. stdout eller 1 - den er knyttet til skærmen, og alle programmer sender deres resultater til denne fil og
  3. stderr eller 2 - programmer sender status-/fejlmeddelelser til denne fil, som også er knyttet til skærmen.

Derfor giver I/O-omdirigering dig mulighed for at ændre indgangskilden til en kommando samt hvor dens output- og fejlmeddelelser sendes til. Og dette er muliggjort af "<" og ">" omdirigeringsoperatorerne.

Sådan omdirigeres standardoutput til fil i Linux

Du kan omdirigere standardoutput som i eksemplet nedenfor, her vil vi gemme output fra topkommandoen til senere inspektion:

$ top -bn 5 >top.log

Hvor flagene:

  1. -b - gør det muligt for top at køre i batch-tilstand, så du kan omdirigere dets output til en fil eller en anden kommando.
  2. -n - angiver antallet af iterationer, før kommandoen afsluttes.

Du kan se indholdet af filen top.log ved hjælp af cat-kommandoen som følger:

$ cat top.log

For at tilføje output fra en kommando skal du bruge operatoren “>>” .

For eksempel for at tilføje output fra topkommando ovenfor i top.log-filen, især inden for et script (eller på kommandolinjen), skal du indtaste linjen nedenfor:

$ top -bn 5 >>top.log

Bemærk: Ved hjælp af filbeskrivelsesnummeret er kommandoen for output omdirigering ovenfor den samme som:

$ top -bn 5 1>top.log

Sådan omdirigeres standardfejl til fil i Linux

For at omdirigere standardfejl i en kommando skal du eksplicit angive filbeskrivelsesnummeret 2 for, at skallen skal forstå, hvad du prøver at gøre.

For eksempel vil kommandoen ls frembringe en fejl, når den udføres af en normal systembruger uden rodprivilegier:

$ ls -l /root/

Du kan omdirigere standardfejlen til en fil som nedenfor:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 

Brug kommandoen nedenfor for at tilføje standardfejlen:

$ ls -l /root/ 2>>ls-error.log

Sådan omdirigeres standardoutput/-fejl til en fil

Det er også muligt at fange al output fra en kommando (både standardoutput og standardfejl) i en enkelt fil. Dette kan gøres på to mulige måder ved at angive filbeskrivelsesnumrene:

1. Den første er en relativt gammel metode, der fungerer som følger:

$ ls -l /root/ >ls-error.log 2>&1

Kommandoen ovenfor betyder, at skallen først sender output fra ls-kommandoen til filen ls-error.log (ved hjælp af > ls-error.log ) og derefter skriver alle fejlmeddelelser til filbeskriveren 2 (standardoutput), der er omdirigeret til filen ls-error.log (ved hjælp af 2> & 1 ). Implementering af denne standardfejl sendes også til den samme fil som standardoutput.

2. Den anden og direkte metode er:

$ ls -l /root/ &>ls-error.log

Du kan også tilføje standardoutput og standardfejl til en enkelt fil som sådan:

$ ls -l /root/ &>>ls-error.log

Sådan omdirigeres standardinput til fil

De fleste, hvis ikke alle kommandoer får deres input fra standardinput, og som standard er standardinput knyttet til tastaturet.

For at omdirigere standardinput fra en anden fil end tastaturet skal du bruge operatoren “<” som nedenfor:

$ cat <domains.list 

Sådan omdirigeres standardinput/output til fil

Du kan udføre standard input, standard output omdirigering på samme tid ved hjælp af sorteringskommandoen som nedenfor:

$ sort <domains.list >sort.output

Sådan bruges I/O-omdirigering ved hjælp af rør

For at omdirigere output fra en kommando som input fra en anden kan du bruge rør, dette er et effektivt middel til at oprette nyttige kommandolinjer til komplekse operationer.

For eksempel vil nedenstående kommando vise de top fem nyligt ændrede filer.

$ ls -lt | head -n 5 

Her er mulighederne:

  1. -l - aktiverer langt noteringsformat
  2. -t - sorter efter ændringstid med de nyeste filer vises først
  3. -n - angiver antallet af headerlinjer, der skal vises

Vigtige kommandoer til opbygning af rørledninger

Her vil vi kort gennemgå to vigtige kommandoer til opbygning af kommandorørledninger, og de er:

xargs, der bruges til at opbygge og udføre kommandolinjer fra standardinput. Nedenfor er et eksempel på en pipeline, der bruger xargs, denne kommando bruges til at kopiere en fil til flere mapper i Linux:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

Og mulighederne:

  1. -n 1 - beder xargs om at bruge højst et argument pr. kommandolinje og sende til cp-kommandoen
  2. cp - kopierer filen
  3. -v - viser status for kopikommandoen.

For flere brugsmuligheder og info, læs gennem xargs man-siden:

$ man xargs 

En tee-kommando læser fra standardinput og skriver til standardoutput og filer. Vi kan demonstrere, hvordan tee fungerer som følger:

$ echo "Testing how tee command works" | tee file1 

Linux systemadministrationsopgaver.

Hvis du vil lære mere om Linux-filtre og -rør, skal du læse denne artikel Find top 10 IP-adresser, der får adgang til Apache Server, viser et nyttigt eksempel på brug af filtre og rør.

I denne artikel forklarede vi fundamentet for I/O-omdirigering i Linux. Husk at dele dine tanker via feedback-sektionen nedenfor.