Bagaimana saya bisa menggunakan shell mirip Bash di Windows?

53

Saya menggunakan Linux dan Mac, dan saya akan segera mengajarkan beberapa hal baris perintah.

Apa yang bisa saya instal pada Windows untuk memberi saya jendela terminal yang paling mirip dengan shell Bash Mac / Linux dasar?

Saya ingin dapat mendefinisikan .bash_aliases juga jika memungkinkan.

Michael Durrant
sumber
3
kami dulu puttyterhubung ke server linux nyata. di windows saya selalu enggan dan tergoda untuk menggunakan cygwin, enggan karena pengalaman instalasi saya yang kikuk. Tetapi secara pribadi, saya merasa lebih nyaman untuk digunakan daripada msys dan lebih cepat daripada vm. setelah terinstal, cygwin ternyata portabel entah bagaimana menyalin direktori itu sudah cukup, namun itu akan membuat nama pengguna baru pada setiap mesin / pengguna berdasarkan nama pengguna windows (secara default, setidaknya). Tetapi perlu diingat bahwa karena cygwin / msys dapat dilihat sebagai "distribusi" khusus, beberapa sakelar perintah [opsional] mungkin hilang. ujilah mereka.
n611x007
5
Microsoft baru saja mengumumkan bahwa pembaruan Windows 10 berikutnya akan mencakup Bash.
Dmitri Nesteruk

Jawaban:

42

Anda dapat menginstal Cygwin atau MSYS / MinGW , atau Anda dapat menginstal distribusi Linux lengkap di mesin virtual (misalnya, menggunakan VirtualBox ).

faffaffaff
sumber
Saya menggunakan cygwin yang 135 mb (dikemas 25 mb), disalin dari komputer lain (portable). itu menciptakan nama pengguna baru berdasarkan komputer baru pengguna saat ini, dan bekerja dengan baik jika tidak. cygwin saya saat ini adalah 800 mb, dengan lingkungan build, kode sumber 200-300 mb dan beberapa hal.
n611x007
2
Catatan: Anda sekarang dapat menginstal "Subsistem Windows untuk Linux" yang memungkinkan Anda untuk menjalankan shell dan alat Linux mode pengguna asli pada Windows. Lihat jawabannya di bawah ...
MrHinsh - Martin Hinshelwood
48

Anda sekarang dapat menginstal Subsistem Windows untuk Linux yang memungkinkan Anda untuk menjalankan shell dan alat Linux mode pengguna asli pada Windows . Ini memungkinkan Anda untuk menjalankan Bash shell langsung di Windows dan didasarkan pada Ubuntu.

Ini diperkenalkan di Windows 10 dengan Pembaruan Peringatan (2016) dan tidak diaktifkan secara default. Untuk mengaktifkan fitur baru pada mesin Pembaruan Ulang Tahun Windows 10, lakukan hal berikut:

  1. Arahkan ke Pengaturan -> Perbarui & Keamanan -> Untuk Pengembang dan pilih "mode Pengembang"
  2. Control Panel -> Program dan Fitur dan klik "Aktifkan atau matikan Fitur Windows" di panel kiri atas
  3. Di kotak dialog, centang "Subsistem Windows untuk Linux" dan klik Oke
  4. Mesin boot ulang
  5. Cari "bash" dan klik di atasnya, itu akan membuka command prompt dan menanyakan apakah Anda ingin menginstal "Ubuntu pada Windows", lanjutkan dengan "y"
  6. Setelah instalasi akan diminta untuk membuat nama pengguna dan kata sandi UNIX
  7. Anda sekarang siap menggunakan bash shell

Sedikit sejarah, pada tahun 2015 proyek Astoria mulai membawa aplikasi Android ke Windows dan mereka membangun subsistem Linux yang disebut Windows Subsystem untuk Linux (WSL) untuk tujuan itu. Akhirnya proyek Astoria dibatalkan karena merusak strategi UWP (Universal Windows Platform) mereka, tetapi beberapa bagian tetap dipertahankan dan membentuk dasar bash untuk Windows. Selama kursus, Microsoft berkolaborasi dengan Canonical (pembuat Ubuntu Linux) untuk memberi mereka gambar asli dengan semua alat / binari yang didukung.

Informasi lebih lanjut tersedia di sini,
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)

Nemo
sumber
Saya lebih suka jawaban ini!
Peter
1
@ Peter Terima kasih, mencobanya sebentar kemarin, bisa membuat gcc / g ++ berjalan, apakah Firefox dapat berfungsi melalui xserver (cukup lambat, mungkin mereka membatasi penggunaan CPU?), Chrome dan browser default macet dan beberapa perintah seperti 'layar' tidak berfungsi, semuanya harus disetrika di pembaruan berikutnya untuk bash karena masih dalam versi beta. Setelah mengatakan ini, hanya memiliki bash tersedia secara native di Windows adalah fantastis! Ini membuka banyak kemungkinan. Kudos Microsoft!
Nemo
Anda juga dapat menjalankan ini di Powershell (jalankan sebagai admin): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"Dan instal salah satu dari yang berikut ini dari toko Windows: Ubuntu, Debian, OpenSUSE, Kali Linux
Zhenhir
18

Berikut adalah daftar opsi yang tersedia pada 2018-05 dengan beberapa pembaruan mengenai WSL selama 2019-01 bersama dengan sedikit detail mengenai masing-masing.

Opsi yang menonjol

Cygwin dan Babun

Cygwin menyediakan yang berikut:

  1. bash shell dan terminal Mintty,
  2. berbagai utilitas Linux umum yang dikompilasi untuk dijalankan pada Windows
  3. lapisan kompatibilitas komprehensif yang memungkinkan program Linux dijalankan pada Windows.

Cygwin bertujuan membuat porting aplikasi Linux di Windows menjadi mudah. Jika beberapa program C dirancang untuk Unix dan mengharapkan untuk menggunakan fitur-fitur seperti pipa, file Unix-style dan akses direktori dll maka Anda dapat mengompilasinya untuk Cygwin dan Cygwin akan bertindak sebagai lapisan kompatibilitas antara kode dan OS asing (Windows) . Ini memungkinkan program C yang sama berfungsi pada Linux dan Windows dengan sedikit atau tanpa modifikasi. Daftar besar program Linux telah dipatuhi dan dapat dijalankan saat Anda menginstal Cygwin. Namun Anda, pengguna program ini, mungkin harus terbiasa dengan Unix. Misalnya, Anda mungkin harus meneruskan argumen seperti /cygdrive/c/autoexec.batalih - alih c:\autoexec.batdan siap untuk berurusan dengan output dengan penghentian baris Unix ( \n) alih-alih penghentian baris Windows ( \r\n).

Kumpulan semua program Cygwin terdiri dari repositori dan meskipun Cygwin tidak memiliki manajer paket Linux tradisional, Anda dapat menambah, menghapus, dan memperbarui program dari repositori ini kapan saja dengan cara yang sangat berlawanan dengan intuisi (Anda menjalankan Cygwin setup.exe di kapan saja setelah instalasi selesai)

Babun adalah Cygwin dengan manajer paket dengan fitur lengkap (pakta), oh-my-zsh untuk shell, git, pembaruan otomatis, dan arsitektur berorientasi plug-in. Meskipun shell default adalah zsh, Anda dapat dengan mudah beralih ke bash. Sepertinya upgrade yang bagus dari vanilla Cygwin jika Anda tidak keberatan dengan bobot ekstra.

Mingw-w64

Mingw-w64 menyediakan yang berikut:

  1. sebuah bash shell,
  2. cukup banyak utilitas Linux,
  3. toolchain pengembangan SW untuk membangun aplikasi yang akan berjalan tanpa lapisan kompatibilitas Linux (atau dengan yang minimal).

MinGW terutama distribusi perangkat lunak dan platform pembangunan untuk Windows. Khususnya itu adalah port Windows dari alat kompilator GNU, seperti GCC, make, bash, dan sebagainya. Ini mencakup sejumlah besar alat GNU dan lapisan kompatibilitas Unix minimal.

Perbedaan utama antara Mingw-w64 dan Cygwin adalah pada prioritas: Cygwin bertujuan untuk menyediakan lapisan kompatibilitas POSIX lengkap yang terdiri dari implementasi penuh semua panggilan sistem utama dan perpustakaan; kinerja adalah sekunder dari kompatibilitas. MinGW bertujuan untuk kinerja sehingga tidak akan menyediakan API POSIX tertentu yang tidak dapat diimplementasikan dengan mudah dan / atau cukup cepat di Windows. Juga target utama MinGW adalah pengembang S / W. Namun demikian, pengguna biasa juga dapat menikmati cangkangnya dan utilitas umum yang disertakan.

MSYS2 dan Git untuk Windows

MSYS2 menyediakan yang berikut:

  1. bash shell dan terminal Mintty,
  2. cukup banyak utilitas Linux,
  3. manajer paket baris perintah berfitur lengkap untuk menginstal program OS
  4. bagian dari Cygwin dan MinGW untuk mendukung pembuatan aplikasi baik dengan atau tanpa lapisan kompatibilitas Linux yang komprehensif.
  5. repositori perangkat lunak dan manajer paket (pacman) yang membuatnya mudah untuk menginstal, menggunakan, membangun, dan port perangkat lunak pada Windows.

MSYS2 juga terutama merupakan distribusi perangkat lunak dan platform pembangunan untuk Windows seperti MinGW tetapi menggabungkan cara Cygwin dan cara MinGW. Anda dapat menggunakan MSYS2 untuk membuat "program MinGW" atau "program MSYS2" . Tautan selanjutnya ke lapisan kompatibilitas MSYS2 (msys-2.dll) yang dengan sendirinya mengikuti perkembangan lapisan kompatibilitas Cygwin dengan beberapa tambahan / modifikasi . Repositori dari 2 proyek sama sekali tidak terkait. Jadi, meskipun MSYS2 dan Cygwin grep.exekeduanya menyediakan mereka mungkin memiliki versi yang sama sekali berbeda.

Git untuk Windows hanya MSYS2 dengan git diinstal atau setidaknya berdasarkan MSYS2 . Ini menyediakan shell yang sama (bash), terminal (Mintty) dan manajer paket (pacman). Tampaknya menjadi cara paling populer untuk menjalankan Git dominan di Windows dan seiring dengan itu Anda mendapatkan lingkungan Unix yang bagus.

Subsistem Windows untuk Linux (WSL)

WSL memecahkan masalah yang sama menggunakan metode yang sama sekali berbeda. Anda menjalankan kode yang sama persis dengan yang Anda jalankan di sistem Linux pada WSL yang memotong panggilan kernel dan menerjemahkannya ke panggilan kernel windows (ini kebalikan dari Wine). Tentu saja terjemahannya tidak sempurna tetapi Microsoft menjatuhkan peringatan beta . Karena WSL tidak tersedia di Windows Server sebelum 2018, saya belum melihatnya sebanyak itu. Pokoknya Anda mendapatkan bash shell yang bagus dengan sebagian besar barang CLI yang Anda harapkan untuk ditemukan pada instalasi stok Ubuntu. Microsoft secara resmi menyatakan bahwa "WSL tidak bertujuan untuk mendukung desktop GUI atau aplikasi"namun ada instruksi tidak resmi tentang cara melakukannya. Tampaknya saat ini (awal 2018) kelemahan utama WSL adalah sebagai berikut: a) membuat layar dan akses disk sangat lambat b) Anda tidak seharusnya mengedit file WSL (Linux) dari Windows c) ini hanya berjalan pada Windows 64bit. Berikut ini adalah perbandingan tua tapi bagus dengan cygwin (perhatikan bahwa Rich Turner adalah anggota tim WSL dan ia telah memposting banyak info berguna mengenai WSL)

Kesamaan

Kecuali dari WSL sebagian besar alat di atas berbagi banyak teknologi umum (perpustakaan, executable, konsep). Misalnya shell bash yang datang dengan MinGW tergantung pada msys-2.dll yang itu sendiri adalah garpu dari cygwin.dll. Jadi ya ada banyak ruang untuk kebingungan :-)

Lebih banyak pilihan

Cmder menyediakan terminal yang bagus dan shell mirip bash untuk Windows. Komponen utamanya adalah Conemu (terminal). Selain itu, Clink menambahkan Clink yang menyediakan pengeditan baris perintah Bash-style , tata letak prompt khusus, dan skema warna Monokai. Ini sangat (atau mungkin sepenuhnya) kompatibel dengan program konsol windows asli.

Scoop menyediakan manajer paket baris perintah untuk banyak program lintas-platform yang terkenal termasuk banyak alat GNU. Ini mengunduh paket yang sudah dikompilasi. Itu tidak menyediakan baik shell maupun terminal tetapi sebaliknya berjalan di bawah cmd.exe windows '(dengan semua keterbatasannya tetapi juga dengan kompatibilitas penuh dengan program-program konsol windows asli). Ini juga tidak termasuk suite kompiler (tapi tentu saja kompiler dan alat pengembangan adalah paket khas yang dapat Anda instal dengan scoop). Banyak program yang diinstal Scoop baik datang langsung dari proyek MinGW / MSYS, atau dibangun menggunakan alat mereka.

Pilihan lebih banyak lagi

Solusi di bawah ini tampaknya tidak aktif dan saya tidak pernah mengujinya tetapi mereka tampaknya melakukan pekerjaan untuk orang lain:

Gow (Gnu On Windows) adalah alternatif ringan untuk Cygwin tanpa shell. Ia menggunakan penginstal Windows yang nyaman yang menginstal sekitar 130 aplikasi open source Linux yang sangat berguna yang dikompilasi sebagai binari win32 asli dan tersedia melalui cmd.exe windows. Ini dirancang untuk menjadi sekecil mungkin (sekitar 10 MB).

UnxUtils & GnuWin32 : UnxUtils adalah kumpulan port dari utilitas mirip Unix mirip GNU ke Win32 asli, dengan executable hanya tergantung pada Microsoft C-runtime msvcrt.dll. Anda harus mengunduh bagian utama dan beberapa pembaruan . GnuWin32 memiliki versi yang lebih baru daripada UnxUtils, tetapi membutuhkan file pendukung (mis. DLL)

MSYS & MinGW tampaknya telah telah usang oleh MSYS2 & MinGW-W64 jadi aku tidak pernah melihat mereka.

Beberapa masalah umum pada Cygwin & MSYS2

Mengenai terminal

Mintty adalah terminal yang digunakan dalam Cygwin, MSYS2 dan turunannya. Orang harus menyadari bahwa jika Anda menjalankan program konsol Windows asli itu bukan pengganti tanpa rasa sakit untuk Windows Command Prompt. Sementara program dengan output teks sederhana biasanya berfungsi dengan baik, yang interaktif dan layar penuh sering mengalami masalah. Baca lebih lanjut di beranda Mintty dan baca juga entri "Beberapa program konsol asli tidak berfungsi saat dijalankan dari Git Bash" di Git untuk Windows FAQ . Entri itu memiliki rekomendasi ini untuk dibuat ketika Anda menghadapi masalah seperti ini:

Ada beberapa metode untuk mengatasi masalah ini:

  • Jalankan program yang memiliki masalah menggunakan utilitas winpty . Hal ini memungkinkan Anda untuk tetap menggunakan terminal mintty yang lebih baik, tetapi dapat menjadi berat jika Anda memerlukan solusi untuk banyak program.
  • [gunakan cmd.exe] dan konfigurasikan untuk "Edit Cepat", ukuran yang wajar dan gulir-kembali dan font unicode yang sesuai. Anda masih harus hidup dengan kebiasaan [cmd.exe] lainnya.
  • Instal dan gunakan Conemu .

Masalah lain

Dua hal paling penting untuk diingat adalah ini:

  1. ada pertukaran antara kekuatan dan masalah debug yang sulit. Semakin kuat solusinya, semakin banyak hal yang bisa salah, bahkan dengan cara yang pada awalnya tampak tidak terkait dengan Linux-layer Anda.

  2. jika Anda tidak memiliki banyak pengalaman Linux, jangan gunakan solusi yang lebih kuat seperti Cygwin / MSYS2 / MinGW

UnxUtils dan GnuWin32 memiliki kekuatan paling sedikit tetapi juga paling tidak berpotensi menyebabkan Anda sakit kepala. Cygwin dan yang serupa akan berada di posisi teratas dalam hal kekuatan dan sakit kepala. Cmder ada di suatu tempat di tengah. Jadi, ketika Anda membutuhkan solusi yang paling kuat, tidur nyenyak dan berkonsentrasi penuh. Hindari menggunakan solusi yang kuat saat menguji sesuatu yang baru dan mungkin tidak stabil. Juga jangan lupa bahwa solusi kompleksitas sedang seperti cmder tidak bersih.

Masalah perintah Linux membayangi jendela yang merupakan penyebab umum kesulitan untuk debug masalah dalam solusi seperti Cygwin / MSYS2 / MinGW. Berikut ini contohnya: Saya memiliki file .bat yang menggunakan perintah batas waktu. Ketika dijalankan di bawah Cygwin itu akan gagal karena timeout juga merupakan perintah Linux tetapi dengan sintaks yang berbeda. Setelah saya melihat masalah yang saya temukan saya bisa menambahkan PATH = ... di bagian atas file .bat untuk memastikan perintah windows memiliki prioritas. Tapi kemudian saya mendapat kesalahan "Pengalihan input tidak didukung" lebih samar dan diselesaikan untuk solusi sebelum menemukan alasannya.

Berikut adalah contoh masalah dengan cmder. Saya menjalankan versi Windows secara serempak di bawah Cmder dan di bawah beberapa kondisi khusus, perangkat itu sama sekali tidak ada pesan kesalahan . Perintah yang sama selalu berjalan dengan sempurna di bawah cmd.exe. Yang lucu adalah bahwa itu juga berjalan dengan sempurna di bawah Cygwin (sebenarnya jika Anda memiliki nama file Unicode terminal Cygwin lebih baik daripada cmd.exe karena cmd.exe sering menampilkan teks Unicode salah bentuk).

Tentang panduan ini

Selama 2017-05 saya muak tidak memahami perbedaan alat-alat di atas walaupun saya sudah menggunakan beberapa dari mereka sejak lama (terutama CygWin dan cmder tetapi tidak pernah untuk tujuan pengembangan). Jadi saya menghabiskan beberapa jam untuk menggosok lanskap. Panduan ini adalah hasil dari catatan yang saya simpan. Saya bukan ahli di lapangan, tetapi saya sudah berusaha keras untuk menemukan semua informasi yang relevan, membacanya dengan mata kritis dan menyajikan bagian-bagian terpenting dengan jelas. Tolong beri komentar jika ada sesuatu yang salah dan saya akan melakukan yang terbaik untuk memperbaikinya.

Akhirnya permintaan maaf untuk beberapa masalah terminologi: Dalam teks ini saya terkadang menggunakan istilah Linux sebagai ganti UNIX atau POSIX. Saya tahu mereka tidak sama tetapi sangat sulit untuk membedakan mereka ketika mendekati topik dari jarak yang begitu jauh. Bahkan ketika itu tidak sulit butuh waktu yang tidak saya miliki ;-)

ndemou
sumber
2
Ini jawaban yang luar biasa, terima kasih telah berbagi temuan dan pengalaman Anda.
Daniel Sokolowski
Jawaban komprehensif, tapi pacmanbukan,packman
Adrian Günter
Bagaimana mungkin ini bukan jawaban yang diterima. Terima kasih telah merinci semua ini.
42.
10

Saya akan menyarankan Anda men-download dan menginstal minimal set MinGW dan juga seperangkat minimal MSYS. Pemasang MinGW memberi Anda GUI mudah untuk memilih paket apa yang ingin Anda instal. Jika yang Anda inginkan adalah BASH, maka pemasangan tidak akan membutuhkan lebih dari beberapa megabyte.

PEMBARUAN: Saya pindah ke MSYS2 yang jauh lebih maju, dan memiliki port alat pacman ArchLinux untuk manajemen paket. Pemasang MSYS2 memiliki semua yang Anda butuhkan, ditambah lagi menggunakan mintty yang benar-benar sempurna.

DejanLekic
sumber
10

Ada juga Clink yang tersedia di GitHub . Itu mengintegrasikan dirinya ke dalam command prompt windows menggunakan pustaka kait.

Dari deskripsi proyek:

Clink menggabungkan shell Windows asli cmd.exe dengan fitur pengeditan baris perintah yang kuat dari pustaka GNU Readline, yang menyediakan kemampuan penyelesaian, sejarah, dan pengeditan baris yang kaya.

(jadi itu tidak menyediakan fitur bash-as-a-pemrograman-bahasa atau barang Unix lainnya)

Saya menggunakan Linux di tempat kerja dan kadang-kadang menemukan diri saya di cmd yang tidak bertindak seperti yang saya harapkan dari Bash. Dengan Clink saya bisa mengatasi beberapa kekurangan ini.

Akhir-akhir ini, saya juga menemukan proyek yang menjanjikan, tetapi belum 'can-do-all' yang disebut flinux yang mengemulasi fungsi sistem Linux dan menyediakan beberapa jenis sistem di atasnya (saat ini didasarkan pada Arch Linux)

Andreas
sumber
Apakah Clink benar-benar mengubah bahasa, atau hanya meningkatkan sesuatu di cmd.exe? Ini tidak sepenuhnya jelas dari jawabannya.
Sarge Borsch
Ini memungkinkan Anda untuk menggunakan beberapa fitur * nix shell yang biasa, seperti pencarian terbalik menggunakan Ctrl + R, penyelesaian perintah pencarian PATH dll.
Andreas
Jadi itu bukan implementasi bash, kan?
Sarge Borsch
Erm, tidak. Perpanjangan ke cmd.exe, sama seperti yang dijelaskan di situs;)
Andreas
7

Selain apa yang dikatakan faffaffaff , Git untuk Windows mencakup Bash dan beberapa program baris perintah Linux yang umum (misalnya Vim , sed , dan gawk ). Ini didasarkan pada MSYS . Versi programnya sudah tua, misalnya Bash adalah versi 3.1. Cygwin akan memiliki versi utilitas yang lebih baru.

Saya juga menggunakan ConEmu sebagai terminal emulator (terutama untuk penyorotan sintaks di Vim, halaman tab, dan copy-paste lebih mudah). console2 juga merupakan terminal emulator yang populer walaupun saya belum mencobanya.

doubleDown
sumber
BTW: ConEmu juga mengenali instalasi MSYS2 dan memungkinkan untuk beberapa integrasi Clink.
Andreas
2

Ini adalah salah satu hal pertama yang saya lakukan ketika saya menyiapkan mesin Windows baru:

Konsol fungsional dan ramping di Windows

u84six
sumber
3
Pastikan untuk menambahkan kutipan dari tautan untuk mencegah efek pembusukan tautan.
oldmud0
1

Saya baru saja mencoba dengan Babun , yang mengintegrasikan Cygwin secara internal, dan rasanya enak bagi saya :)

File unduhannya agak besar, sekitar 250 MB. Tetapi pemasangannya mudah; tidak perlu mengkonfigurasi apa pun dan itu hanya berfungsi!

di bawah kekuasaan
sumber
Babun termasuk seluruh cygwin, ini benar-benar sangat besar. Proses instalasi agak macet (saat ini arsip zip diblokir oleh chrome sebagai file berbahaya). Tapi sejauh ini penggantian terminal terbaik yang pernah saya temukan.
Tombart
Babun sangat lambat untukku. Saya beralih menggunakan conemu dan git shell
kata