Petites grans eines que treballant juntes són formidables (i no parlo de futbol)

A l’hora de fer operacions amb paquets de programari a vegades se’ns presenta el problema d’haver d’operar amb bastants paquets de manera simultània, però entre ells no tenen dependències obligades, amb el qual esborrant-ne un, per exemple, no s’esborraria la resta.
En casos com aquest podem emprar certes eines de terminal, de les que fa com vint o trenta anys que existeixen.

Suposem (recordeu que aquest apunt intenta ser didàctic, no especialment fidedigne amb el cas presentat), que volem esborrar tots els paquets que tenen openoffice a algun lloc del nom i, evidentment, són instal·lats. Aquí farem treballar tres eines, en quatre ordres combinades a una sola final.

Les eines són:

* aptitude: http://ca.wikipedia.org/wiki/Aptitude
* grep: http://es.wikipedia.org/wiki/Grep
* awk: http://ca.wikipedia.org/wiki/Awk

i les ordres on s’utilitzen:

* aptitude remove
* aptitude search openoffice
* grep ^i
* awk ‘{ print $2 }’

Què fa cadascuna per separat?

aptitude remove Aquesta ordre esborrarà l’executable (però no els fitxers de configuració, d’existir) que hi posem darrera.

Per exemple:

aptitude remove pidgin

esborraria el Pidgin i totes els paquets que depenguin d’aquest, que no puguin funcionar, o no tingui sentit que siguin instal·lats sense ell.

aptitude search openoffice Aquesta busca a la base de dades de paquets, indiferentment de si són instal·lats o no, tots els que continguin openoffice al nom.

grep ^i Amb aquesta filtrem totes les cadenes que comencin per i (el símbol ^ aquí significa “a l’inici”).

awk ‘{ print $2 }’ Amb aquesta imprimim (print) la segona columna ($2) de les cadenes que rebi la ordre awk.

Com treballen plegades?

Amb la “super” ordre:

aptitude remove `aptitude search openoffice | grep ^i | awk ‘{ print $2 }’`

Per analitzar-la hem de començar dins dels accents tancats (atenció: no són apòstrofs!) per aptitude search openoffice. Aquesta ordre produirà un resultat com aquest (més llarg, però l’escurço per a no fer-ho massa llarg):


p openoffice.org-thesaurus-de - German Thesaurus for OpenOffice.org
p openoffice.org-thesaurus-de-ch - German Thesaurus for OpenOffice.org (Swiss Version)
i openoffice.org-thesaurus-en-au - Australian English Thesaurus for OpenOffice.org
v openoffice.org-thesaurus-en-gb -
i openoffice.org-thesaurus-en-us - English Thesaurus for OpenOffice.org
p openoffice.org-thesaurus-hu - Hungarian Thesaurus for OpenOffice.org
p openoffice.org-thesaurus-it - Italian Thesaurus for OpenOffice.org 2
p openoffice.org-thesaurus-ne - Nepali Thesaurus for OpenOffice.org
p openoffice.org-thesaurus-pl - Polish Thesaurus for OpenOffice.org

Aquest llistat el passem a la següent part de l’ordre, grep ^i, a fi de que en filtri només les línies que comencen per i. La resta les desestima. El passem amb la canonada (pipe) que es representa amb el símbol | de la barra vertical (combinació AltGr+1). Aquesta part del procés no la veiem, s’executa en memòria, amagadeta de nosaltres.

Així doncs, el grep, encara que no ho veiem, reté en memòria el següent llistat:


i openoffice.org-thesaurus-en-au - Australian English Thesaurus for OpenOffice.org
i openoffice.org-thesaurus-en-us - English Thesaurus for OpenOffice.org

Aquest és el que passem a la següent ordre, awk ‘{ print $2 }, com? igual que abans, amb la canonada ( | ) que hi ha entre les dues ordres. Aixo tampoc ho veiem, encara.

Així doncs, l’awk, agafarà la segona columna del que li hem passat (el llistat anterior). Considerant que si no se li especifica res, l’awk assumeix que el separador de columnes és l’espai, agafarà això:


openoffice.org-thesaurus-en-au
openoffice.org-thesaurus-en-us

Ara “només” ens queda passar-li això, la llista de paquets amb la que volem operar, a la ordre que queda per intervenir: aptitude remove, fora dels accents tancats.

I això com ho fem, tambe amb una canonada? Doncs en aquest cas no. Aprofitem una funcionalitat de l’intérpret d’ordres que és la de substituïr una cadena pel valor que representa, no pel seu literal.
M’explico: oi que amb tot el procés del que hi ha a aptitude search openoffice | grep ^i | awk ‘{ print $2 } ha resultat que n’obteníem el nom de dos paquets? Doncs el fet de que l’aptitude remove es trobi una cadena de text entre dos accents tancats (“), fa que només vegi el valor que representen, el nom dels dos paquets (o dels que resultin de l’operació), no la cadena en sí “aptitude search, etc, etc.”

Així doncs, a la pràctica, la “super ordre” equival a un simple: aptitude remove openoffice.org-thesaurus-en-us openoffice.org-thesaurus-en-au, però sense haver de posar nosaltres els paquets, siguin dos, siguin quaranta. Genial, oi? 🙂

No tingueu por a l’intérpret d’ordres, no és màgia, és com tot a la vida, pràctica. Aviso, un cop en comenceu a aprendre no podreu parar 😀

Be Sociable, Share!
Aquesta entrada va ser publicada en General i etiquetada com , . Guardar l'enllaç permanent. Afegeix un comentari o deixa un trackback: URL del Trackback.

Publicar un comentari

El teu email mai serà publicat ni compartit. Els camps obligatoris estan marcats amb un *

Pots utilitzar aquestes etiquetes i atributs HTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
*