Comment utiliser un shell de type Bash sous Windows?


53

J'utilise Linux et un Mac et j'enseignerai bientôt des choses en ligne de commande.

Que puis-je installer sous Windows pour obtenir une fenêtre de terminal très semblable à un shell Bash Mac / Linux de base?

J'aimerais pouvoir définir .bash_aliases aussi bien que possible.


3
nous avions l'habitude de nous puttyconnecter à un vrai serveur linux. sur les fenêtres, j’étais toujours à la fois réticent et tenté d’utiliser cygwin, réticent à cause de mon expérience d’installation maladroite. Mais personnellement, je l’ai trouvé plus pratique à utiliser que msys et plus rapide qu’une machine virtuelle. Une fois installé, cygwin s'avère en quelque sorte portable. Il suffit de copier son répertoire. Toutefois, il créera un nouveau nom d'utilisateur sur chaque machine / utilisateur en fonction du nom d'utilisateur Windows (au moins par défaut). Mais gardez à l'esprit que, puisque cygwin / msys peut être considéré comme une "distribution" personnalisée, il se peut que certains commutateurs de commande [facultatif] soient manquants. testez-les.
n611x007

5
Microsoft vient d’annoncer que Bash figurera dans la prochaine mise à jour de Windows 10.
Dmitri Nesteruk

Réponses:


42

Vous pouvez installer Cygwin ou MSYS / MinGW ou une distribution complète de Linux sur une machine virtuelle (à l’aide de VirtualBox , par exemple ).


J'ai utilisé un cygwin de 135 Mo (25 Mo emballé), copié à partir d'un autre ordinateur (portable). il a créé un nouveau nom d'utilisateur basé sur l'utilisateur actuel des nouveaux ordinateurs et a parfaitement fonctionné autrement. mon cygwin actuel est de 800 Mo, avec un environnement de construction, un code source de 200 à 300 Mo et quelques éléments.
n611x007

2
Remarque: vous pouvez maintenant installer le "sous-système Windows pour Linux" qui vous permet d'exécuter un shell et des outils Linux natifs en mode utilisateur sous Windows. Voir la réponse ci-dessous ...
MrHinsh - Martin Hinshelwood

48

Vous pouvez maintenant installer le sous-système Windows pour Linux, qui vous permet d' exécuter un shell et des outils Linux natifs en mode utilisateur sous Windows . Cela vous permet d'exécuter le shell Bash directement sous Windows et repose sur Ubuntu.

Ceci a été introduit dans Windows 10 avec la mise à jour d'anniversaire (2016) et n'est pas activé par défaut. Pour activer la nouvelle fonctionnalité sur un ordinateur Windows 10 Anniversary Update, procédez comme suit:

  1. Accédez à Paramètres -> Mise à jour et sécurité -> Pour les développeurs et sélectionnez "Mode développeur".
  2. Panneau de configuration -> Programmes et fonctionnalités et cliquez sur "Activer ou désactiver les fonctionnalités Windows" dans le volet supérieur gauche
  3. Dans la boîte de dialogue, cochez "Windows Subsystem for Linux" et cliquez sur OK.
  4. Redémarrer la machine
  5. Recherchez "bash" et cliquez dessus, une invite de commande devrait s'ouvrir et vous demander si vous souhaitez installer "Ubuntu sous Windows", continuez avec "y"
  6. Après l'installation, il vous sera demandé de créer un nom d'utilisateur et un mot de passe UNIX.
  7. Vous êtes maintenant prêt à utiliser le shell bash

Un peu d’histoire, en 2015, le projet Astoria a commencé à intégrer des applications Android à Windows et a créé un sous-système Linux appelé Windows Subsystem for Linux (WSL). Finalement, le projet Astoria a été abandonné car il sapait sa stratégie UWP (Universal Windows Platform), mais certaines parties ont été conservées et constituent la base de bash pour Windows. Au cours du cours, Microsoft a collaboré avec Canonical (créateurs d’Ubuntu Linux) pour leur fournir une image native avec tous les outils / fichiers binaires pris en charge.

Plus d'informations disponibles ici,
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 (vidéo)



J'aime mieux cette réponse!
Peter

1
@Peter Merci, brièvement essayé hier, capable de faire fonctionner gcc / g ++, capable de faire fonctionner Firefox via xserver (assez lent, peut-être qu'ils limitent l'utilisation du processeur?), Chrome et le navigateur par défaut se bloquaient et certaines commandes telles que 'screen' n'a pas fonctionné, les choses devraient être réglées dans la prochaine mise à jour de bash car elles sont toujours en version bêta. Cela dit, il est fantastique d'avoir bash en natif sur Windows! Cela ouvre beaucoup de possibilités. Félicitations Microsoft!
Nemo

Vous pouvez également exécuter ceci dans Powershell (exécuté en tant qu'administrateur): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"Et installez l'un des logiciels suivants à partir du magasin Windows: Ubuntu, Debian, OpenSUSE, Kali Linux
Zhenhir,

18

Voici une liste des options disponibles à compter de 2018-05 avec quelques mises à jour concernant WSL au cours de 2019-01 ainsi qu'un peu de détail concernant chacune d'elles.

Des options qui se démarquent

Cygwin et Babun

Cygwin fournit les éléments suivants:

  1. un shell bash et le terminal Mintty,
  2. une vaste gamme d'utilitaires Linux courants compilés pour fonctionner sous Windows
  3. une couche de compatibilité complète qui permet aux programmes Linux de s'exécuter sous Windows.

Cygwin vise à faciliter le portage d'applications Linux sur Windows. Si un programme C a été conçu pour Unix et prévoit d’utiliser des fonctionnalités telles que les canaux, l’accès aux fichiers et aux répertoires de style Unix, vous pouvez le compiler pour Cygwin et Cygwin agira en tant que couche de compatibilité entre le code et le système d’exploitation étranger (Windows). . Cela permet au même programme C de fonctionner à la fois sous Linux et Windows avec peu ou pas de modification. Une liste énorme de programmes Linux a donc été respectée et peut être exécutée lorsque vous installez Cygwin. Cependant, vous, l'utilisateur de ces programmes, devrez probablement connaître Unix. Par exemple, vous devrez peut-être passer des arguments comme /cygdrive/c/autoexec.batau lieu de c:\autoexec.batet être prêt à traiter la sortie avec Unix line termin ( \n) au lieu de Windows line termin ( \r\n).

La collection de tous les programmes Cygwin comprend un référentiel et bien que Cygwin n’ait pas de gestionnaire de paquets Linux traditionnel, vous pouvez à tout moment ajouter, supprimer et mettre à jour des programmes de ce référentiel de manière très contre-intuitive (vous exécutez le fichier setup.exe de Cygwin à à tout moment après la fin de l'installation)

Babun est Cygwin avec un gestionnaire de paquets complet (pact), oh-my-zsh pour son shell, git, des mises à jour automatiques et une architecture orientée plug-in. Bien que le shell par défaut soit zsh, vous pouvez facilement basculer vers bash. Cela semble être une belle mise à niveau de vanille Cygwin si le poids supplémentaire ne vous dérange pas.

Mingw-W64

Mingw-w64 fournit les éléments suivants:

  1. une coquille bash,
  2. une bonne quantité d'utilitaires Linux,
  3. une chaîne d’outils de développement logiciel pour créer des applications qui fonctionneront sans couche de compatibilité Linux (ou avec une couche minimale).

MinGW est principalement une distribution de logiciels et une plate-forme de développement pour Windows. Il s’agit en particulier d’un port Windows des outils de compilation GNU, tels que GCC, make, bash, etc. Il inclut une bonne quantité d’outils GNU et une couche de compatibilité Unix minimale.

La principale différence entre Mingw-w64 et Cygwin concerne les priorités: Cygwin vise à fournir une couche de compatibilité POSIX complète comprenant une mise en œuvre complète de tous les principaux appels système et bibliothèques Unix. la performance est secondaire à la compatibilité. MinGW vise la performance et ne fournira donc pas certaines API POSIX qui ne peuvent pas être implémentées facilement et / ou assez rapidement sous Windows. Les développeurs S / W sont également la cible principale de MinGW. Néanmoins, les utilisateurs occasionnels peuvent également profiter de sa coque et des utilitaires inclus.

MSYS2 et Git pour Windows

MSYS2 fournit les éléments suivants:

  1. un shell bash et le terminal Mintty,
  2. une bonne quantité d'utilitaires Linux,
  3. un gestionnaire de paquets en ligne de commande complet pour installer les programmes OS
  4. des composants de Cygwin et de MinGW pour prendre en charge la création d’applications avec ou sans couche complète de compatibilité Linux.
  5. un référentiel de logiciels et un gestionnaire de paquets (pacman) facilitant l’installation, l’utilisation, la création et le portage de logiciels sous Windows.

MSYS2 est également avant tout une plate-forme de distribution de logiciels et une plate-forme de construction pour Windows comme MinGW, mais il combine à la fois le chemin de Cygwin et celui de MinGW. Vous pouvez utiliser MSYS2 pour créer des "programmes MinGW" ou des "programmes MSYS2" . Ce dernier lien renvoie à la couche de compatibilité de MSYS2 (msys-2.dll), qui elle-même suit de près le développement de la couche de compatibilité de Cygwin avec quelques ajouts / modifications . Les référentiels des 2 projets ne sont toutefois absolument pas liés. Ainsi, bien que MSYS2 et Cygwin fournissent tous les deux, grep.exeils peuvent avoir une version complètement différente.

Git pour Windows est soit juste MSYS2 avec git installé, soit au moins fortement basé sur MSYS2 . Il fournit le même shell (bash), terminal (Mintty) et gestionnaire de paquets (pacman). Il semble que ce soit le moyen le plus répandu d’exploiter Git sur Windows et d’obtenir un bel environnement Unix.

Sous-système Windows pour Linux (WSL)

WSL résout le même problème en utilisant une méthode complètement différente. Vous exécutez exactement le même code que sur un système Linux sur WSL, qui intercepte les appels du noyau et les traduit en appels du noyau Windows (c'est l'inverse de Wine). Bien sûr, la traduction ne peut pas être parfaite mais Microsoft a abandonné l’ avertissement de la bêta . Comme WSL n'était pas disponible sur Windows Server avant 2018, je ne l'ai pas beaucoup étudié. Quoi qu'il en soit, vous obtenez un bon shell bash avec la plupart des fonctionnalités de la CLI que vous espérez trouver sur une installation Ubuntu standard. Microsoft déclare officiellement que "WSL ne vise pas à prendre en charge les ordinateurs de bureau ou les applications graphiques"Cependant, il existe des instructions non officielles sur la façon de le faire. Il semble que dans l'état actuel des choses (début 2018), les principaux inconvénients de WSL sont les suivants: a) le rendu de l'écran et l'accès au disque sont très lents b) vous n'êtes pas censé éditer les fichiers WSL (Linux) à partir de Windows c) il ne fonctionne que sur Windows 64 bits. Voici une comparaison ancienne mais intéressante avec cygwin (notez que Rich Turner est un membre de l'équipe WSL et qu'il a posté de nombreuses informations utiles concernant WSL)

Terrain d'entente

À l'exception du WSL, la plupart des outils ci-dessus partagent un grand nombre de technologies communes (bibliothèques, exécutables, concepts). Par exemple, le shell bash fourni avec MinGW dépend de msys-2.dll, qui est lui-même un fork de cygwin.dll. Alors oui, il y a beaucoup de place pour la confusion :-)

Plus d'options

Cmder fournit juste un joli terminal et un shell bash pour Windows. Son composant principal est Conemu (le terminal). En plus de cela, il ajoute Clink qui fournit une édition de ligne de commande de style Powerful Bash , une présentation d'invite personnalisée et le jeu de couleurs Monokai. Il est hautement (ou peut-être totalement) compatible avec les programmes de console Windows natifs.

Scoop fournit un gestionnaire de paquets en ligne de commande pour de nombreux programmes multi-plateformes bien connus, notamment de nombreux outils GNU. Il télécharge des paquets pré-compilés. Il ne fournit ni shell ni terminal, mais s’exécute sous le fichier cmd.exe de Windows (avec toutes ses limitations, mais aussi avec sa compatibilité totale avec les programmes de console Windows natifs). Il ne comprend également aucune suite de compilateur (bien entendu, les compilateurs et les outils de développement sont des packages typiques que vous pouvez installer avec scoop). Une grande partie des programmes installés par Scoop proviennent directement du projet MinGW / MSYS ou ont été conçus à l'aide de leurs outils.

Encore plus d'options

Les solutions ci-dessous ne semblent pas actives et je ne les ai jamais testées mais elles semblent faire le travail pour les autres:

Gow (Gnu sur Windows) est l'alternative légère à Cygwin sans shell. Il utilise un programme d'installation Windows pratique qui installe environ 130 applications Linux open source extrêmement utiles, compilées sous forme de fichiers binaires Win32 natifs et disponibles via le fichier cmd.exe de Windows. Il est conçu pour être aussi petit que possible (environ 10 Mo).

UnxUtils & GnuWin32 : UnxUtils est un ensemble de ports d’utilitaires communs de type Unix similaires à GNU et destinés à Win32 natif, les exécutables ne dépendant que de la commande Microsoft C-runtime msvcrt.dll. Vous devez télécharger la partie principale et quelques mises à jour . GnuWin32 a des versions ultérieures à UnxUtils, mais nécessite des fichiers de support (par exemple, des DLL)

MSYS & MinGW semble avoir été obsolète par MSYS2 & MinGW-W64, je ne les ai donc jamais regardées.

Quelques problèmes courants sur Cygwin et MSYS2

Concernant le terminal

Mintty est le terminal utilisé dans Cygwin, MSYS2 et leurs dérivés. Sachez que si vous exécutez des programmes de console natifs Windows, il ne s'agit pas d'un remplacement indolore de l'invite de commande Windows. Alors que les programmes avec une sortie texte simple fonctionnent généralement bien, les programmes interactifs et plein écran ont souvent des problèmes. Pour en savoir plus, consultez la page d'accueil de Mintty ainsi que l'entrée "Certains programmes de console natifs ne fonctionnent pas lorsqu'ils sont exécutés à partir de Git Bash" dans la FAQ de Git pour Windows . Cette entrée a cette recommandation à faire lorsque vous faites face à ce genre de problèmes:

Il existe plusieurs méthodes pour contourner ces problèmes:

  • Exécutez des programmes qui rencontrent des problèmes d’utilisation de l’ utilitaire winpty . Cela vous permet de continuer à utiliser le plus joli terminal menthe, mais peut devenir difficile à manier si vous avez besoin de la solution de contournement pour de nombreux programmes.
  • [utilisez cmd.exe] et configurez-le pour "Édition rapide", une taille raisonnable, une police de défilement arrière et unicode appropriée. Vous devrez toujours vivre avec les autres bizarreries de [cmd.exe].
  • Installez et utilisez Conemu .

Autres issues

Les deux choses les plus importantes à garder à l’esprit sont les suivantes:

  1. il y a un compromis entre le pouvoir et les problèmes difficiles à résoudre. Plus la solution est puissante, plus de problèmes peuvent survenir, même si cela ne semble initialement pas lié à votre couche Linux.

  2. si vous n'avez pas beaucoup d'expérience Linux, n'utilisez pas les solutions les plus puissantes telles que Cygwin / MSYS2 / MinGW

UnxUtils et GnuWin32 ont le moins de pouvoir mais également le moins de potentiel de vous causer des maux de tête. Cygwin et autres vont égaler la puissance et les maux de tête. Cmder est quelque part au milieu. Ainsi, lorsque vous avez besoin des solutions les plus puissantes, prenez le temps de bien dormir et soyez totalement concentré. Évitez d’utiliser des solutions puissantes lorsque vous testez quelque chose de nouveau et éventuellement d’instable. N'oubliez pas non plus que les solutions de complexité moyenne telles que cmder ne sont pas sans tache.

Le problème des commandes Linux masquant celles de Windows est une cause fréquente de problèmes difficiles à résoudre dans des solutions telles que Cygwin / MSYS2 / MinGW. Voici un exemple: J'avais un fichier .bat qui utilisait la commande timeout. Sous Cygwin, cela échouerait car timeout est également une commande Linux mais avec une syntaxe différente. Après avoir repéré le problème, j'ai découvert que je pouvais ajouter un PATH = ... en haut du fichier .bat pour m'assurer que la commande windows était prioritaire. Mais alors j'ai eu une erreur encore plus cryptique "La redirection d'entrée n'est pas supportée" et j'ai opté pour une solution de contournement avant de trouver la raison.

Voici un exemple de problème avec cmder. J'utilisais la version Windows d'Unison sous Cmder et sous certaines conditions spéciales, elle était bloquée sans aucun message d'erreur . La même commande fonctionnait toujours parfaitement sous cmd.exe. La chose amusante est qu’il fonctionnait parfaitement sous Cygwin (en fait, si vous avez un nom de fichier Unicode, un terminal Cygwin est préférable à cmd.exe car cmd.exe affiche souvent du texte Unicode mal formé).

A propos de ce guide

En 2017-05, j'en ai eu marre de ne pas comprendre les différences entre les outils ci-dessus, bien que j'utilise certains d'entre eux depuis longtemps (principalement CygWin et cmder, mais jamais à des fins de développement). J'ai donc passé quelques heures à saisir le paysage. Ce guide est le résultat des notes que j'ai conservées. Je ne suis pas un expert sur le terrain, mais j'ai tout fait pour trouver toutes les informations pertinentes, les lire d'un œil critique et présenter clairement les points les plus importants. Veuillez commenter si quelque chose ne va pas et je ferai de mon mieux pour le corriger.

Enfin des excuses pour certains problèmes de terminologie: dans ce texte, j’utilise parfois le terme Linux à la place d’UNIX ou de POSIX. Je sais qu'ils ne sont pas identiques, mais il est très difficile de les différencier lorsqu'on aborde un sujet d'une si longue distance. Même quand ce n'est pas difficile, ça prend du temps que je n'ai pas ;-)


2
C'est une superbe réponse, merci de partager vos découvertes et votre expérience.
Daniel Sokolowski

Réponse complète, mais ce n'est pacmanpas le caspackman
Adrian Günter

Comment cela pourrait-il ne pas être la réponse acceptée. Merci d'avoir détaillé tout cela.
42.

10

Je vous suggère de télécharger et d'installer un ensemble minimal de MinGW et un ensemble minimal de MSYS. Le programme d'installation de MinGW vous donne une interface graphique simple pour choisir les paquets que vous voulez installer. Si tout ce que vous voulez, c'est BASH, l'installation ne prendra que quelques mégaoctets.

UPDATE: Je suis passé au MSYS2 qui est bien plus avancé et qui possède le port de ArchLinux pacman tool pour la gestion des paquets. Le programme d’installation de MSYS2 a tout ce dont vous avez besoin, plus il utilise de la menthe qui est absolument parfaite.


10

Clink est également disponible sur GitHub . Il s’intègre à l’invite de commande Windows à l’aide de bibliothèques de hook.

De la description du projet:

Clink associe le shell Windows natif cmd.exe aux puissantes fonctions d'édition en ligne de commande de la bibliothèque GNU Readline, qui offre des fonctionnalités avancées de complétion, d'historique et d'édition de ligne.

(il ne fournit donc pas de fonctionnalités bash-as-a-programming-language ou d'autres goodies Unix)

J'utilise Linux au travail et je me retrouve parfois à tabuler dans cmd, ce qui n'agit pas comme je l'attends de Bash. Avec Clink, je peux surmonter certaines de ces lacunes.

Dernièrement, j'ai également découvert un projet prometteur, mais pas encore "fais-tout", appelé flinux, qui émule les fonctions du système Linux et fournit une sorte de système en plus (actuellement basé sur Arch Linux).


Clink change-t-il réellement la langue ou améliore-t-il quelque chose dans cmd.exe? Ce n'est pas tout à fait clair de la réponse.
Sarge Borsch

Il vous permet d'utiliser certaines des fonctionnalités habituelles du shell * nix, telles que la recherche inversée à l'aide de Ctrl + R, la complétion d'une commande de recherche PATH, etc.
Andreas

Donc, ce n'est pas une implémentation bash, non?
Sarge Borsch

Euh, non. Une extension de cmd.exe, comme décrit sur le site;)
Andreas

7

En plus des propos de faffaffaff , Git pour Windows inclut Bash et certains programmes de ligne de commande Linux courants (par exemple, Vim , sed et gawk ). C'est basé sur MSYS . La version des programmes est cependant ancienne, par exemple Bash est la version 3.1. Cygwin aurait des versions plus récentes des utilitaires.

J'utilise également ConEmu comme émulateur de terminal (principalement pour la coloration syntaxique dans Vim, les pages à onglets et le copier-coller plus facile). console2 est également un autre émulateur de terminal populaire, même si je ne l'ai pas encore essayé.


BTW: ConEmu reconnaît également les installations MSYS2 et permet une certaine intégration Clink.
Andreas


1

Je viens d’essayer avec Babun , qui a intégré le Cygwin en interne et qui a bon goût pour moi:)

Le fichier à télécharger est un peu gros, environ 250 Mo. Mais l'installation est simple. il n'y a pas besoin de configurer quoi que ce soit et cela fonctionne!


Babun comprend des cygwin entiers, c'est vraiment incroyablement énorme. Le processus d'installation est un peu compliqué (actuellement, l'archive zip est bloquée par chrome en tant que fichier dangereux). Mais jusqu'à présent, le meilleur remplacement de terminal que j'ai trouvé.
Tombart

Babun était vraiment lent pour moi. Je suis passé à l'utilisation de conemu et git shell
wordsforthewise
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.