Se hai un server Linux, prima o poi ti trovi con un log da setacciare: centinaia di righe di testo, un errore nascosto, un IP da bloccare. Apri il file, premi Ctrl+F, scorri… e perdi tempo. I comandi che vediamo oggi sono la cassetta degli attrezzi di chi lavora su Linux ogni giorno. Noi, di Meteora Web, li usiamo per diagnosticare problemi di performance, pulire dati, automatizzare backup e analizzare log di applicazioni web. Se non li padroneggi, stai lavorando con una mano sola.
La potenza di una pipe: combinare comandi come mattoncini LEGO
Il vero superpotere di Linux non è un singolo comando, ma la possibilità di incatenarli. Il carattere | (pipe) prende l'output di un comando e lo passa come input al successivo. Sembra banale, ma è questa architettura che rende la shell uno strumento infinitamente estensibile.
Esempio base: trovare tutte le righe che contengono "ERROR" in un log e mostrarle a schermo.
cat /var/log/syslog | grep ERROR
Ma possiamo andare oltre: prendiamo l'output, lo filtriamo, lo trasformiamo e lo salviamo.
cat access.log | grep "404" | awk '{print $1}' | sort | uniq -c | sort -rn
Quest'unica riga estrae tutti gli IP che hanno generato errori 404, li conta e li ordina per frequenza. In pochi secondi hai una mappa dei problemi. Provate a farlo manualmente.
grep: cercare con intelligenza
grep è il coltellino svizzero della ricerca testuale. Non serve solo a trovare parole: supporta espressioni regolari, ricerca ricorsiva, inversione del match e contesto.
Le opzioni che usiamo ogni giorno
- -r: ricerca ricorsiva nelle directory
- -i: ignora maiuscole/minuscole
- -v: mostra le righe che non corrispondono
- -C 3: mostra 3 righe di contesto prima e dopo il match
- -E: estende le regex (uguale a
egrep)
Esempio pratico: cercare tutti i file PHP che contengono una funzione deprecata in un progetto Laravel.
grep -r --include="*.php" "mysql_query" /var/www/progetto/
Errore comune da evitare: usare grep su file binari senza l'opzione -a. Grep trattta i binari come non match e non dice nulla, lasciandoti credere che non ci sia nulla.
sed: trovare e sostituire senza aprire il file
sed è l'editor di flusso. Non modifica il file a meno che non glielo chiediamo esplicitamente. Lo usiamo per sostituzioni massive, rimozione di righe, pulizia di output.
La sostituzione base
sed 's/vecchio/nuovo/g' file.txt
Attenzione: senza -i, l'output va a schermo, il file resta intatto. Per modificare davvero il file: sed -i 's/.../.../g'.
Esempio reale: in un file di configurazione NGINX dobbiamo cambiare il nome del server da example.com a example.org.
sed -i 's/server_name example.com;/server_name example.org;/g' /etc/nginx/sites-available/sito.conf
Perché conviene: se devi aggiornare 50 file di configurazione, sed con una pipe e un ciclo ti evita ore di lavoro manuale.
awk: più di un comando, è un linguaggio
awk è nato per processare file strutturati in righe e colonne. Con pochi caratteri puoi estrarre campi, calcolare somme, filtrare per condizione.
Estrarre colonne
awk '{print $1, $NF}' file.log
Mostra il primo e l'ultimo campo di ogni riga. $NF è l'ultimo campo, $0 è l'intera riga.
Filtrare e sommare
Supponiamo un CSV di vendite: prodotto, quantità, prezzo. Vogliamo il totale delle vendite.
awk -F',' '{tot += $2 * $3} END {print "Totale:", tot}' vendite.csv
Noi di Meteora Web veniamo dalla contabilità: questa riga ci ricorda quando, prima di essere sviluppatori, facevamo manualmente i conteggi su fogli Excel. Oggi con awk facciamo lo stesso in un istante.
Esempio di debug: estrarre tutti gli IP unici da un access log e contarli.
awk '{print $1}' access.log | sort | uniq -c | sort -rn
find: cercare file come un detective
find non serve solo a trovare un file per nome. Usando le espressioni, puoi cercare per tipo, dimensione, data di modifica, permessi e poi eseguire azioni.
I filtri più utili
- -name: pattern del nome
- -type f / d: solo file o solo directory
- -size +100M: file più grandi di 100 MB
- -mtime -7: modificati negli ultimi 7 giorni
- -exec command {} \;: esegue un comando su ogni file trovato
Esempio: trovare e cancellare file temporanei più vecchi di 30 giorni.
find /tmp -type f -name "*.tmp" -mtime +30 -delete
Attenzione: testate sempre prima senza -delete per vedere cosa verrebbe rimosso. Aggiungete -ok invece di -exec per chiedere conferma.
Su un server di produzione, abbiamo trovato decine di GB di log compressi non ruotati. Un find con -size e -delete ha liberato spazio senza far ripartire nulla.
xargs: da input a argomenti
xargs trasforma l'input standard in argomenti per un altro comando. Risolve il problema dei troppi argomenti (quando superi il limite del kernel) e permette di parallelizzare.
Esempio: spostare tutti i file .log in una directory di archivio
find /var/log -name "*.log" -mtime +90 | xargs -I{} mv {} /backup/logs/
Opzioni chiave:
- -I{}: imposta un segnaposto per l'input
- -P 4: esegue fino a 4 processi in parallelo
- -n 1: passa un argomento per volta (utile con comandi che accettano un solo file)
Errore comune: non usare -0 quando l'input contiene spazi. Se i nomi file hanno spazi, usate find ... -print0 | xargs -0 ....
In sintesi — cosa fare adesso
- Apri il terminale e lancia
cat /var/log/syslog | grep -i error | head -20. Guarda cosa trovi. - Esercitati con sed: crea un file con 10 righe di testo, poi sostituisci una parola con
sed -i 's/.../.../g' file. - Usa awk per un report: prendi un file CSV di esempio e calcola la media di una colonna.
- Trova i file più grandi con
find / -type f -size +500M 2>/dev/null. Poi decidi cosa fare. - Combina tutto: scrivi una riga che trova tutti i file .conf modificati negli ultimi 7 giorni, estrae le righe contenenti "server_name", e scrive il risultato in un file.
Questi comandi sono il pane quotidiano di chi amministra server Linux. Noi li usiamo ogni giorno per mantenere in piedi siti e-commerce, piattaforme Laravel e infrastrutture di clienti. Se vuoi approfondire, la documentazione ufficiale GNU è il posto giusto: grep man, sed man, awk man.
Sponsored Protocol