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.