Se lavori quotidianamente su Windows ma sei abituato alla potenza e alla flessibilità della shell Linux, conosci bene la sensazione: apri il terminale, digiti un comando classico come ls -la, grep o head, e ti scontri con alias di PowerShell non del tutto compatibili o messaggi di errore.
Fino a poco tempo fa le alternative principali erano due: installare accessori terzi come GnuWin32 / Git Bash, oppure avviare una distribuzione completa tramite WSL (Windows Subsystem for Linux).
Oggi c’è una terza via nativa e leggerissima: Microsoft.Coreutils.
Cos’è Microsoft.Coreutils?
Microsoft.Coreutils è un pacchetto ufficiale sviluppato da Microsoft che porta le utility di sistema standard del mondo UNIX/Linux direttamente nel prompt dei comandi di Windows (CMD) e in PowerShell, compilate come eseguibili binari nativi (.exe).
Sotto il cofano, il progetto si basa su uutils/coreutils, una riscrittura completa in Rust delle storiche GNU Coreutils. Microsoft ha impacchettato questi binari garantendo piena compatibilità con l’architettura Windows, prestazioni elevate e consumo di risorse pressoché nullo.
Perché utilizzarlo?
- Nessun overhead di virtualizzazione: A differenza di WSL, i comandi girano direttamente sul kernel di Windows.
- Velocità pura: Essendo scritti in Rust, i binari sono estremamente veloci e sicuri nella gestione della memoria.
- Portabilità negli script: Puoi usare comandi standard POSIX/Linux nei tuoi script batch o PowerShell senza dover riadattare la sintassi.
Come Installare Microsoft.Coreutils
L’installazione è immediata tramite WinGet, il package manager nativo di Windows.
Apri il terminale (PowerShell o CMD) ed esegui:
winget install Microsoft.Coreutils
Al termine dell’installazione, chiudi e riapri il terminale. I comandi saranno subito disponibili nel tuo PATH di sistema.
Nota per gli utenti PowerShell: Alcuni comandi Linux (come
ls,cat,curl) in PowerShell sono spesso associati ad alias interni verso cmdlet .NET (ad esempiolspunta aGet-ChildItem). Se vuoi usare la versione nativa di Coreutils all’interno di PowerShell, puoi chiamare il binario specificando l’estensione (es.ls.exe) oppure rimuovere l’alias PowerShell di default dal tuo profilo.
I Tool Più Utili: Esempi Pratici
Oltre ai classici comandi di navigazione, vediamo alcuni strumenti chiave inclusi nel pacchetto che semplificano il lavoro di tutti i giorni:
1. File Filtering e Ispezione: head, tail, grep
Non serve più aprire un file di log da centinaia di megabyte con Notepad++ per vederne la fine:
# Legge le ultime 20 righe di un file di log tail -n 20 app.log # Segue in tempo reale le nuove righe scritte nel log tail -f app.log # Cerca una stringa specifica dentro i file grep "ERROR" app.log
2. Calcolo degli Hash: md5sum, sha256sum
Verificare l’integrità di un file scaricato o di un pacchetto è questione di un secondo:
sha256sum setup.exe
3. Gestione Testo: cut, sort, uniq
Per manipolare al volo file CSV o output di testo:
# Estrae la seconda colonna da un file separato da virgole e ordina i valori unici cut -d',' -f2 dati.csv | sort | uniq
Elenco Completo dei Tool Inclusi
Installando Microsoft.Coreutils otterrai un set completo di oltre 100 utility nativi. Ecco la suddivisione per categoria:
Gestione File e Directory
| Comando | Descrizione |
ls / dir | Elenca il contenuto delle directory |
cp / mv / rm | Copia, sposta/rinomina e rimuove file o directory |
mkdir / rmdir | Crea e rimuove directory |
touch | Aggiorna i timestamp di un file o lo crea se vuoto |
ln | Crea link simbolici o hard link |
realpath / readlink | Risolve il percorso assoluto o il target di un link |
stat | Mostra dettagli sullo stato di file o file system |
du | Calcola lo spazio su disco occupato da file/directory |
install | Copia file impostandone permessi ed attributi |
Visualizzazione e Manipolazione Testo
| Comando | Descrizione |
cat / tac | Concatena e stampa file (normale o al contrario) |
head / tail | Stampa le prime o le ultime righe di un file |
more | Paginatore semplice per scorrere i file |
cut | Rimuove o estrae sezioni da ogni riga di un file |
paste | Unisce righe di file diversi affiancandole |
join | Unisce le righe di due file basandosi su un campo comune |
sort | Ordina le righe dei file di testo |
uniq | Filtra o segnala le righe duplicate adiacenti |
tr | Traduce, sostituisce o elimina caratteri |
wc | Conta righe, parole, byte e caratteri |
nl | Aggiunge i numeri di riga ai file |
fold | Interrompe le righe lunghe per adeguarle a una larghezza |
fmt | Riformatta il testo dei paragrafi |
pr | Converte file di testo per la stampa |
expand / unexpand | Converte i tab in spazi e viceversa |
Sicurezza e Hash
| Comando | Descrizione |
md5sum | Calcola e verifica il checksum MD5 |
sha1sum | Calcola e verifica l’hash SHA-1 |
sha224sum / sha256sum | Calcola e verifica gli hash SHA-224 e SHA-256 |
sha384sum / sha512sum | Calcola e verifica gli hash SHA-384 e SHA-512 |
b2sum | Calcola e verifica l’hash BLAKE2b |
cksum / sum | Calcola il checksum e il conteggio dei byte |
Utility di Sistema e Processi
| Comando | Descrizione |
whoami | Stampa l’utente corrente |
hostname | Mostra il nome dell’host di sistema |
uptime | Indica da quanto tempo il sistema è in esecuzione |
date | Stampa o imposta la data e l’ora di sistema |
sleep | Sospende l’esecuzione per un intervallo di tempo |
timeout | Esegue un comando con un limite di tempo |
printenv / env | Stampa o gestisce le variabili d’ambiente |
nproc | Stampa il numero di processi/CPU disponibili |
Manipolazione Dati e Formattazione
| Comando | Descrizione |
base32 / base64 | Codifica/decodifica dati in formato Base32 o Base64 |
basenc | Codifica/decodifica dati in vari formati (Base16, Base58, ecc.) |
od / hexdump | Mostra il contenuto di un file in formato ottale, esadecimale o altro |
split / csplit | Divide un file in più parti (per dimensione o contesto) |
seq | Genera una sequenza numerica |
expr | Valuta espressioni matematiche o di stringa |
factor | Stampa i fattori primi di un numero |
tee | Legge dallo standard input e scrive sia su standard output che su file |
Con Microsoft.Coreutils, l’esperienza di sviluppo su Windows fa un grande passo in avanti verso l’interoperabilità. Senza dover avviare macchine virtuali o ambienti pesanti, è possibile riutilizzare la familiarità dei comandi UNIX direttamente dove serve.