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


Et av de viktigste og mest interessante emnene under Linux-administrasjon er I/O-omdirigering. Denne funksjonen på kommandolinjen lar deg omdirigere inndata og/eller utdata fra kommandoer fra og/eller til filer, eller slå sammen flere kommandoer ved å bruke pipes for å danne det som er kjent som en «kommandorørelinje» .

Alle kommandoene vi kjører produserer grunnleggende to typer utdata:

  1. kommandoresultatet – data programmet er designet for å produsere, og
  2. programstatus og feilmeldinger som informerer en bruker om detaljene for programkjøring.

I Linux og andre Unix-lignende systemer er det tre standardfiler navngitt nedenfor som også identifiseres av skallet ved hjelp av filbeskrivelsesnumre:

  1. stdin eller 0 – den er koblet til tastaturet, de fleste programmer leser inndata fra denne filen.
  2. stdout eller 1 – den er festet til skjermen, og alle programmer sender resultatene til denne filen og
  3. stderr eller 2 – programmer sender status-/feilmeldinger til denne filen som også er vedlagt skjermen.

Derfor lar I/O-omdirigering deg endre inngangskilden til en kommando, samt hvor dens utdata og feilmeldinger sendes til. Og dette er muliggjort av “< ” og “> ” omdirigeringsoperatørene.

Hvordan omdirigere standardutdata til fil i Linux

Du kan omdirigere standardutdata som i eksemplet nedenfor, her ønsker vi å lagre utdataene fra toppkommandoen for senere inspeksjon:

top -bn 5 >top.log

Hvor flaggene:

  1. -b – gjør det mulig for top å kjøre i batch-modus, slik at du kan omdirigere utdataene til en fil eller en annen kommando.
  2. -n – spesifiserer antall iterasjoner før kommandoen avsluttes.

Du kan se innholdet i top.log-filen ved å bruke cat-kommandoen som følger:

cat top.log

For å legge til utdata fra en kommando, bruk “>> ”-operatoren.

For å legge til utdata fra toppkommandoen ovenfor i top.log-filen, spesielt i et skript (eller på kommandolinjen), skriv inn linjen nedenfor:

top -bn 5 >>top.log

Merk: Ved å bruke filbeskrivelsesnummeret er utdataomdirigeringskommandoen ovenfor den samme som:

top -bn 5 1>top.log

Hvordan omdirigere standardfeil til fil i Linux

For å omdirigere standardfeil for en kommando, må du eksplisitt spesifisere filbeskrivelsens nummer, 2 for at skallet skal forstå hva du prøver å gjøre.

For eksempel vil ls-kommandoen nedenfor produsere en feil når den utføres av en normal systembruker uten root-privilegier:

ls -l /root/

Du kan omdirigere standardfeilen til en fil som nedenfor:

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

For å legge til standardfeilen, bruk kommandoen nedenfor:

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

Hvordan omdirigere standardutdata/feil til én fil

Det er også mulig å fange opp all utdata fra en kommando (både standardutdata og standardfeil) i en enkelt fil. Dette kan gjøres på to mulige måter ved å spesifisere fildeskriptornumrene:

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

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

Kommandoen ovenfor betyr at skallet først vil sende utdataene fra ls-kommandoen til filen ls-error.log (ved å bruke >ls-error.log), og deretter skriver alle feilmeldinger til filbeskrivelsen 2 (standard utdata) som har blitt omdirigert til filen ls-error.log (ved hjelp av 2>&1 ). Antyder at standardfeil også sendes til samme fil som standardutdata.

2. Den andre og direkte metoden er:

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

Du kan også legge til standardutdata og standardfeil til en enkelt fil slik:

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

Hvordan omdirigere standardinndata til fil

De fleste om ikke alle kommandoer får input fra standard input, og som standard er standard input koblet til tastaturet.

For å omdirigere standardinndata fra en annen fil enn tastaturet, bruk “< ”-operatoren som nedenfor:

cat <domains.list 

Hvordan omdirigere standard input/output til fil

Du kan utføre standard input, standard output omdirigering samtidig ved å bruke sorteringskommandoen som nedenfor:

sort <domains.list >sort.output

Hvordan bruke I/O-omdirigering ved hjelp av rør

For å omdirigere utdata fra en kommando som input fra en annen, kan du bruke pipes, dette er et kraftig middel for å bygge nyttige kommandolinjer for komplekse operasjoner.

For eksempel vil kommandoen nedenfor vise de fem nylig modifiserte filene.

ls -lt | head -n 5 

Her er alternativene:

  1. -l – aktiverer format for lang oppføring
  2. -t – sorter etter endringstid med de nyeste filene vises først
  3. -n – angir antall overskriftslinjer som skal vises

Viktige kommandoer for å bygge rørledninger

Her vil vi kort gjennomgå to viktige kommandoer for å bygge kommandorørledninger, og de er:

xargs som brukes til å bygge og utføre kommandolinjer fra standardinndata. Nedenfor er et eksempel på en pipeline som bruker xargs, denne kommandoen brukes til å kopiere en fil til flere kataloger i Linux:

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

Og alternativene:

  1. -n 1 – instruerer xargs å bruke maksimalt ett argument per kommandolinje og sende til cp-kommandoen
  2. cp – kopierer filen
  3. -v – viser fremdriften til kopieringskommandoen.

For flere bruksalternativer og informasjon, les gjennom xargs man-siden:

man xargs 

En tee-kommando leser fra standardinndata og skriver til standardutdata og filer. Vi kan demonstrere hvordan t-skjorten fungerer som følger:

echo "Testing how tee command works" | tee file1 

Fil- eller tekstfiltre brukes ofte med pipes for effektive Linux-filoperasjoner, for å behandle informasjon på kraftige måter som for eksempel restrukturering av utdata av kommandoer (dette kan være avgjørende for generering av nyttige Linux-rapporter), modifisering av tekst i filer pluss flere andre Linux-systemadministrasjoner oppgaver.

For å lære mer om Linux-filtre og rør, les denne artikkelen Finn topp 10 IP-adresser som får tilgang til Apache Server, viser et nyttig eksempel på bruk av filtre og rør.

I denne artikkelen forklarte vi det grunnleggende om I/O-omdirigering i Linux. Husk å dele tankene dine via tilbakemeldingsdelen nedenfor.