Forstå rør og omdirigering til Linux-kommandolinjen
To kraftige funksjoner i Linux-kommandolinjeskallet er omdirigering og rør som tillater utdata (eller til og med inngang) av et program som skal sendes til en fil eller et annet program. Du har kanskje allerede brukt disse funksjonene uten å være klar over det. Når du har brukt " >
" -tegnet i en kommando eller " |
"Da har du brukt omdirigering eller et rør, henholdsvis.
På alle Unix-lignende operativsystemer, som Linux og FreeBSD, går utgangen fra et kommandolinjeprogram automatisk til et sted kjent som standardutgang (stdout). Som standard er standard ut skjermen (konsollen), men den kan endres ved hjelp av rør og omdirigering. På samme måte betraktes tastaturet som standardinngangen (stdin), og som med standard ut, kan det endres.
rør
Rør tillater deg å trekke utgangen fra en kommando til en annen hvor den vil bli brukt som inngang. Med andre ord blir standardutgangen fra ett program standardinngangen til en annen.
Kommandoen " more
" tar standardinngangen og paginerer den på standardutgangen (skjermen). Dette betyr at hvis en kommando viser mer informasjon enn det som kan vises på ett skjermbilde, vil « more
» -programmet pause etter den første skjermen full (side) og vente på at brukeren trykker på SPACE for å se neste side eller RETURN for å se neste linje.
Her er et eksempel som vil liste alle filene, med detaljer ( -la
) i /dev
katalogen og rør utgangen til more
. Kataloget /dev
skal ha dusinvis av filer og dermed sikre at more
må paginere.
ls -la / dev | mer
Legg merke til --More--
nederst på skjermen. Trykk på SPACE for å se neste side og fortsett å trykke SPACE til utgangen er ferdig.
Her er et annet røreksempel, denne gangen med verktøyet " wc
" (word count).
ls -1 / dev | toalett
wc
teller antall linjer, ord og tegn i standardinngangen. Hvis du bruker parameteren -l
, vises bare antall linjer, noe som er en god måte å se hvor mange filer som er i en katalog!
The Depth Se på Linuxs Arkiverings- og Komprimeringskommandoer opplæring har et eksempel med å bruke tar
og 7-Zip sammen:
tjære cvf - * | 7zr a -si somefiles.tar.7z
I dette tilfellet forteller bindestrek etter f
alternativet tar
å sende sin utgang til standard ut og ikke til en fil. Utgangen fra tar
vil bli matet ned i røret til 7zr som venter på inngang fra standard på grunn av -si-alternativet.
omdirigering
Omdirigering ligner rør uten bruk av filer i stedet for et annet program. Standardutgangen for et program er skjermen. Ved hjelp av >
(større enn) symbolet kan utgangen av et program sendes til en fil. Her er en katalogoppføring av /dev
igjen, men denne gangen omdirigert til en fil som heter listing.txt
ls -la> listing.txt
Det blir ikke noe som vises på terminalen som alt ble sendt til filen. Du kan ta en titt på filen ved hjelp av cat
(som kan røres inn i more
) eller for enkelhets skyld kan du bare bruke more command
på egenhånd:
mer listing.txt
Hvis listing.txt
allerede hadde eksistert, blir det overskrevet. Men du kan legge til en eksisterende fil ved hjelp av >>
slik:
ls -la / home> listing.txt ls -la / dev >> listing.txt
Den første omadresseringen overskriver filen listing.txt
mens den andre vil legge til den.
Kattkommandoen kan brukes til å lage en fil ved hjelp av omdirigering, for eksempel:
katt> atextfile.txt
Nå vil hvilken tekst du skriver, sendes til filen atextfile.txt
til du trykker på Control-D, da vil filen bli lukket og du vil bli returnert til kommandoprompten. Hvis du vil legge til mer tekst i filen, bruk samme kommando, men med to større enn tegn ( >>
).
Konklusjon
Mange av Linux-kommandolinjeprogrammer er utviklet for å jobbe med omdirigering og rør, prøv å eksperimentere med dem og se hvordan de samhandler. For eksempel kan utgangen av ps
kommandoen, som viser de nåværende prosessene, bli pipet inn i grep
. Se om du kan finne ut hvordan du lister prosessene som eies av rot.