64 votes

Comment utiliser un Shell de type Bash sous Windows ?

J'utilise Linux et un Mac, et je vais bientôt enseigner des trucs en ligne de commande.

Qu'est-ce que je peux installer sur Windows pour me donner une fenêtre de terminal la plus similaire à un Bash Shell de base sur Mac/Linux ?

J'aimerais pouvoir définir également les alias .bash si possible.

54voto

Nemo Points 851

Vous pouvez maintenant installer le Sous-système Windows pour Linux qui vous permet de exécuter le Shell et les outils Linux en mode utilisateur natif sur Windows . Cela vous permet d'exécuter Bash Shell directement sur Windows et est basé sur Ubuntu.

Cette fonctionnalité a été introduite dans Windows 10 avec la mise à jour Anniversary Update (2016) et n'est pas activée par défaut. Pour activer cette nouvelle fonctionnalité sur une machine Windows 10 Anniversary Update, procédez comme suit :

  1. Allez dans 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 de Windows" dans le volet supérieur gauche.
  3. Dans la boîte de dialogue, cochez "Sous-système Windows pour Linux" et cliquez sur Ok.
  4. Redémarrer la machine
  5. Cherchez "bash" et cliquez dessus, cela devrait ouvrir une invite de commande et vous demander si vous voulez installer "Ubuntu sur 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 bash Shell.

Un peu d'histoire, en 2015, le projet Astoria a été lancé pour apporter des applications Android à Windows et ils ont construit un sous-système Linux appelé Windows Subsystem for Linux (WSL) à cette fin. Finalement, le projet Astoria a été abandonné car il sapait leur stratégie UWP (Universal Windows Platform), mais certaines parties ont été conservées et constituent la base de bash pour Windows. Au fil du temps, Microsoft a collaboré avec Canonical (créateurs d'Ubuntu Linux) pour leur fournir une image native avec tous les outils/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)

45voto

ramon Points 111

Vous pouvez installer Cygwin o MSYS/MinGW Vous pouvez également installer une distribution Linux complète dans une machine virtuelle (par exemple, en utilisant le logiciel VirtualBox ).

35voto

ndemou Points 736

Voici une liste des options disponibles à partir de 2018-05 avec de nombreuses mises à jour concernant le WSL à partir de 2020-01 ainsi qu'un peu de détails concernant chacune d'entre elles.

Des options qui se démarquent

Sous-système Windows pour Linux (WSL)

La WSL devient de plus en plus mature (Microsoft a abandonné la avertissement bêta Il y a longtemps) et il est très facile à installer. Dans la plupart des cas, c'est une très bonne option (si ce n'est la meilleure). Il résout le problème en utilisant une méthode différente de la plupart des autres options. Vous exécutez exactement le même code binaire que celui que vous exécuteriez sur un système Linux. Jusqu'en 2020-01, WSL intercepte les appels du noyau et les traduit en appels du noyau Windows (pensez au contraire de Wine). Cela va changer puisque la version bêta actuelle de WSL exécute un vrai noyau linux dans une VM légère.

Quoi qu'il en soit, avec WSL, vous obtenez un joli Shell avec presque tous les goodies CLI que vous vous attendez à trouver sur une installation Ubuntu stock et l'option de apt install presque tout ce qui est disponible dans les dépôts. Microsoft déclare officiellement que "WSL n'a pas pour but de supporter les bureaux ou les applications GUI" mais il existe des instructions non officielles sur la façon de le faire. Il semble qu'en l'état actuel des choses (2020-01), les principaux inconvénients du WSL soient les suivants :

Voici une vieille mais belle comparaison avec cygwin (notez que Rich Turner est un membre de l'équipe WSL et qu'il a posté beaucoup d'informations utiles concernant la WSL)

Cygwin y Babun

Cygwin fournit les éléments suivants :

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

Cygwin vise à faciliter le portage des applications Linux sur Windows. Si un programme C a été conçu pour Unix et s'attend à utiliser des fonctionnalités telles que les tuyaux, l'accès aux fichiers et aux répertoires de style Unix, etc., vous pouvez le compiler pour Cygwin et Cygwin agira comme une couche de compatibilité entre le code et le système d'exploitation Windows. étranger OS (Windows). Cela permet au même programme C de fonctionner à la fois sur Linux et Windows avec peu ou pas de modifications. Une énorme liste de programmes Linux a ainsi été compilée et peut être exécutée lorsque vous installez Cygwin. Cependant, vous, l'utilisateur de ces programmes, devrez probablement être familier avec Unix. Par exemple, vous devrez peut-être passer des arguments comme /cygdrive/c/autoexec.bat au lieu de c:\autoexec.bat et être prêt à traiter la sortie avec la terminaison de ligne Unix ( \n ) au lieu de la terminaison de ligne de Windows ( \r\n ).

La collection de tous les programmes Cygwin constitue un dépôt et, bien que Cygwin ne dispose pas d'un gestionnaire de paquets Linux traditionnel, vous pouvez ajouter, supprimer et mettre à jour des programmes de ce dépôt à tout moment d'une manière très contre-intuitive (vous exécutez le setup.exe de Cygwin à n'importe quel moment après l'installation est terminée)

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 passer à bash. Cela semble être une belle mise à niveau de Cygwin vanille si le poids supplémentaire ne vous dérange pas.

Mingw-w64

Mingw-w64 fournit les éléments suivants :

  1. un bash Shell,
  2. une bonne quantité d'utilitaires Linux,
  3. une chaîne d'outils de développement de logiciels pour construire des applications qui fonctionneront sans couche de compatibilité Linux (ou avec une couche minimale).

MinGW est avant tout une distribution de logiciels et une plateforme de construction pour Windows. Il s'agit en particulier d'un portage Windows des outils de compilation GNU, tels que GCC, make, bash, et ainsi de suite. Elle inclut une bonne quantité d'outils GNU et une couche minimale de compatibilité Unix.

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 implémentation complète de tous les principaux appels système et bibliothèques Unix ; les performances sont secondaires à la compatibilité. MinGW vise les performances et ne fournira donc pas certaines API POSIX qui ne peuvent pas être implémentées facilement et/ou assez rapidement sous Windows. De plus, la cible principale de MinGW sont les développeurs de logiciels. Néanmoins, les utilisateurs occasionnels peuvent également apprécier son Shell et les utilitaires d'usage général inclus.

MSYS2 y Git pour Windows

MSYS2 fournit les éléments suivants :

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

MSYS2 est aussi principalement une distribution de logiciels et une plateforme de construction pour Windows comme MinGW mais il combine à la fois la manière de Cygwin et la manière de MinGW. Vous pouvez utiliser MSYS2 pour créer "Programmes MinGW" o "Programmes MSYS2" . Le lien ultérieur vers la couche de compatibilité de MSYS2 (msys-2.dll) qui lui-même suit de près le développement de la couche de compatibilité de Cygwin avec quelques ajouts/modifications . Les dépôts des 2 projets ne sont cependant pas du tout liés. Ainsi, bien que MSYS2 et Cygwin fournissent tous les deux grep.exe ils peuvent avoir une version complètement différente.

Git pour Windows est soit juste MSYS2 avec git installé ou au moins fortement basé sur MSYS2 . Il fournit les mêmes Shell (bash), terminal (Mintty) et gestionnaire de paquets (pacman). Il semble que ce soit la façon la plus populaire d'obtenir le fonctionnement de la dominante Git sur Windows et avec elle, vous obtenez un environnement Unix agréable.

Terrain d'entente

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

Plus d'options

Cmder fournit juste un terminal agréable et un Shell de type bash pour Windows. Son composant principal est Conemu (le terminal). En plus de cela, il ajoute Clink qui prévoit Édition en ligne de commande puissante de type Bash une mise en page personnalisée et le schéma de couleurs Monokai. Il est hautement (ou peut-être entièrement) compatible avec les programmes de console natifs de Windows.

Scoop fournit un gestionnaire de paquets en ligne de commande pour de nombreux programmes multiplateformes bien connus, y compris de nombreux outils GNU. Il télécharge des paquets précompilés. Il ne fournit ni un Shell ni un terminal mais s'exécute à la place sous cmd.exe de Windows (avec toutes ses limitations mais aussi avec sa pleine compatibilité avec les programmes de console natifs de Windows). Il ne comprend pas non plus de suite de compilateurs (mais bien sûr, les compilateurs et les outils de développement sont des paquets typiques que vous pouvez installer avec Scoop). Beaucoup de programmes que Scoop installe proviennent directement du projet MinGW/MSYS, ou ont été construits en utilisant 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 l'affaire pour d'autres :

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

UnxUtils & GnuWin32 : UnxUtils est une collection de ports d'utilitaires communs de type GNU Unix vers Win32 natif, avec des exécutables dépendant uniquement du runtime C de Microsoft msvcrt.dll. Vous devez télécharger le partie principale et quelques mises à jour . GnuWin32 a des versions plus récentes que UnxUtils, mais nécessite des fichiers de soutien (par exemple, des DLL)

MSYS & MinGW semblent ont a été obsolète par MSYS2 & MinGW-W64 donc je ne les ai jamais regardés.

Quelques problèmes courants sur Cygwin et MSYS2

Concernant le terminal

Mintty est le terminal utilisé dans Cygwin, MSYS2 et leurs dérivés. Il faut savoir que si vous exécutez des programmes de console natifs de Windows, ce n'est pas un remplacement sans problème de l'invite de commande de Windows. Alors que les programmes avec une sortie texte simple fonctionnent généralement bien, les programmes interactifs et en plein écran ont souvent des problèmes. Lire plus sur la page d'accueil de Mintty et lisez également l'entrée "Certains programmes de console natifs ne fonctionnent pas lorsqu'ils sont exécutés à partir de Git Bash" sur FAQ Git pour Windows . Cette entrée a ces recommandations à faire lorsque vous êtes confrontés à ce genre de problèmes :

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

  • Exécuter les programmes qui ont des problèmes en utilisant le winpty utilitaire. Cela vous permet de continuer à utiliser le terminal mintty, plus joli, mais peut devenir difficile à gérer si vous avez besoin de cette solution de contournement pour de nombreux programmes.
  • [utiliser cmd.exe] et le configurer pour "Quick Edit", une taille raisonnable, un retour en arrière et une police unicode appropriée. Vous devrez toujours vivre avec les autres bizarreries de [cmd.exe].
  • Installer et utiliser Conemu .

Autres questions

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

  1. il y a un compromis entre la puissance et les problèmes difficiles à déboguer. Plus la solution est puissante, plus il peut y avoir de problèmes, même s'ils ne semblent pas liés à votre couche Linux.

  2. si vous n'avez pas une grande expérience de Linux, n'utilisez pas les solutions les plus puissantes comme Cygwin/MSYS2/MinGW.

UnxUtils et GnuWin32 sont les moins puissants mais aussi les moins susceptibles de vous causer des maux de tête. Cygwin et ses équivalents seront en tête de liste en termes de puissance et de maux de tête. Cmder se situe quelque part au milieu. Ainsi, lorsque vous avez besoin des solutions les plus puissantes, dormez bien et soyez pleinement concentré. Évitez d'utiliser des solutions puissantes lorsque vous testez quelque chose de nouveau et peut-être instable. N'oubliez pas non plus que les solutions de complexité moyenne comme cmder ne sont pas sans défaut.

Le problème des commandes Linux qui prennent le pas sur celles de Windows est une cause courante de problèmes difficiles à déboguer dans des solutions comme Cygwin/MSYS2/MinGW. Voici un exemple : J'avais un fichier .bat qui utilisait la commande timeout. Lorsqu'il est exécuté sous Cygwin, il échoue parce que timeout est aussi 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 j'ai alors obtenu un message encore plus cryptique "La redirection des entrées n'est pas prise en charge". et se sont contentés d'une solution de contournement avant de trouver la raison.

Voici un exemple de problème avec cmder. J'exécutais la version Windows d'unison sous Cmder et dans certaines conditions particulières, il se bloquait avec absolument aucun message d'erreur . La même commande s'exécutait toujours parfaitement sous cmd.exe. Le plus drôle est qu'elle s'exécutait aussi parfaitement sous Cygwin (en fait, si vous avez des noms de fichiers Unicode, un terminal Cygwin est préférable à cmd.exe car cmd.exe affiche souvent le texte Unicode de façon malformée).

À propos de ce guide

Au cours de 2017-05, j'en ai eu marre de ne pas comprendre les différences des outils ci-dessus bien que j'utilisais certains d'entre eux depuis longtemps (principalement CygWin et cmder mais jamais à des fins de développement). J'ai donc passé quelques heures à tâter le terrain. Ce guide est le résultat des notes que j'ai prises. Je ne suis pas un expert dans le domaine mais j'ai essayé de trouver toutes les informations pertinentes, de les lire avec un œil critique et de présenter les parties les plus importantes clairement. N'hésitez pas à commenter si quelque chose vous semble erroné et je ferai de mon mieux pour le corriger.

Enfin, je tiens à m'excuser pour certains problèmes de terminologie : Dans ce texte, j'utilise parfois le terme Linux à la place de UNIX ou POSIX. Je sais qu'ils ne sont pas identiques, mais il est très difficile de les différencier lorsque l'on aborde un sujet de si loin. Même quand ce n'est pas difficile, cela prend du temps que je n'ai pas ;-)

11voto

Gaston Points 1

Je vous suggère de télécharger et d'installer un minimal ensemble de MinGW et aussi un ensemble minimal de MSYS. L'installateur de MinGW vous donne une interface graphique facile pour choisir les paquets que vous voulez installer. Si tout ce que vous voulez est BASH, alors l'installation ne prendra pas plus de quelques mégaoctets.

UPDATE : J'ai déménagé à la MSYS2 qui est beaucoup plus avancé, et possède un portage de l'outil pacman d'ArchLinux pour la gestion des paquets. L'installateur de MSYS2 a tout ce dont vous avez besoin, et utilise en outre mintty ce qui est absolument parfait.

11voto

Andreas Points 1393

Il y a aussi Clink disponible sur sur GitHub . Il s'intègre à l'invite de commande de Windows en utilisant des bibliothèques de crochets.

De la description du projet :

Clink combine le Shell natif de Windows cmd.exe avec la puissante fonctionnalités d'édition de ligne de commande de la bibliothèque GNU Readline, qui fournit de riches fonctionnalités de complétion, d'historique et d'édition de ligne.

(il ne fournit donc pas les fonctionnalités du langage de programmation bash ou d'autres fonctionnalités Unix).

J'utilise Linux au travail et je me retrouve parfois à tabuler dans cmd qui ne se comporte pas comme je l'attends de Bash. Avec Clink, je peux surmonter certains de ces défauts.

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X