Forstå rør og omdirigering til Linux-kommandolinjen
To kraftfulde funktioner i Linux-kommandolinjeskallen er omdirigering og rør, der tillader output (eller endda input) af et program, der skal sendes til en fil eller et andet program. Du har muligvis allerede brugt disse funktioner uden at være opmærksom på det. Når du har brugt " >
" -tegnet i en kommando eller " |
"Så har du brugt omdirigering eller et rør, henholdsvis.
På alle Unix-lignende operativsystemer, som Linux og FreeBSD, går output fra et kommandolinjeprogram automatisk til et sted kendt som standard output (stdout). Som standard er standardbilledet skærmbilledet (konsollen), men det kan ændres ved hjælp af rør og omdirigering. Ligeledes betragtes tastaturet som standardindgangen (stdin) og som med standard ud, kan det ændres.
Rør
Rør giver dig mulighed for at trække output fra en kommando til en anden, hvor den vil blive brugt som input. Med andre ord bliver standardudgangen fra et program standardindgangen til en anden.
Kommandoen " more
" tager standardindgangen og paginerer den på standardudgangen (skærmen). Dette betyder, at hvis en kommando viser mere information end det, der vises på en skærm, vil " more
" programmet standse efter det første skærmbillede (side) og vente på, at brugeren trykker på SPACE for at se den næste side eller RETURN for at se næste linje.
Her er et eksempel, som vil liste alle filer, med detaljer ( -la
) i /dev
biblioteket og rør output til more
. /dev
skal have snesevis af filer og dermed sikre, at more
skal paginere.
ls -la / dev | mere
Bemærk --More--
-prompten nederst på skærmen. Tryk på SPACE for at se den næste side, og tryk på SPACE indtil udgangen er færdig.
Her er et andet røreksempel, denne gang ved hjælp af værktøjet " wc
" (ordtælling).
ls -1 / dev | Toilet
wc
tæller antallet af linjer, ord og tegn i standardindgangen. Hvis du bruger parameteren -l
, vil det kun vise antallet af linjer, hvilket er en god måde at se, hvor mange filer der er i en mappe!
The Depth Kig på Linux's Arkiverings- og Komprimeringskommandoer-tutorial indeholder et eksempel med tar
og 7-zip sammen:
tjære cvf - * | 7zr a -si somefiles.tar.7z
I dette tilfælde fortæller bindestregen efter f
optionen, at tar
skal sende sin output til standard ud og ikke til en fil. Udgangen fra tar
vil blive fodret ned i røret til 7zr, som venter på input fra standard på grund af -si-indstillingen.
omdirigering
Omdirigering svarer til rør undtagen ved brug af filer i stedet for et andet program. Standardudgangen til et program er skærmen. Ved hjælp af >
(større end) symbolet kan output fra et program sendes til en fil. Her er en listing.txt
over /dev
igen, men denne gang omdirigeret til en fil, der hedder listing.txt
ls -la> listing.txt
Der vises ikke noget på terminalen, da alt blev sendt til filen. Du kan kigge på filen ved hjælp af kommandoen cat
(som kan pipes til more
) eller for nemheds skyld kan du bare bruge more command
på egen hånd:
mere listing.txt
Hvis listing.txt
allerede havde eksisteret, overskrives det. Men du kan føje til en eksisterende fil ved hjælp af >>
som denne:
ls -la / home> listing.txt ls -la / dev >> listing.txt
Den første omdirigering overskriver filen listing.txt
mens den anden vil tilføre den.
cat
kommandoen kan bruges til at oprette en fil ved hjælp af omdirigering, for eksempel:
cat> atextfile.txt
Nu bliver den tekst, du skriver, sendt til filen atextfile.txt
indtil du trykker Control-D, hvorefter filen lukkes, og du vil blive returneret til kommandoprompten. Hvis du vil tilføje mere tekst til filen, brug samme kommando men med to større end tegn ( >>
).
Konklusion
Mange af Linux-kommandolinjeprogrammer er designet til at arbejde med omdirigering og rør, forsøge at eksperimentere med dem og se, hvordan de interagerer. For eksempel kan udgangen af ps
kommandoen, som viser de nuværende processer, ledes til grep
. Se om du kan finde ud af, hvordan du kan liste de processer, der ejes af root.