Dopo aver esplorato insieme il contenuto del filesystem /proc, oggi parliamo di grep, uno dei comandi più potenti utilizzabili tramite terminale. Presente su tutti i sistemi Linux, ci permette di effettuare ricerche all’interno di file, applicando opportuni filtri. Faremo anche un piccolo accenno alle regex, che verranno trattate più approfonditamente in un’altra guida.
Grep ovvero general regular expression print
Oggi facciamo un nuovo piccolo passo in avanti nel mondo dell’amministrazione dei sistemi GNU/Linux, introducendo grep. Questo comando effettua una ricerca globale su un file tramite un sistema di filtri e ci mostra le corrispondenze. Lanciando da terminale il comando grep -h ci viene indicata la sintassi base di questo comando, ovvero grep [OPZIONE]… MODELLO [FILE]… Usarlo è quindi semplicissimo, ma cerchiamo di fare maggiore chiarezza attraverso un esempio. Utilizzerò il file auth.log, che possiamo trovare nel percorso /var/log/auth.log, poiché si presta benissimo all’occasione.
grep "invalid" /var/log/auth.log
Tramite questo comando, abbiamo detto al sistema di filtrare il file con la parola “invalid”. Come si nota, grep ci restituisce una stampa di tutte le corrispondenze che trova. Sono disponibili anche numerose opzioni, tra le principali ricordiamo:
• – i ignora le differenze tra le lettere maiuscole e minuscole;
• – m stampa le prime N corrispondenze;
• – r esegue la stampa in maniera ricorsiva anche nelle sottodirectory;
• – E permette di effettuare le ricerche tramite delle regex estese;
• – F permette di usare come modelli delle stringhe, da ricercare in maniera letterale. In questo caso risulta più immediato utilizzare direttamente il comando fgrep, come riportato nello screenshot.
Grep e le regex
Uno dei modi più efficaci di utilizzare Grep consiste nell’aumentare la complessità delle espressioni regolari utilizzate. Le regex sono un insieme di caratteri e operatori la cui combinazione inserita in grep permette di aumentare la complessità delle ricerche. Facciamo ora un esempio banale, rimandando al manuale (man 7 regex) per una spiegazione più dettagliata. Iniziamo con il generare un file di esempio e stampiamolo a video:
base64 /dev/urandom | head -c 1000 > file.txt cat file.txt
Come si nota abbiamo una serie di lettere e numeri, possiamo usare una regex insieme a Grep per visualizzare, ad esempio, solo le combinazioni dei numeri compresi nell’intervallo chiuso [0,9], composte da 2 cifre: grep -E ‘[0-9]{2}’ file.txt. In questo caso la regex utilizzata è ‘[0-9]{5}’ che risulta essere anche abbastanza intuitiva!
Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.