LIVE · blog.craftbytes.it session / 042 · issue IT · EN · edizione bilingue
bash / 7 lug 2026 / 2 min lettura

5 comandi bash che uso ogni settimana per il supporto IT (Linux e macOS)

Cinque comandi bash che apro ogni settimana nel terminale per il supporto IT: sed, awk, find, date e le differenze tra GNU e BSD che fanno impazzire chi lavora sia su Linux che su macOS.

5 comandi bash che uso ogni settimana per il supporto IT (Linux e macOS)
terminal

Faccio assistenza IT su ambienti misti: server Linux in produzione, Mac dei colleghi, VM ovunque. Ogni tanto lancio un comando su macOS pensando che si comporti come su Linux, e non è così. macOS usa i tool BSD, Linux i tool GNU. Stessa sintassi, comportamento diverso. Ecco i 5 comandi che uso più spesso, con la differenza da conoscere per non perdere tempo a debuggare l'ovvio.

1. Trovare chi occupa una porta

# Linux
sudo ss -tulpn | grep :443

# macOS (ss non esiste)
sudo lsof -iTCP:443 -sTCP:LISTEN

Su Linux ss ha sostituito netstat da anni, su macOS non c'è: lsof fa lo stesso lavoro con sintassi diversa. Se lavori su entrambi, vale la pena tenere a mente entrambe le forme invece di cercarle ogni volta.

2. Sostituire testo in un file al volo

# Linux (GNU sed)
sed -i 's/vecchio/nuovo/g' config.yml

# macOS (BSD sed, richiede un argomento per il backup)
sed -i '.bak' 's/vecchio/nuovo/g' config.yml

Questo è quello che mi ha fatto perdere più tempo in assoluto. Su BSD sed -i senza argomento restituisce un errore criptico, o peggio, se sbagli sintassi, ti sovrascrive il file con un backup dal nome strano. La forma sed -i.bak (senza spazio tra i due) funziona su entrambi i sistemi ed è quella che ormai scrivo di default.

3. Data e ora con offset

# Linux (GNU date)
date -d "+1 day" "+%Y-%m-%d"

# macOS (BSD date)
date -v+1d "+%Y-%m-%d"

Utile per script di retention, pulizia log, scadenze certificati. Le flag sono completamente diverse: -d su Linux prende una stringa descrittiva, -v su macOS vuole un formato tipo +1d, -2H, +30M. Se scrivi script cross-platform, spesso conviene installare coreutils via Homebrew su Mac (brew install coreutils) e usare gdate per avere la sintassi GNU anche lì.

4. Cercare file per profondità

# Funziona identico su entrambi
find . -maxdepth 1 -type f -name "*.log"

Qui la trappola è al contrario: -maxdepth funziona uguale su Linux e macOS, ma -d (usato per "depth-first" in entrambi) non va confuso con -maxdepth. Se lo scrivi per sbagliare, find ti risponde con un errore poco chiaro tipo "paths must precede expression". Un errore che ho visto fare (e fatto) più di una volta scrivendo troppo in fretta.

5. Editing in-place con awk

# Linux (GNU awk 4.1.0+)
awk -i inplace '{ print toupper($0) }' file.txt

# macOS (BSD awk, niente -i inplace)
awk '{ print toupper($0) }' file.txt > tmp && mv tmp file.txt

awk -i inplace esiste solo su GNU awk recente. Su macOS l'awk di sistema è più datato e non lo supporta: la soluzione più portabile resta il vecchio trucco del file temporaneo, che funziona ovunque senza dipendere dalla versione installata.


La lezione generale: se scrivi script che devono girare sia su server Linux che su Mac dei colleghi, o installi coreutils/gnu-sed/gawk via Homebrew per avere un comportamento uniforme, oppure testi esplicitamente su entrambi prima di fidarti. "Funziona sul mio Mac" non vuol dire "funziona in produzione".

Se lavori su server Linux e vuoi portare questi strumenti in un ambiente containerizzato, leggi Docker in produzione per sysadmin: Compose, volumi e restart policy spiegati per chi già conosce il terminale.

// condividi x.com ↗ linkedin ↗ hn ↗ email ↗
// newsletter · /dev/subscribe

Dispatches from the rack.

Un'email ogni due settimane: un articolo, uno schema, un comando da ricordare. Niente pubblicità, niente hype.