Canonades: el que cal saber per començar a usar-les en GNU / Linux

canonades

Una canonada o pipi és en realitat una canalització disponible per a UNIX / Linux i que resulta d'allò més pràctic. Però per entendre bé el que és una canonada, has de saber que en un entorn * nix té 3 corrents predefinit de dades. Això, per al qual no ho sàpiga, vol dir que les dades poden viatjar cap o des de tres punts.

Després entendràs això d'una millor manera, Però el que vull que et quedi clar ara és que amb una canonada el que pots fer és canalitzar d'un d'aquests punts a uns altres. Això permet portar la sortida o resultat que llança un programa cap a l'entrada d'un altre perquè aquest la faci servir, etc. Intentaré explicar-ho amb uns exemples pràctics que t'ajudaran a entendre-ho molt bé.

Aquests punts dels que parlava o streams de dades, Són:

  • stdin: Es correspon amb el 0 i és l'entrada estàndard. En general, l'entrada de dades estàndard en un sistema * nix és el teclat. És a dir, el que tecleges serà la informació usada. Ella té un dispositiu especial associat que és / dev / stdin.
  • stdout: Identificat amb 1, és la sortiu estàndard. En general es correspon amb el monitor o pantalla del teu equip, que és on pots veure la informació. Per exemple, quan executes una ordre ls el llistat de contingut es mostrarà a la pantalla oi? El dispositiu associat és / dev / stdout.
  • stderr: Identificada amb 2, és la sortida estàndard d'error, per quan succeeix algun error en algun programa. El dispositiu associat és / dev / stderr.

Amb una canonada pots fer que la sortida estàndard o stdout d'un comando pugui passar directament a l'entrada estàndard d'un altre. És a dir, pots fer que un programa alimenti a un altre. En comptes d'usar paràmetres introduïts pel teclat, amb una pipe se li lliura la informació generada per la comanda previ mitjançant aquesta canalització representada amb el símbol |

Amb els exemples ho entendràs millor. Imagina que vols llistar el contingut d'un directori, però que només t'interessa veure els noms que coincideixin amb la paraula doc. Llavors podria utilitzar una canonada per canalitzar la sortida de ls i portar-la a l'entrada de l'filtre grep per dir-li que només mostri els que coincideixin amb aquest patró:

ls -l | grep doc

Així, en comptes de mostrar-te tots els noms, només et mostra els que realment t'interessen. Igual pots fer amb el contingut d'un arxiu. Imagina que només vols veure la informació dels processos amb nom firefox i no tots:

ps aux | grep firefox

En comptes de mostrar tota la sortida d'el programa ps en pantalla (stdout), el que fa és canalitzar cap a l'entrada de l'filtre grep i només mostra a la sortida el que es correspon amb el patró firefox en aquest cas ...

Si vols, pots fer servir diverses canonades per portar la sortida d'una ordre a l'entrada d'un altre segon comando, i la sortida d'aquest segon cap a l'entrada d'un tercer i així successivament. Per exemple:

cat libro | grep love | more

Com veus, les possibilitats són moltes, Totes les que t'imaginis i estiguin permeses. Fins i tot mostrar només les primeres, les últimes línies d'un fitxer, comptar les línies que el entren a wc que provenen de la llista, i fins i tot ordenar-:

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

També pots treballar amb els errors amb | & i per exemple buscar la paraula alerta a la sortida d'un script si falla:

./miscript |& grep alerta 

I finalment, hi ha dos ordres molt lligats a les canonades que són tee i xargs i que poden estendre encara més les possibilitats d'aquestes. En el cas de tee el que permetrà és mostrar el resultat de el programa previ a la sortida estàndard perquè el puguis veure, ia més d'això, el pot canalitzar cap a un altre arxiu. Un exemple seria si llistes el contingut d'un directori i vols veure la sortida de ls -l en el moment i també que es guardi en un arxiu listado.txt:

ls -l | tee listado.txt

De no fer servir tee no podries veure el resultat a la sortida en la teva consola ...

Y xargs és encara més interessant en alguns casos. En aquest cas és capaç de construir una ordre a partir de l'entrada estàndard que rep a través de la canonada. Dit d'una altra manera, és capaç de captar tot el que un programa previ ha llançat per la seva sortida i que arriba a xargs a través de la canonada per passar-s'ho al seu torn a un altre ordre com arguments.

Encara no ho captes? El veuràs molt millor amb un exemple. Imagina't que vols eliminar tots els maleïts arxius Thumbs.db d'un directori, disc o partició. Si n'hi ha molts, és possible que sigui impossible anar un a un amb la comanda rm per esborrar manualment. Però amb xargs es pot automatitzar tot. I ho pots fer usant find per localitzar-los, enviar la sortida a través l'entrada de xargs i aquest al seu torn li anirà lliurant als rm els noms com arguments. Per tant, s'esborraran tots els localitzats automàticament:

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

Per exemple, imagina que find localitza /home/nombre/thumbs.db, /media/prueba/thumbs.db i /tmp/thumbs.db. Doncs xargs els va lliurar a rm com si fossin arguments. És a dir, com si haguéssim executat: rm /home/nombre/thumbs.db, després rm /media/prueba/thumbs.db i després rm /tmp/thumbs.db.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Jose va dir

    Excel·lent, aquesta informació és molt important per a nosaltres els usuari de linux

  2.   Daniel va dir

    Que bon article, just ara que estic estudiant redireccionament I / O en el llibre The Linux Command Line. Em queda més clar el de les canonades (Pipeline) i les tres corrents de dades. S'agraeix l'aportació. Salutacions.

  3.   01101001b va dir

    L'exemple amb xargs em va venir com anell a el dit. Exactament avui estava bregant amb el detallet aquest d'una sortida múltiple q havia de manar «de a parts». xargs caminar una pinturita.
    Súper agraït!