Rør: hva du trenger å vite for å begynne å bruke dem i GNU / Linux

rørledninger

en rør eller pipe er faktisk en rørledning tilgjengelig for UNIX / Linux og veldig praktisk. Men for å forstå hva et rør er, bør du vite at det i et * nix-miljø har 3 innebygde datastrømmer. Det, for de som ikke vet, betyr at dataene kan reise til eller fra tre punkter.

Da vil du forstå dette på en bedre måte, men det jeg vil gjøre klart for deg nå, er at du med en rørledning kan kanalisere fra et av disse punktene til andre. Dette gjør det mulig å ta utdataene eller resultatet som et program kaster mot inngangen til et annet som den skal bruke, etc. Jeg vil prøve å forklare det med noen praktiske eksempler som vil hjelpe deg å forstå det veldig bra.

De punktene jeg snakket om eller datastrømmer, er:

  • stdin: tilsvarer 0 og er standardinngangen. Vanligvis er standardinngangen for et * nix-system tastaturet. Det vil si at det du skriver, vil være informasjonen som brukes. Hun har en spesiell enhet tilknyttet som er / dev / stdin.
  • stdout: identifisert med 1, er det standardutgangen. Vanligvis tilsvarer det skjermen eller skjermen på datamaskinen din, det er der du kan se informasjonen. For eksempel, når du kjører en ls-kommando, vises innholdsfortegnelsen på skjermen, ikke sant? Den tilknyttede enheten er / dev / stdout.
  • stderr: identifisert med 2, er det standard feilutdata for når en feil oppstår i et program. Den tilknyttede enheten er / dev / stderr.

Med en rørledning kan du få standard utgang eller stdout for en kommando til å gå direkte til standardinngangen til en annen. Det vil si at du kan få ett program til å mate det andre. I stedet for å bruke parametere som er tastet inn, leverer et rør informasjonen generert av forrige kommando gjennom denne rørledningen representert av |

med eksemplene du vil forstå det bedre. Anta at du vil liste innholdet i en katalog, men at du bare er interessert i å se navnene som samsvarer med ordet doc. Så du kan bruke en rørledning til å føre utgangen til ls inn i inngangen til grep-filteret for å fortelle at den bare skal vise de som samsvarer med det mønsteret:

ls -l | grep doc

Så i stedet for å vise deg alle navnene, viser det deg bare de som virkelig interesserer deg. Du kan gjøre det samme med innholdet i en fil. Tenk deg at du bare vil se informasjonen om prosessene som heter firefox og ikke alle:

ps aux | grep firefox

I stedet for å vise all utgangen fra ps-programmet på skjermen (stdout), kan det kanalisere det mot inngangen til grep-filteret og viser bare i utgangen hva som tilsvarer firefox-mønsteret i dette tilfellet ...

Hvis du vil, kan du bruke forskjellige rør for å bringe utgangen fra en kommando til inngangen til en annen kommando, og utgangen fra den andre til inngangen til en tredje, og så videre. For eksempel:

cat libro | grep love | more

Som du ser, mulighetene er mange, alt du kan forestille deg og har lov. Vis til og med bare de første og siste linjene i en fil, tell linjene som kommer inn i wc som kommer fra listen, og til og med sorter dem:

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

Du kan også jobbe med feil med | & og for eksempel se etter ordvarselet i utgangen av et skript hvis det mislykkes:

./miscript |& grep alerta 

Og til slutt er det to kommandoer nært knyttet til rørene som er tee og xargs og at de ytterligere kan utvide mulighetene for disse. Når det gjelder tee, er det det som er mulig å vise resultatet av det forrige programmet på standardutgangen slik at du kan se det, og i tillegg til det kan det pipe det til en annen fil. Et eksempel kan være hvis du lister opp innholdet i en katalog og vil se utdataene fra ls -l for øyeblikket og også ha det lagret i en filliste.txt:

ls -l | tee listado.txt

Hvis du ikke bruker tee, vil du ikke kunne se utdataene på konsollen din ...

Y xargs det er enda mer interessant i noen tilfeller. I dette tilfellet er det i stand til å bygge en kommando fra standardinngangen den mottar gjennom rørledningen. Med andre ord er den i stand til å fange opp alt som et tidligere program har lansert gjennom utdataene, og som når xargs gjennom rørledningen for å overføre det til en annen kommando som argumenter.

Forstår du det fortsatt ikke? Du vil se det mye bedre med et eksempel. Tenk deg at du vil fjerne alle de jævla thumbs.db-filene fra en katalog, disk eller partisjon. Hvis det er mange, kan det være umulig å gå en etter en med rm-kommandoen for å slette dem manuelt. Men med xargs kan du automatisere alt. Og du kan gjøre det ved å finne for å finne dem, sende utdata gjennom inngangen til xargs, og dette vil igjen gi rm navnene som argumenter. Derfor vil alle lokaliserte slettes automatisk:

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

Anta for eksempel at finn finner /home/name/thumbs.db, /media/test/thumbs.db og /tmp/thumbs.db. Vel, xargs kommer til å levere dem til rm som om de var argumenter. Det vil si som om vi hadde utført: rm /home/name/thumbs.db, deretter rm /media/test/thumbs.db og deretter rm /tmp/thumbs.db.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: AB Internet Networks 2008 SL
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Jose sa

    Utmerket, denne informasjonen er veldig viktig for oss linux-brukere

  2.   Daniel sa

    For en god artikkel, akkurat nå som jeg studerer I / O-omdirigering i Linux Command Line-boken. Det er tydeligere for meg om rørene (rørledningen) og de tre datastrømmene. Bidraget blir satt pris på. Hilsener.

  3.   01101001b sa

    Eksemplet med xargs passet meg som en hanske. Akkurat i dag hadde jeg å gjøre med detaljene om en flerutgang som jeg måtte sende "i deler." xargs gikk en pinturita.
    Super takknemlig!