Linux: piping di comandi
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
-
Trova i file e contali:
Supponiamo di voler cercare tutti i file in una directory e contare quanti ce ne sono. Usa
lsper elencare i file ewc -lper contarli:ls | wc -lQui:
lselenca i file.wc -lconta le righe dell’output dils(quante righe = quanti file).
-
Trova un file specifico:
Supponiamo di voler cercare file che contengono la parola “report” nel nome. Usa
lsper elencare i file egrepper cercare “report”:ls | grep reportQui:
lselenca i file.grep reportfiltra l’elenco, mostrando solo i file che contengono “report”.
-
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 bashQui:
ps auxelenca tutti i processi in esecuzione.grep bashfiltra l’output mostrando solo le righe che contengono “bash”.
-
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 5Qui:
lselenca i file.sortordina l’elenco alfabeticamente.head -n 5mostra 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.txtstampa il contenuto difile.txt.grep "error"cerca solo le righe che contengono “error”.sortordina le righe risultanti.uniqrimuove le righe duplicate.wc -lconta 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.