Giocare allegramente con gli output e gli input della shell

Due tips per coloro che si sono avvicinati da poco tempo al sistema operativo GNU/Linux ed ancora non conoscono le meraviglie della shell

La shell di un computer equipaggiato con GNU/Linux è uno strumento potentissimo che non si ferma soltanto all’esecuzione di script o di programmi che non hanno ancora una interfaccia grafica, essa è molto di più di tutto questo, è uno strumento di manipolazione e concatenazione degli output davvero sorprendente che può stupire un’utente alle prime armi.

Per comprendere in pieno la potenzialità del mezzo è necessario avere delle nozioni di base sul funzionamento di un sistema operativo Unix like, informazioni che potrete trovare tranquillamente in rete, per tutto il resto serve solo voglia di imparare e qualche delucidazione che ho intenzione di dare in questo post.

1) Pipeline

Le pipeline sono una delle cose più utili che potrete trovare quando lavorate in console, immaginate un tubo che trasporta le vostre informazioni ed ora pensate allo schermo del vostro pc come ad una fontanella dalla quale sgorgano le stesse.

La situazione che avete è quindi di un comando che trasporta attraverso il tubo le info da voi richieste fino al loro arrivo sul vostro monitor ovvero la fontanella, ora cosa succede se questo tubo lo colleghiamo al serbatoio di una seconda fontanella?

Le informazioni che esso trasporta diventeranno il liquido che alimenta la seconda conduttura che restituirà una informazione diversa partendo dai dati che avete appena fornito redirezionando il flusso precedente.

Se non avete capito una mazza di quello che ho appena scritto vi capisco, anche io rileggendo ho alcuni dubbi, ma è tutto più semplice di quello che crediate, pipeline ci permette di reindirizzare lo standard output (stdout) di un comando in modo da farlo divenire lo standard input (stdin) di un secondo comando riportato sulla stessa catena di esecuzione, un esempio chiarirà i dubbi rimanenti.

1
cat $hello1 $hello2 | grep salve

In questo caso il comando cat si incarica di mostrare il contenuto dei file hello1 ed hello2 e quindi di fornire attraverso la | (pipe) il risultato al comando grep che cercherà nel l’output di cat la parola salve.

Le concatenazioni di questo tipo non hanno una dimensione massima e ben si adattano ad un uso snello e vantaggioso del sistema visto che si evitano sessioni estenuanti di scrittura dei dati nel terminale.

Solitamente si hanno a che fare con pipeline che prevedono molti passaggi, è possibile schematizzare questi comandi per ottenere uno schema a blocchi chiaro e sufficientemente esplicativo:

pipeline.gif

2) Reindirizzamento con >, >> e <<, <

Il funzionamento di questo comando è più o meno simile ma alcune differenze concettuali lo rendono idoneo ad un uso diverso da quello previsto dalle pipeline.

Se prima eravamo in grado di generare un input da un precedente output in questo caso siamo capaci di scrivere l’output all’interno di un file, di una cartella o di reindirizzarlo verso una periferica del sistema stesso come ad esempio nel caso della lettura di un file che può essere indirizzata verso la scheda audio per generare un flusso sonoro.

E’ importante in questo caso valutare bene i permessi necessari per la scrittura di un eventuale file o per l’utilizzo di una periferica, ammettendo di avere un file di testo dove all’interno siano riportati nomi di 4 città, come ad esempio Milano, Torino, Napoli e Roma, potremmo usare il reindirizzamento per cercare all’interno del file con grep e scrivere il risultato della ricerca in un secondo file chiamato risultato.
La sintassi è semplicissima, per prima cosa creiamo il file con la sintassi:

1
nano citta.txt

inseriamo le città desiderate e salviamo il file con la combinazione ctrl+o ed invio, usciamo da nano e proviamo il nostro reindirizzamento così:

1
grep Milano citta.txt >> risultato.txt

a questo punto, aprendo il file risultato.txt, dovremmo avere scritta al suo interno Milano.

Ci sono milioni di possibilità per questo tipo di comandi, infinite opzioni e la sola vostra fantasia a limitarvi.

Questo post non vuole avere lo scopo di darvi una visione completa di queste tecniche, visto che ho riportato solo due di più comuni comandi, ma piuttosto scatenare curiosità a coloro che da poco hanno iniziato ad usare GNU/Linux e che poco sono avvezzi al terminale, sappiate che quella piccola finestra è forse il punto di forza maggiore di una distro GNU/Linux.

Ciao a tutti.



1 commento presente

  1. Ubuntu block notes giugno 21, 2009 11:43

    Cambiare i permessi a file e directory ricorsivamente…

    Con l’operazione effettuata ieri, ho guadagnato un sacco di spazio dove poter mettere una serie complessa (ma rigorosamente ordinata) di directory e file. Questa serie l’ho prelevata da un vecchio backup su un disco fisso esterno e tutti i …

Lascia un commento

Rispetta le regole del blog. La tua e-mail non verrà pubblicata.