Förstå rör och omdirigering för Linux-kommandoraden
Två kraftfulla funktioner i Linux-kommandoradsskalet är omdirigering och rör som tillåter utmatning (eller till och med inmatning) av ett program som ska skickas till en fil eller ett annat program. Du har kanske redan använt dessa funktioner utan att vara medveten om det. När du har använt tecknet " >
" i ett kommando eller " |
"Då har du använt omdirigering eller ett rör, respektive.
På alla Unix-liknande operativsystem, som Linux och FreeBSD, går utmatningen från ett kommandoradsprogram automatiskt till en plats som kallas standardutmatning (stdout). Som standard är standard ut skärmen (konsolen) men den kan ändras med hjälp av rör och omdirigering. På samma sätt betraktas tangentbordet som standardinmatningen (stdin) och som med standard ut kan den ändras.
rör
Rör gör att du kan tratt utmatningen från ett kommando till en annan där den kommer att användas som ingång. Med andra ord blir standardutmatningen från ett program standardinmatningen för en annan.
Kommandot " more
" tar standardinmatningen och paginerar den på standardutgången (skärmen). Det betyder att om ett kommando visar mer information än vad som kan visas på en skärm, pausar " more
" programmet efter den första skärmen full (sidan) och väntar på användaren att trycka på SPACE för att se nästa sida eller RETURN för att se nästa rad.
Här är ett exempel som listar alla filer, med detaljer ( -la
) i /dev
katalogen och rör utmatningen till more
. Katalogen /dev
ska ha dussintals filer och därigenom se till att more
behöver paginera.
ls -la / dev | Mer
Lägg märke till --More--
prompt längst ner på skärmen. Tryck på SPACE för att se nästa sida och fortsätt trycka på SPACE tills utgången är klar.
Här är ett annat rörexempel, den här gången med hjälp av verktyget " wc
" (ordräkning).
ls -1 / dev | toalett
wc
räknar antalet linjer, ord och tecken i standardinmatningen. Om du använder parametern -l
kommer det bara att visa antalet linjer, vilket är bra sätt att se hur många filer som finns i en katalog!
In depth Se på Linux: s Arkivering och komprimeringskommandon handledning har ett exempel med tar
och 7-Zip tillsammans:
tjära cvf - * | 7zr a -si somefiles.tar.7z
I det här fallet säger bindestreck efter f
alternativet tar
att sända utmatningen till standard ut och inte till en fil. Utgången från tar
kommer att matas ner i röret till 7zr som väntar på inmatning från standard på grund av -si-alternativet.
Omdirigering
Omdirigering liknar rör utan att använda filer istället för ett annat program. Standardutgången för ett program är skärmen. Med hjälp av >
(större än) symbolen kan ett program sändas till en fil. Här är en kataloglista av /dev
igen men den här tiden omdirigeras till en fil som heter listing.txt
ls -la> listing.txt
Det kommer inte att visas något på terminalen eftersom allt skickades till filen. Du kan titta på filen med hjälp av cat
(som kan pipas in till more
) eller för enkelhets skyld kan du bara använda more command
på egen hand:
mer listning.txt
Om listing.txt
redan hade existerat kommer det att skrivas över. Men du kan lägga till en befintlig fil med >>
så här:
ls -la / home> listing.txt ls -la / dev >> listing.txt
Den första omdirigeringen kommer att skriva över filen listing.txt
medan den andra kommer att läggas till den.
cat
kan användas för att skapa en fil med omdirigering, till exempel:
katt> atextfile.txt
Nu kommer vilken text du skriver till att skickas till filen atextfile.txt
tills du trycker på Control-D, då kommer filen att stängas och du kommer tillbaka till kommandotolken. Om du vill lägga till mer text i filen använder du samma kommando men med två större än tecken ( >>
).
Slutsats
Många av Linux-kommandoradsprogram är utformade för att arbeta med omdirigering och rör, försök experimentera med dem och se hur de interagerar. Exempelvis kan utsignalen från ps
kommandot, som listar de nuvarande processerna, pipas in i grep
. Se om du kan träna hur man listar processerna som ägs av root.