in Ide & Tools, Informatica

Microsoft.Coreutils: Comandi Linux Nativi su Windows Senza WSL

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 esempio ls punta a Get-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

ComandoDescrizione
ls / dirElenca il contenuto delle directory
cp / mv / rmCopia, sposta/rinomina e rimuove file o directory
mkdir / rmdirCrea e rimuove directory
touchAggiorna i timestamp di un file o lo crea se vuoto
lnCrea link simbolici o hard link
realpath / readlinkRisolve il percorso assoluto o il target di un link
statMostra dettagli sullo stato di file o file system
duCalcola lo spazio su disco occupato da file/directory
installCopia file impostandone permessi ed attributi

Visualizzazione e Manipolazione Testo

ComandoDescrizione
cat / tacConcatena e stampa file (normale o al contrario)
head / tailStampa le prime o le ultime righe di un file
morePaginatore semplice per scorrere i file
cutRimuove o estrae sezioni da ogni riga di un file
pasteUnisce righe di file diversi affiancandole
joinUnisce le righe di due file basandosi su un campo comune
sortOrdina le righe dei file di testo
uniqFiltra o segnala le righe duplicate adiacenti
trTraduce, sostituisce o elimina caratteri
wcConta righe, parole, byte e caratteri
nlAggiunge i numeri di riga ai file
foldInterrompe le righe lunghe per adeguarle a una larghezza
fmtRiformatta il testo dei paragrafi
prConverte file di testo per la stampa
expand / unexpandConverte i tab in spazi e viceversa

Sicurezza e Hash

ComandoDescrizione
md5sumCalcola e verifica il checksum MD5
sha1sumCalcola e verifica l’hash SHA-1
sha224sum / sha256sumCalcola e verifica gli hash SHA-224 e SHA-256
sha384sum / sha512sumCalcola e verifica gli hash SHA-384 e SHA-512
b2sumCalcola e verifica l’hash BLAKE2b
cksum / sumCalcola il checksum e il conteggio dei byte

Utility di Sistema e Processi

ComandoDescrizione
whoamiStampa l’utente corrente
hostnameMostra il nome dell’host di sistema
uptimeIndica da quanto tempo il sistema è in esecuzione
dateStampa o imposta la data e l’ora di sistema
sleepSospende l’esecuzione per un intervallo di tempo
timeoutEsegue un comando con un limite di tempo
printenv / envStampa o gestisce le variabili d’ambiente
nprocStampa il numero di processi/CPU disponibili

Manipolazione Dati e Formattazione

ComandoDescrizione
base32 / base64Codifica/decodifica dati in formato Base32 o Base64
basencCodifica/decodifica dati in vari formati (Base16, Base58, ecc.)
od / hexdumpMostra il contenuto di un file in formato ottale, esadecimale o altro
split / csplitDivide un file in più parti (per dimensione o contesto)
seqGenera una sequenza numerica
exprValuta espressioni matematiche o di stringa
factorStampa i fattori primi di un numero
teeLegge 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.