Hur man Använder Rör på Linux

0
350
Fatmawati Achmad Zaenuri/Shutterstock.kom

Använda Linux rören för att koreografera hur kommandoradsverktyg samarbeta. Förenkla komplexa processer och öka din produktivitet genom att utnyttja en samling av fristående kommandon och göra dem till ett enda sinnade team. Vi visar dig hur.

Rören Är Överallt

Rören är en av de mest användbara command-line funktioner som Linux och Unix-liknande operativsystem har. Rören används i otaliga sätt. Titta på alla Linux kommandorad artikel—på vilken webbsida som helst, inte bara vår—och du kommer att se till att rören göra ett utseende som mer ofta än inte. Jag har granskat några av How-To Geek Linux artiklar, och rör som används i alla av dem, på ett eller annat sätt.

Linux rören låter dig utföra åtgärder som inte stöds out-of-the-box av skalet. Men eftersom Linux-design filosofi är att ha många små verktyg för att utföra sina dedikerad funktion mycket väl, och utan onödig funktionalitet—”göra en sak och göra det bra” mantra—du kan lod strängar av kommandon tillsammans med rören så att utdata från ett kommando blir ingången på en annan. Varje kommando som du rör i med att man tar sina unika talanger till laget, och snart du upptäcker att du har monterat en vinnande laget.

Ett Enkelt Exempel

Antag att vi har en katalog full av många olika typer av arkiv. Vi vill veta hur många filer av en viss typ som finns i katalogen. Det finns andra sätt att göra detta, men syftet med denna övning är att införa rör, så vi kommer att göra det med rören.

Kan vi få en lista över filer som du enkelt använder du ls:

ls

För att skilja ut den fil typ av intresse, vi kommer att använda grep. Vi vill hitta filer som har ordet “sida” i sina filnamn eller file extension.

Vi kommer att använda skalet speciella tecknet “|” skicka utdata från ls till grep.

ls | grep “sida”

grep skriver ut rader som matchar sökningen mönster. Så detta ger oss en lista som endast innehåller “.sidan” filer.

Även denna triviala exempel visar funktionaliteten av rör. Utskriften från ls var inte skickas till terminal-fönstret. Det var skickat till grep data för kommandot grep att arbeta med. Produktionen vi ser kommer från grep, som är det sista kommandot i denna kedja.

Utvidga Vår Kedja

Låt oss börja utvidga vår kedja av ledningsbunden kommandon. Vi kan räkna “.sidan” filer genom att lägga till kommandot wc. Vi kommer att använda-l (linje count) alternativ med wc. Obs vi har även lagt till-l (long-format) alternativ till ls . Vi kommer att använda denna inom kort.

ls – | grep “page” | wc -l

grep är inte längre det sista kommandot i kedjan, så att vi inte ser sin produktion. Utdata från grep matas in i wc-kommandot. Produktionen ser vi i terminal fönstret är från wc. wc rapporter om att det finns 69 “.sidan” filer i katalogen.

Låt oss utvidga saker igen. Vi kommer att ta wc-kommando från kommandoraden och ersätta det med awk. Det finns nio kolumner i utskriften från ls med flaggan-l (long-format) alternativ. Vi kommer att använda awk att skriva ut fem kolumner, tre och nio. Dessa är storlek, ägare och namnet på filen.

ls -l | grep “page” | awk ‘{print $5 “”$3 “” $9}’

Vi få en lista på dessa kolumner, en för varje matchande filer.

Vi kommer nu att passera ut genom den sortens kommando. Vi kommer att använda -n (numeriskt) möjlighet att låta sortera vet den första kolumnen ska behandlas som siffror.

ls -l | grep “page” | awk ‘{print $5 “”$3 “” $9}’ | sort-n

Produktionen är nu sorterade i filstorlek för, med våra skräddarsydda urval av tre kolumner.

Lägga Till Ett Annat Kommando

Vi kommer att avsluta med att lägga i svansen kommando. Vi kommer att tala om för det att visa listan över de senast fem rader av utdata.

ls -l | grep “page” | awk ‘{print $5 “”$3 “” $9}’ | sort-n | svans -5

Detta innebär att vår kommando kan översättas till något i stil med “visa mig de fem största “.sidan” filer i den här katalogen, sorterade efter storlek.” Naturligtvis, det finns inget kommando för att åstadkomma detta, men genom att använda rören, vi har skapat vår egen. Vi kan lägga till den här—eller någon annan lång kommando—som ett alias eller skal funktion för att spara alla att skriva.

Här är resultatet:

Vi kan vända storlek order genom att lägga till flaggan-r (bakåt) som alternativ till den sortens kommando, och att använda huvudet i stället för svansen att plocka rader från toppen av produktionen.

Den här gången de fem största “.sidan” filer som listas från den största till den minsta:

Några Exempel Från Den Senaste Tiden

Här är två intressanta exempel från de senaste How-To geek artiklar.

Vissa kommandon, som xargscommand, är utformade för att ha ingång förs till dem. Här är ett sätt som vi kan ha wc räkna ord, tecken och linjer i flera filer, av rörsystem ls i xargs som sedan matar listan över filnamn till wc som om de hade gått till wc som parametrar på kommandoraden.

ls *.sida | xargs wc

Det totala antalet ord, tecken och linjer finns listade längst ned på terminal-fönstret.

Här är ett sätt att få en sorterad lista över de unika filen tillägg i den aktuella katalogen, med ett antal av varje typ.

ls | rev | cut-d’.’ -f1 | rev | sort | uniq -c

Det finns en hel del som händer här.

  • ls: här visas de filer som finns i katalogen
  • rev: Vänder texten i filnamnen.
  • klipp ut: Klipper ut strängen i den första förekomsten av den angivna avgränsare “.”. Sms: a efter denna kasseras.
  • rev: Spegelvänder den återstående texten, som är filnamnstillägget.
  • sortera: Sorterar listan i alfabetisk ordning.
  • uniq: Räknar antalet av varje unik posten i listan.

Utgången visar listan av filnamnstillägg, sorterade i alfabetisk ordning med ett antal av varje unik typ.

Namngivna Pipes

Det finns en annan typ av rör som är tillgängliga för oss, som kallas namngivna pipes. Rören i föregående exempel skapas on-the-fly av skalet när den behandlar kommandoraden. Rören skapas, används, för att sedan slängas. De är övergående och lämnar inga spår efter sig. De existerar endast så länge som det kommandot med dem är igång.

Namngivna pipes visas som beständiga objekt i filsystemet, så att du kan se dem med hjälp av ls. De är långlivade eftersom de kommer att överleva en omstart av datorn—även om alla olästa data i dem på den tiden kommer att kasseras.

Namngivna pipes användes mycket på en gång för att göra det möjligt för olika processer för att skicka och ta emot data, men jag har inte sett dem användas på det sättet under en lång tid. Ingen tvekan om att det finns människor där ute som fortfarande använder dem till stor effekt, men jag har inte stött på några nyligen. Men för fullständighetens skull, eller bara för att tillfredsställa din nyfikenhet, här är hur du kan använda dem.

Namngivna pipes är skapade med mkfifo kommando. Detta kommando kommer att skapa en namngiven pipe kallade “nörd-rör” i den aktuella katalogen.

mkfifo geek-rör

Vi kan se information om den namngivna röret (named pipe om vi använder ls-kommandot med -l (long-format) alternativ:

ls -l geek-rör

Det första tecknet i listan är ett “p”, vilket betyder att det är en pipa. Om det var ett “d”, skulle det innebära filsystemet objektet är en katalog, och ett streck “-” skulle innebära att det är en vanlig fil.

Med hjälp av den Namngivna röret (named Pipe

Låt oss använda våra rör. Den namnlösa rören som vi använde i våra tidigare exempel gick de data som är omedelbart från att skicka kommando till att ta emot kommandot. Data som skickas via en namngiven pipe kommer att bo i röret tills det är att läsa. De data som faktiskt finns kvar i minnet, så storleken på den namngivna röret (named pipe kommer inte att variera i ls listor om det finns data i det eller inte.

Vi kommer att använda två terminalfönster för detta exempel. Jag kommer att använda etiketten:

# Terminal-1

i ett terminalfönster och

# Terminal-2

i den andra, så att du kan skilja mellan dem. Hash “#” talar om för skalet att det som följer är en kommentar, och att ignorera det.

Låt oss ta hela vårt föregående exempel och styra det i den namngivna röret (named pipe. Så vi använder båda namnlösa och namngivna pipes i en enda kommando:

ls | rev | cut-d’.’ -f1 | rev | sort | uniq -c > geek-rör

Inte mycket verkar hända. Du kanske märker att du behöver inte komma tillbaka till kommandotolken dock, så något är på gång.

I den andra terminal-fönster, kört det här kommandot:

katt < geek-rör

Vi styra innehållet i en namngiven pipe i katt, så att katten kommer att visa innehållet i den andra terminal-fönstret. Här är det utgång:

Och du kommer att se att du har återvänt till kommandotolken i första terminal-fönstret.

Så, vad har hänt bara.

  • Vi omdirigeras lite utgång i den namngivna röret (named pipe.
  • Den första terminal-fönstret inte återgå till kommandotolken.
  • Uppgifterna var i röret tills det var att läsa från rör i den andra terminalen.
  • Vi var tillbaka till kommandotolken i första terminal-fönstret.

Du kanske tänker att du kan köra kommandot i den första terminal-fönster som bakgrund uppgift genom att lägga till ett & till slutet av kommandot. Och du skulle vara rätt. I så fall, vi skulle ha varit tillbaka till kommandotolken omedelbart.

De led av att inte använda bakgrund bearbetning var att belysa att en namngiven pipe är en blockering av processen. Att sätta något i en namngiven pipe bara öppnar ena änden av röret. Den andra änden är inte öppnas förrän den behandlingen program som extraherar data. Kärnan avbryter processen i första terminal-fönstret tills data läses från andra änden av röret.

Kraften av Rör

Numera heter rören är något av en nyhet agera.

Plain gamla Linux-rör, å andra sidan, är en av de mest användbara verktyg som du kan ha på din terminal window toolkit. Linux kommandorad börjar komma till liv för dig, och du får en helt ny power-up när du kan orkestrera en samling kommandon för att producera ett sammanhängande resultat.

Parting tips: Det är bäst att skriva din tranporteras kommandon genom att lägga till ett kommando på en gång och få den delen att arbeta, då rörsystem i nästa kommando.

LÄS NÄSTA

  • “Varför Har USB Behöva Vara Så Komplicerat?
  • “Vad Ska Du Göra Om Du Får en Phishing E-post?
  • “Varför Måste Du Logga In för att Din Hem-PC, Ändå?
  • “Den Bästa Nya Funktionerna i Android-10, Finns Nu
  • “Hur man Använder det chown Kommando på Linux