2 minuto/i di lettura

TLDR: l’operatore |: serve a concatenare l’output di un comando con l’input di un altro.

Il piping in Linux è una tecnica che permette di collegare l’output di un comando all’input di un altro comando, usando il carattere | (pipe). In altre parole, il piping ti consente di passare i dati prodotti da un comando direttamente a un altro, senza doverli salvare in file intermedi.

Come funziona il piping

In Linux, molti comandi producono un output standard (solitamente visualizzato nel terminale) e possono accettare un input standard (solitamente fornito dalla tastiera o da un file). Con il pipe (|), l’output di un comando viene inviato direttamente come input a un altro comando. Questo ti permette di concatenare comandi per realizzare operazioni complesse in modo semplice ed efficiente.

Sintassi

La sintassi generale del pipe è:

comando1 | comando2

Qui, l’output di comando1 diventa l’input di comando2. Puoi collegare più comandi usando più pipe, come:

comando1 | comando2 | comando3

Esempi pratici

  1. Trova i file e contali:

    Supponiamo di voler cercare tutti i file in una directory e contare quanti ce ne sono. Usa ls per elencare i file e wc -l per contarli:

    ls | wc -l
    

    Qui:

    • ls elenca i file.
    • wc -l conta le righe dell’output di ls (quante righe = quanti file).
  2. Trova un file specifico:

    Supponiamo di voler cercare file che contengono la parola “report” nel nome. Usa ls per elencare i file e grep per cercare “report”:

    ls | grep report
    

    Qui:

    • ls elenca i file.
    • grep report filtra l’elenco, mostrando solo i file che contengono “report”.
  3. Visualizzare i processi e filtrare:

    Puoi elencare i processi attivi e cercare un processo specifico. Ad esempio, per trovare processi che includono la parola “bash”:

    ps aux | grep bash
    

    Qui:

    • ps aux elenca tutti i processi in esecuzione.
    • grep bash filtra l’output mostrando solo le righe che contengono “bash”.
  4. Ordinare l’output di un comando:

    Se vuoi elencare i file in una directory, ordinarli per nome e poi vedere i primi 5, puoi usare:

    ls | sort | head -n 5
    

    Qui:

    • ls elenca i file.
    • sort ordina l’elenco alfabeticamente.
    • head -n 5 mostra solo i primi 5 risultati.

Piping e File

Il piping non crea file temporanei, quindi è più efficiente rispetto all’uso di file intermedi. Ad esempio, invece di fare:

comando1 > output.txt
comando2 < output.txt

Puoi semplicemente fare:

comando1 | comando2

Piping con più comandi

Puoi concatenare più comandi insieme, per eseguire operazioni complesse in un’unica riga. Ecco un esempio più avanzato:

cat file.txt | grep "error" | sort | uniq | wc -l

Qui:

  • cat file.txt stampa il contenuto di file.txt.
  • grep "error" cerca solo le righe che contengono “error”.
  • sort ordina le righe risultanti.
  • uniq rimuove le righe duplicate.
  • wc -l conta quante righe uniche contengono “error”.

Perché usare il piping?

  • Efficienza: Evita la necessità di creare file temporanei.
  • Concatenazione di operazioni: Ti consente di eseguire diverse operazioni su un flusso di dati senza interrompere il processo.
  • Flessibilità: La maggior parte dei comandi in Linux supporta l’input e l’output standard, rendendo il piping estremamente versatile.

In sintesi, il piping è uno strumento potente che rende il terminale Linux uno strumento di lavoro estremamente efficiente, permettendo di collegare comandi e ottenere flussi di lavoro complessi in modo semplice e modulare.