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:
- kommandoresultatet – data programmet er designet for å produsere, og
- 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:
- stdin eller 0 – den er koblet til tastaturet, de fleste programmer leser inndata fra denne filen.
- stdout eller 1 – den er festet til skjermen, og alle programmer sender resultatene til denne filen og
- 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:
-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.-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:
-l
– aktiverer format for lang oppføring-t
– sorter etter endringstid med de nyeste filene vises først-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:
-n 1
– instruerer xargs å bruke maksimalt ett argument per kommandolinje og sende til cp-kommandoencp
– kopierer filen-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.