Thử sử dụng Windows Subsystem for Linux

Windows Subsystem for Linux được release cũng khá lâu rồi nhưng mà hôm nay Đạt mới dùng thử thì thấy tuyệt vời như ông :sun_with_face:

Windows Subsystem for Linux (WSL) là gì

Là “thứ” cho phép mình chạy linux tools như grep, vi, cat trên windows như đang chạy trên linux. WSL còn cho phép mình cài đặt các chương trình linux bằng apt-get nếu mình đang dùng ubuntu.

Cài đặt như thế nào?

Mở Powershell (ở admin mode) rồi chạy lệnh

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Sau đó cài Ubuntu https://www.microsoft.com/store/productId/9NBLGGH4MSV6
Các bạn có thể chọn distribution khác nếu thích

Sau khi cài xong thì tada bạn có được linux trên Windows như hình

Làm sao cài đặt các phần mêm như git?

Hệt như đang chạy Ubuntu

sudo apt-get install git

Làm sao xem được file ở ổ C?

Ổ C được mount vào /mnt/c
Các ổ khác cũng được mount vào cùng thư mục /mnt

cd /mnt/c

Windows Subsystem for Linux (WSL) hoạt động thế nào

  • Windows Subsystem for Linux (WSL) về bản chất giống như một công cụ thông dịch giữa các tools chạy trên *NIX và Windows Kernels.

  • Các hệ điều hành có 2 phần. Một phần là kernel (gọi là kernel space trong *nix) và user-mode(gọi là user space trong *nix). Kernel và user-mode nói chuyện với nhau thông qua một thứ gọi là system call.

  • System call của Windows khác với system call của *NIX nên các phần mềm của *NIX không thể chạy được trên Windows. Ở đây Microsoft đã xây dựng Windows Subsystem for Linux (WSL) nằm ở giữa user-mode (bash, git, Ruby, etc) và Windows Kernel và nó làm nhiệm vụ “thông dịch viên”.

  • Lúc này những tool được viết trên *NIX có thể chạy trên Windows vì khi nó thực hiện system call, WSL trả lời hệt như trên *NIX nên mấy cái tool này cứ hoạt động bình thường mà không biết là nó đang chạy trên Windows

Hình minh họa

Đọc - Xem thêm

9 Likes

Mình có thể thực hiện những thao tác phức tạp hơn trên Subsystem này không vậy anh?
Ví dụ quyền root như thế nào, có ssh được không, các package cài bằng apt-get lưu ở đâu, hay có thể cài anaconda và tạo virtual enviroment như mình làm bình thường trên Linux được không? (Em muốn tham khảo để chuyển sang dùng thử chứ như hiện tại thì font chữ của jupyter notebook trên Windows xấu quá :disappointed_relieved:)

Làm được hết chứ em.

image

còn muốn vào cái ubuntu này thì không cần ssh, mở ubuntu console lên là được

image

Lưu vào trên máy của em bình thường thôi

letd@letd-PC:~$ which git
/usr/bin/git

Còn cụ thể ở đâu thì em xem ở đây:

Anh nghĩ là được, em có thể thử.

4 Likes

Góp ý, bạn nào muốn chạy GUI trên WSL thì cứ download 1 X-server nào đó, eg. Xming hay Vcxsrv. Rồi vô ~/.bashrc và bỏ thêm line

export DISPLAY=:0.0

nếu như bạn không muốn reboot cái shell lại thì cứ gỏ

source ~/.bashrc

Rồi bạn chỉ cần test nó bằng cách chạy cái X-server bạn đã download, rồi chạy 1 cái program GUI nào đó, chẳng hạng như Gvim

gvim ~/.bashrc

Nếu như bạn làm đúng thì máy sẽ hiện thêm 1 cái window nữa, như sau.

Voila, and you’re done. :+1:

6 Likes

WSL làm được hết mọi lệnh của Linux, kể cả cài phần mềm từ apt-get
Compile C++ khá tiện

2 Likes

Chém gió thêm tí :kissing_smiling_eyes:

Nếu như bạn hay phải dùng WSL với kí tự Unicode thì WSL mặc định của Win 10 là một sự lựa chọn rất tồi. Không như Terminal của Linux có thể load được mọi kí tự Unicode của các ngôn ngữ, WSL của Windows dựa vào locate của Windows, mà Windows hỗ trợ Unicode trên cmd/powershell đâu có tốt :v Dù codepage của WSL mặc định là UTF-8 nhưng bạn không thể dùng IME trên đó, paste dãy kí tự tiếng Trung, tiếng Nhật mà không đúng font hỗ trợ thì chỉ thấy 1 dãy ô vuông thôi :frowning:

Chưa kể, nếu như bạn không dùng Win 10 mà vẫn muốn cài WSL thì bạn sẽ nghĩ đến việc cài Cygwin, nhưng cài Cygwin có vẻ hơi nặng nề và rườm rà :3

Mình recommend công cụ này:

Cũng như WSL mặc định của Win 10, wsltty chạy được các lệnh Bash trên Ubuntu. Điểm cộng của nó là hỗ trợ kí tự của các ngôn ngữ rất tốt, dùng IME thoải mái, y như Terminal xịn :kissing_cat:

hehe

5 Likes

anh cho em hỏi nếu cài đặt jdk ở win 10 thì có cần cài ở WSL nữa không ạ ?

Trước đây mình cũng hay dùng WSL và thấy nó cũng khá hay. Thực ra là WSL nó interpreter command của nó sang powershell command.

không cần đâu bạn.

2 Likes

Không sử dụng được các lệnh javac và java khi chạy trên WSL nha bạn. Mình vừa thử xong

tại vì cách cài đặt biến môi trường của windows khi bạn sử dụng với ps(hoặc cmd) khác với wsl. Có cách cấu hình như sau:

export JAVA_HOME="/mnt/c/Path/to/jdk/bin"
export PATH="JAVA_HOME:$PATH"

thế đó

1 Like

Mình set path rồi mà vẫn không được bạn à :slight_smile:

Mình tham khảo link này làm đc rồi bạn :slight_smile:

1 Like

Java hỗ trợ Windows mà? Cần gì WSL???

2 Likes

Chắc anh Đạt viết bài về WSL hay quá nên bạn ý định dùng WSL thay luôn cmd anh :joy:

2 Likes

Anh cùng từng mê WSL, nghĩ chắc khỏi cài máy ảo Linux. Nhưng xài xong thấy cmd hay powershell render utf-8 quá cùi, chữ trên WSL bị ? nhiều nên thôi

2 Likes

Em dùng wsl không bao giờ sướng bằng hàng gốc thật. Em công nhận shell của linux hơn ms-dos của win nhiều! Mình dùng cmd hay ps toàn lỗi utf-8. Còn terminal(zsh) dùng có bị sao đâu :v. Mà kể ra powershell có chocolatey cũng tốt nhưng ít package dùng quá! Ít ra mac còn có homebrew

P/s: Bạn nào muốn dùng cmd tốt thì tải cmder về mà dùng. Hàng chất lượng cao đi kèm git luôn

2 Likes

Lỗi phổ biến nhất của cmder/ConEmu là lặp lại kí tự Unicode. Lỗi này xảy ra đối với tuỳ phiên bản Win 10, nhưng để tránh lỗi lặt vặt (mà cực kì phiền toái này) thì tốt nhất là nên tránh nó ra.

Bonus phiền phức:

Mình đã dùng thử cmder và đã bỏ.

Nếu các bạn không quan tâm đến kí tự Unicode, thì dùng cmder cũng tốt.

4 Likes

Có điểm khác biệt nào giữa dùng terminal trên win10 vs trên máy ảo không anh ?

terminal (wsl) trên win 10 chủ yếu là lệnh nó dịch sang powershell và nó có vài điểm bất tương đồng. Dùng terminal gốc của linux sẽ tốt vì nó dùng đúng chính xác với hệ điều hành unix(linux)

2 Likes

Powershell liên quan gì ở đây vậy em?

Bên trên anh Đạt đã nói rồi mà, bản chất WSL là một component ở tầng Kernel để thông dịch system call của phần mềm *UNIX sang Windows Kernel. Giống như kiểu “giả lập môi trường” vậy

Powershell hay cmd chỉ đơn giản là môi trường dòng lệnh thôi. Em thử gõ bash trên cmd hay Powershell xem, y hệt nhau và cùng chạy WSL

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?