Come posso usare una shell simile a Bash su Windows?


53

Uso Linux e un Mac e presto insegnerò alcune cose da linea di comando.

Cosa posso installare su Windows per darmi una finestra terminale più simile a una shell Bash di base per Mac / Linux?

Vorrei poter definire .bash_aliases, se possibile.


3
ci puttyconnettevamo a un vero server Linux. su Windows sono sempre stato riluttante e tentato di usare cygwin, riluttante a causa della mia goffa esperienza di installazione. Ma personalmente, l'ho trovato più comodo da usare di msys e più veloce di un vm. una volta installato, cygwin risulta in qualche modo portatile semplicemente copiando la sua directory è sufficiente, tuttavia creerà un nuovo nome utente su ogni macchina / utente basato sul nome utente di Windows (per impostazione predefinita, almeno). Ma tieni presente che poiché cygwin / msys può essere visto come una "distribuzione" personalizzata, alcune opzioni di comando [opzionali] potrebbero mancare. testali.
n611x007,

5
Microsoft ha appena annunciato che il prossimo aggiornamento di Windows 10 includerà Bash.
Dmitri Nesteruk,

Risposte:


42

È possibile installare Cygwin o MSYS / MinGW oppure installare una distribuzione Linux completa in una macchina virtuale (ad esempio, utilizzando VirtualBox ).


Ho usato un Cygwin che era 135 mb (25 mb imballato), copiato da un altro computer (portatile). ha creato un nuovo nome utente basato sull'utente corrente dei nuovi computer e ha funzionato perfettamente altrimenti. il mio attuale cygwin è 800 mb, con un ambiente di compilazione, codice sorgente 200-300 mb e alcune cose.
n611x007,

2
Nota: ora è possibile installare il "Sottosistema Windows per Linux" che consente di eseguire strumenti e shell Linux nativi in ​​modalità utente su Windows. Vedi la risposta sotto ...
MrHinsh - Martin Hinshelwood,

48

È ora possibile installare il sottosistema Windows per Linux che consente di eseguire strumenti e shell Linux nativi in ​​modalità utente su Windows . Ciò consente di eseguire la shell Bash direttamente su Windows e si basa su Ubuntu.

Questo è stato introdotto in Windows 10 con Anniversary Update (2016) e non è abilitato per impostazione predefinita. Per abilitare la nuova funzionalità su un computer con Windows 10 Anniversary Update, procedi come segue:

  1. Passa a Impostazioni -> Aggiornamento e sicurezza -> Per gli sviluppatori e seleziona "Modalità sviluppatore"
  2. Pannello di controllo -> Programmi e funzionalità e fai clic su "Attiva o disattiva funzionalità di Windows" nel riquadro in alto a sinistra
  3. Nella finestra di dialogo, selezionare "Sottosistema Windows per Linux" e fare clic su OK
  4. Riavvia la macchina
  5. Cerca "bash" e fai clic su di esso, dovrebbe aprire un prompt dei comandi e chiederti se vuoi installare "Ubuntu su Windows", continua con "y"
  6. Dopo l'installazione, verrà richiesto di creare un nome utente e una password UNIX
  7. Ora sei pronto per usare la shell bash

Un po 'di storia, nel 2015 il progetto Astoria è stato avviato per portare le app Android su Windows e ha creato un sottosistema Linux chiamato Windows Subsystem for Linux (WSL) allo scopo. Alla fine il progetto Astoria è stato abbandonato poiché ha minato la loro strategia UWP (Universal Windows Platform), ma alcune parti sono state mantenute e formano la base di Bash per Windows. Nel corso, Microsoft ha collaborato con Canonical (creatori di Ubuntu Linux) per fornire loro un'immagine nativa con tutti gli strumenti / binari supportati.

Maggiori informazioni disponibili qui,
https://blogs.msdn.microsoft.com/commandline/2016/04/06/bash-on-ubuntu-on-windows-download-now-3/
https://blogs.windows.com / buildingapps / 2016/03/30 / run-bash-on-ubuntu-on-windows /
https://sec.ch9.ms/sessions/build/2016/P488.mp4 (video)



Mi piace meglio questa risposta!
Peter,

1
@Peter Grazie, l'ho provato brevemente ieri, è stato in grado di far funzionare gcc / g ++, è stato in grado di far funzionare Firefox tramite xserver (abbastanza lento, forse limitano l'utilizzo della CPU?), Chrome e il browser predefinito si sono bloccati e alcuni comandi come 'schermo' non ha funzionato, le cose dovrebbero essere risolte nel prossimo aggiornamento di bash perché è ancora in beta. Detto questo, avere bash disponibile nativamente su Windows è fantastico! Apre molte possibilità. Kudos Microsoft!
Nemo,

Puoi anche eseguirlo in Powershell (esegui come admin): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"E installa uno dei seguenti dallo store di Windows: Ubuntu, Debian, OpenSUSE, Kali Linux
Zhenhir,

18

Ecco un elenco delle opzioni disponibili a partire dal 2018-05 con alcuni aggiornamenti su WSL durante il 2019-01 insieme a un po 'di dettagli su ciascuno di essi.

Opzioni che si distinguono

Cygwin e Babun

Cygwin fornisce quanto segue:

  1. una shell bash e il terminale Mintty,
  2. una vasta gamma di comuni utility Linux compilate per essere eseguite su Windows
  3. un livello di compatibilità completo che consente l'esecuzione di programmi Linux su Windows.

Cygwin mira a semplificare il porting delle applicazioni Linux su Windows. Se un programma C è stato progettato per Unix e prevede di utilizzare funzionalità come pipe, accesso a file e directory in stile Unix ecc., È possibile compilarlo per Cygwin e Cygwin fungerà da strato di compatibilità tra il codice e il sistema operativo esterno (Windows) . Ciò consente allo stesso programma C di funzionare su Linux e Windows con modifiche minime o nulle. È stato quindi rispettato un vasto elenco di programmi Linux che possono essere eseguiti durante l'installazione di Cygwin. Comunque tu, l'utente di questi programmi, dovrai probabilmente conoscere Unix. Ad esempio potrebbe essere necessario passare argomenti come /cygdrive/c/autoexec.batinvece di c:\autoexec.bated essere pronti a gestire l'output con terminazione di linea Unix ( \n) anziché con terminazione di linea di Windows ( \r\n).

La raccolta di tutti i programmi Cygwin comprende un repository e sebbene Cygwin non disponga di un gestore di pacchetti Linux tradizionale, è possibile aggiungere, rimuovere e aggiornare i programmi da questo repository in qualsiasi momento con un metodo molto intuitivo (si esegue setup.exe di Cygwin su in qualsiasi momento dopo il completamento dell'installazione)

Babun è Cygwin con un gestore di pacchetti completo (patto), oh-my-zsh per la sua shell, git, aggiornamenti automatici e un'architettura orientata al plug-in. Sebbene la shell predefinita sia zsh, puoi facilmente passare a bash. Sembra un bel aggiornamento da Cygwin vaniglia se non ti dispiace il peso extra.

Mingw-W64

Mingw-w64 fornisce quanto segue:

  1. una conchiglia,
  2. una buona quantità di utility Linux,
  3. una toolchain di sviluppo SW per creare app che verranno eseguite senza un livello di compatibilità Linux (o con uno minimo).

MinGW è principalmente una distribuzione di software e una piattaforma di costruzione per Windows. In particolare è una porta Windows degli strumenti del compilatore GNU, come GCC, make, bash e così via. Include una buona quantità di strumenti GNU e un livello minimo di compatibilità Unix.

La differenza principale tra Mingw-w64 e Cygwin sta nelle priorità: Cygwin mira a fornire un livello di compatibilità POSIX completo comprendente un'implementazione completa di tutte le principali chiamate e librerie di sistema Unix; le prestazioni sono secondarie alla compatibilità. MinGW punta alle prestazioni, quindi non fornirà alcune API POSIX che non possono essere implementate facilmente e / o abbastanza velocemente in Windows. Anche l'obiettivo principale di MinGW sono gli sviluppatori S / W. Tuttavia gli utenti occasionali possono anche godere della sua shell e delle utilità generali incluse.

MSYS2 e Git per Windows

MSYS2 fornisce quanto segue:

  1. una shell bash e il terminale Mintty,
  2. una buona quantità di utility Linux,
  3. un gestore di pacchetti completo della riga di comando per installare i programmi del sistema operativo
  4. parti di Cygwin e MinGW per supportare la creazione di applicazioni con o senza un livello di compatibilità Linux completo.
  5. un repository di software e un gestore di pacchetti (pacman) che semplifica l'installazione, l'utilizzo, la creazione e il port del software su Windows.

MSYS2 è anche principalmente una distribuzione software e una piattaforma di costruzione per Windows come MinGW ma combina sia il modo di Cygwin che il modo di MinGW. È possibile utilizzare MSYS2 per creare "programmi MinGW" o "programmi MSYS2" . Il collegamento successivo al livello di compatibilità di MSYS2 (msys-2.dll) che segue da vicino lo sviluppo del livello di compatibilità di Cygwin con alcune aggiunte / modifiche . I repository dei 2 progetti sono tuttavia completamente indipendenti. Quindi, sebbene sia MSYS2 che Cygwin forniscano grep.exe, potrebbero avere una versione completamente diversa.

Git per Windows è solo MSYS2 con git installato o almeno fortemente basato su MSYS2 . Fornisce la stessa shell (bash), terminale (Mintty) e gestore pacchetti (pacman). Sembra essere il modo più popolare per far funzionare Git dominante su Windows e insieme ad esso si ottiene un piacevole ambiente Unix.

Sottosistema Windows per Linux (WSL)

WSL risolve lo stesso problema utilizzando un metodo completamente diverso. Esegui lo stesso identico codice che eseguiresti su un sistema Linux su WSL che intercetta le chiamate del kernel e le traduce in chiamate del kernel di Windows (è l'opposto di Wine). Ovviamente la traduzione non può essere perfetta ma Microsoft ha lasciato cadere l' avvertimento beta . Dato che WSL non era disponibile su Windows Server prima del 2018, non ci ho studiato molto. Ad ogni modo ottieni una bella shell bash con la maggior parte dei gadget CLI che ti aspetteresti di trovare su un'installazione Ubuntu di serie. Microsoft afferma ufficialmente che "WSL non mira a supportare desktop o applicazioni GUI"tuttavia ci sono istruzioni non ufficiali su come farlo. Sembra che allo stato attuale (inizio 2018) gli svantaggi principali di WSL siano i seguenti: a) il rendering dello schermo e l' accesso al disco sono molto lenti b) non è necessario modificare i file WSL (Linux) da Windows c) funziona solo su Windows a 64 bit. Ecco un vecchio ma piacevole confronto con Cygwin (nota che Rich Turner è un membro del team WSL e ha pubblicato molte informazioni utili su WSL)

Terreno comune

Ad eccezione di WSL, la maggior parte degli strumenti di cui sopra condivide molte tecnologie comuni (librerie, eseguibili, concetti). Ad esempio la shell bash fornita con MinGW dipende da msys-2.dll che a sua volta è un fork di cygwin.dll. Quindi sì, c'è molto spazio per la confusione :-)

Più opzioni

Cmder fornisce solo un bel terminale e una shell simile a bash per Windows. Il componente principale è Conemu (il terminale). Inoltre, aggiunge il clink che fornisce una potente modifica della riga di comando in stile Bash , un layout di prompt personalizzato e la combinazione di colori Monokai. È altamente (o forse completamente) compatibile con i programmi della console Windows nativi.

Scoop fornisce un gestore di pacchetti da riga di comando per molti noti programmi multipiattaforma, inclusi molti strumenti GNU. Scarica pacchetti precompilati. Non fornisce né una shell né un terminale, ma viene eseguito nel cmd.exe di Windows (con tutte le sue limitazioni ma anche con la sua piena compatibilità con i programmi della console Windows nativi). Non include inoltre nessuna suite di compilatori (ma ovviamente i compilatori e gli strumenti di sviluppo sono pacchetti tipici che è possibile installare con scoop). Molti programmi installati da Scoop provengono direttamente dal progetto MinGW / MSYS o sono stati creati utilizzando i loro strumenti.

Ancora più opzioni

Le seguenti soluzioni non sembrano attive e non le ho mai testate ma sembrano fare il lavoro per gli altri:

Gow (Gnu su Windows) è l'alternativa leggera a Cygwin senza shell. Utilizza un comodo programma di installazione di Windows che installa circa 130 applicazioni Linux open source estremamente utili compilate come file binari nativi win32 e disponibili tramite cmd.exe di Windows. È progettato per essere il più piccolo possibile (circa 10 MB).

UnxUtils & GnuWin32 : UnxUtils è una raccolta di porte delle comuni utility GNU Unix-like su Win32 nativo, con eseguibili che dipendono solo dal msvcrt.dll di Microsoft C-runtime. È necessario scaricare la parte principale e alcuni aggiornamenti . GnuWin32 ha versioni successive di UnxUtils, ma richiede file di supporto (ad es. DLL)

MSYS e MinGW sembrano essere stati obsoleti da MSYS2 e MinGW-W64, quindi non li ho mai guardati.

Alcuni problemi comuni su Cygwin e MSYS2

Per quanto riguarda il terminale

Mintty è il terminale utilizzato in Cygwin, MSYS2 e loro derivati. Si dovrebbe essere consapevoli del fatto che se si eseguono i programmi della console nativa di Windows non è una sostituzione indolore per il prompt dei comandi di Windows. Mentre i programmi con un semplice output di testo funzionano normalmente bene, quelli interattivi e quelli a schermo intero hanno spesso problemi. Leggi di più sulla home page di Mintty e leggi anche la voce "Alcuni programmi console nativi non funzionano quando eseguiti da Git Bash" nelle FAQ di Git per Windows . Quella voce ha queste raccomandazioni da fare quando si affrontano questo tipo di problemi:

Esistono diversi metodi per aggirare questi problemi:

  • Esegui programmi che presentano problemi utilizzando l' utilità winpty . Ciò consente di continuare a utilizzare il terminale Mintty più bello, ma può diventare ingombrante se è necessaria la soluzione alternativa per molti programmi.
  • [usa cmd.exe] e configuralo per "Modifica rapida", dimensioni ragionevoli e scorrimento e font Unicode adatto. Dovrai comunque convivere con le altre stranezze di [cmd.exe].
  • Installa e usa Conemu .

Altri problemi

Le due cose più importanti da tenere a mente sono queste:

  1. c'è un compromesso tra potere e problemi difficili da debug. Più potente è la soluzione, più cose possono andare storte anche in modi che inizialmente sembreranno non correlati al tuo livello Linux.

  2. se non hai molta esperienza con Linux, non utilizzare le soluzioni più potenti come Cygwin / MSYS2 / MinGW

UnxUtils e GnuWin32 hanno il minor potere ma anche il minor potenziale di causare mal di testa. Cygwin e simili saranno in cima sia alla potenza che al mal di testa. Cmder è da qualche parte nel mezzo. Quindi, quando hai bisogno delle soluzioni più potenti, dormi bene e concentrati completamente. Evita di utilizzare soluzioni potenti durante il test di qualcosa di nuovo e forse instabile. Inoltre, non dimenticare che le soluzioni di media complessità come cmder non sono immacolate.

Il problema dei comandi Linux che oscurano quelli di Windows è una causa comune di problemi di debug difficili in soluzioni come Cygwin / MSYS2 / MinGW. Ecco un esempio: avevo un file .bat che utilizzava il comando timeout. Se eseguito con Cygwin, fallirebbe perché anche il timeout è un comando Linux ma con sintassi diversa. Dopo aver individuato il problema, ho scoperto che potevo aggiungere un PATH = ... nella parte superiore del file .bat per assicurarmi che il comando windows avesse la priorità. Ma poi ho ricevuto un errore ancora più criptico "Il reindirizzamento dell'input non è supportato" e ho risolto per una soluzione alternativa prima di trovare il motivo.

Ecco un esempio di un problema con cmder. Stavo eseguendo la versione di Windows all'unisono sotto Cmder e in alcune condizioni speciali era sospeso senza alcun messaggio di errore . Lo stesso comando è stato sempre eseguito perfettamente in cmd.exe. La cosa divertente è che funzionava perfettamente anche con Cygwin (in effetti se si hanno nomi di file Unicode un terminale Cygwin è meglio di cmd.exe perché cmd.exe spesso visualizza il testo Unicode non valido).

Informazioni su questa guida

Durante il 2017-05 mi sono stancato di non capire le differenze degli strumenti sopra menzionati, sebbene ne usassi alcuni da molto tempo fa (principalmente CygWin e cmder ma mai per scopi di sviluppo). Quindi ho trascorso alcune ore a osservare il paesaggio. Questa guida è il risultato delle note che ho tenuto. Non sono un esperto del settore, ma ho cercato di trovare tutte le informazioni pertinenti, leggerle con occhio critico e presentare chiaramente le parti più importanti. Per favore, commenta se qualcosa sembra sbagliato e farò del mio meglio per correggerlo.

Infine, mi scuso per alcuni problemi terminologici: in questo testo a volte uso il termine Linux al posto di UNIX o POSIX. So che non sono gli stessi, ma è molto difficile distinguerli quando si affronta un argomento da una distanza così lunga. Anche quando non è difficile ci vuole tempo che non ho ;-)


2
Questa è una risposta eccezionale, grazie per aver condiviso le tue scoperte ed esperienze.
Daniel Sokolowski il

Risposta completa, ma non lo pacmanèpackman
Adrian Günter

Come potrebbe non essere questa la risposta accettata? Grazie per aver spiegato tutto questo.
42.

10

Ti suggerirei di scaricare e installare un set minimo di MinGW e anche un set minimo di MSYS. Il programma di installazione di MinGW ti offre una semplice interfaccia grafica per scegliere quali pacchetti vuoi installare. Se tutto ciò che desideri è BASH, l'installazione non richiederà più di pochi megabyte.

AGGIORNAMENTO: sono passato a MSYS2, che è molto più avanzato e ha la porta dello strumento pacman di ArchLinux per la gestione dei pacchetti. Il programma di installazione di MSYS2 ha tutto ciò di cui hai bisogno, inoltre utilizza Minty che è assolutamente perfetto.


10

C'è anche Clink disponibile su GitHub . Si integra nel prompt dei comandi di Windows utilizzando le librerie hook.

Dalla descrizione del progetto:

Clink combina la shell nativa cmd.exe di Windows con le potenti funzionalità di modifica della riga di comando della libreria GNU Readline, che offre funzionalità complete di completamento, cronologia e modifica delle linee.

(quindi non fornisce funzionalità bash come linguaggio di programmazione o altri gadget Unix)

Uso Linux al lavoro e mi trovo a volte a frugare in cmd che non si comporta come mi aspetto da Bash. Con Clink posso superare alcune di queste carenze.

Ultimamente, ho anche scoperto un progetto promettente, ma non ancora 'can-do-all', chiamato flinux, che emula le funzioni del sistema Linux e fornisce una sorta di sistema sopra di esso (attualmente basato su Arch Linux)


Clink cambia effettivamente la lingua o migliora solo qualcosa in cmd.exe? Questo non è del tutto chiaro dalla risposta.
Sarge Borsch,

Ti permette di usare alcune delle solite funzioni della shell * nix, come la ricerca inversa usando Ctrl + R, un completamento del comando di ricerca PATH, ecc.
Andreas

Quindi non è un'implementazione bash, giusto?
Sarge Borsch,

Ehm, no. Un'estensione a cmd.exe, proprio come descritto sul sito;)
Andreas,

7

Oltre a quanto affermato da Faffaffaff , Git per Windows include Bash e alcuni comuni programmi da riga di comando di Linux (ad esempio Vim , sed e gawk ). Si basa su MSYS . La versione dei programmi è vecchia, ad esempio Bash è la versione 3.1. Cygwin avrebbe versioni più recenti delle utility.

Uso anche ConEmu come emulatore di terminale (principalmente per l'evidenziazione della sintassi in Vim, le pagine delle schede e il più semplice copia-incolla). console2 è anche un altro popolare emulatore di terminale, anche se non l'ho provato.


A proposito: ConEmu riconosce anche le installazioni MSYS2 e consente l'integrazione con Clink.
Andreas,


1

Ho appena provato con Babun , che ha integrato Cygwin internamente, e ha un buon sapore per me :)

Il file di download è leggermente grande, circa 250 MB. Ma l'installazione è semplice; non è necessario configurare nulla e funziona!


Babun include tutto Cygwin, è davvero follemente enorme. Il processo di installazione è un po 'confuso (attualmente l'archivio zip è bloccato da Chrome come file pericoloso). Ma finora ho trovato la migliore sostituzione del terminale.
Tombart,

Babun è stato davvero lento per me. Sono passato all'utilizzo di conemu e git shell
parole simili al
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.