Rör: vad du behöver veta för att börja använda dem i GNU / Linux

rörledningar

en rör eller pipe är faktiskt en pipeline tillgänglig för UNIX / Linux och mycket praktisk. Men för att helt förstå vad ett rör är bör du veta att det i en * nix-miljö har 3 inbyggda dataströmmar. För de som inte vet betyder det att uppgifterna kan resa till eller från tre punkter.

Då kommer du att förstå detta på ett bättre sätt, men det jag vill göra klart för dig nu är att du med en pipeline kan kanalisera från en av dessa punkter till andra. Detta gör det möjligt att ta utmatningen eller resultatet som ett program kastar mot inmatningen från en annan för att den ska använda etc. Jag kommer att försöka förklara det med några praktiska exempel som hjälper dig att förstå det mycket bra.

De punkter jag pratade om eller dataströmmar, är:

  • stdin: motsvarar 0 och är standardingången. Generellt är standardingången för ett * nix-system tangentbordet. Det vill säga, vad du skriver kommer att vara den information som används. Hon har en speciell enhet associerad med den som är / dev / stdin.
  • stdout: identifierad med 1, det är standardutgången. Vanligtvis motsvarar det datorns bildskärm eller skärm, där du kan se informationen. Till exempel när du kör ett ls-kommando kommer innehållsförteckningen att visas på skärmen, eller hur? Den tillhörande enheten är / dev / stdout.
  • stderr: identifieras med 2, det är standardfelutgången, för när ett fel uppstår i ett program. Den tillhörande enheten är / dev / stderr.

Med en pipeline kan du få standardutmatningen eller stdout för ett kommando att passera direkt till en ingångs standardingång. Det vill säga, du kan få ett program att mata ett annat. I stället för att använda parametrar som matats in på tangentbordet levererar ett rör den information som genererats av det tidigare kommandot genom denna pipeline representerad av |

med exemplen du kommer att förstå det bättre. Antag att du vill lista innehållet i en katalog, men att du bara är intresserad av att se namnen som matchar ordet doc. Så du kan använda en pipeline för att leda utdata från ls till ingången till grep-filtret för att berätta att den bara ska visa de som matchar det mönstret:

ls -l | grep doc

Så istället för att visa dig alla namn, visar det dig bara de som verkligen intresserar dig. Du kan göra detsamma med innehållet i en fil. Tänk dig att du bara vill se informationen om de processer som heter firefox och inte alla:

ps aux | grep firefox

Istället för att visa alla utdata från ps-programmet på skärmen (stdout), kanaliserar det det mot ingången till grep-filtret och visar bara i utgången vad som motsvarar firefox-mönstret i det här fallet ...

Om du vill kan du använda olika rör att föra utgången från ett kommando till ingången till ett annat andra kommando, och utgången från den andra till ingången till ett tredje, och så vidare. Till exempel:

cat libro | grep love | more

Som ni ser, möjligheterna är många, allt du kan föreställa dig och är tillåtet. Visa till och med bara de första och sista raderna i en fil, räkna raderna som kommer in i wc som kommer från listan och till och med sortera dem:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

Du kan också arbeta med fel med | & och leta till exempel efter ordvarningen i utskriften av ett skript om det misslyckas:

./miscript |& grep alerta 

Och slutligen finns det två kommandon som är nära kopplade till rören tee och xargs och att de ytterligare kan utöka möjligheterna för dessa. När det gäller tee är det vad det tillåter att visa resultatet av det tidigare programmet på standardutmatningen så att du kan se det, och förutom det kan det leda till en annan fil. Ett exempel kan vara om du listar innehållet i en katalog och vill se utdata från ls -l för tillfället och också spara det i en fillista.txt:

ls -l | tee listado.txt

Om du inte använder tee kan du inte se utdata på konsolen ...

Y xargs det är ännu mer intressant i vissa fall. I det här fallet kan den bygga ett kommando från den standardingång som den tar emot via rörledningen. Med andra ord är det kapabelt att fånga allt som ett tidigare program har lanserat genom dess utdata och som når xargs genom rörledningen för att vidarebefordra det till ett annat kommando som argument.

Förstår du det fortfarande inte? Du kommer att se det mycket bättre med ett exempel. Tänk dig att du vill ta bort alla jävla thumbs.db-filer från en katalog, disk eller partition. Om det finns många kan det vara omöjligt att gå en efter en med rm-kommandot för att radera dem manuellt. Men med xargs kan du automatisera allt. Och du kan göra det med hjälp av hitta för att lokalisera dem, skicka utdata genom inmatningen av xargs och detta i sin tur ger rm namnen som argument. Därför raderas alla lokaliserade automatiskt:

find ./ -name "thumbs.db" | xargs rm

Antag till exempel att hitta lokaliserar /home/name/thumbs.db, /media/test/thumbs.db och /tmp/thumbs.db. Tja, xargs kommer att leverera dem till rm som om de vore argument. Det vill säga som om vi hade kört: rm /home/name/thumbs.db, sedan rm /media/test/thumbs.db och sedan rm /tmp/thumbs.db.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för data: AB Internet Networks 2008 SL
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Jose sade

    Utmärkt, denna information är mycket viktig för oss Linux-användare

  2.   Daniel sade

    Vilken bra artikel just nu när jag studerar I / O-omdirigering i Linux Command Line-boken. Det är tydligare för mig om rören (Pipeline) och de tre dataströmmarna. Bidraget uppskattas. Hälsningar.

  3.   01101001b sade

    Exemplet med xargs passade mig som en handske. Exakt idag hade jag att göra med detaljerna om en multipelutgång som jag var tvungen att skicka "i delar". xargs gick en pinturita.
    Super tacksam!