在 Windows 10 上面跑的 Ubuntu / bash …

上個月(2016/03)底,今年微軟 Build 大會最讓人震驚的消息,沒有之一,透過微軟跟 Canonical (開發 Ubuntu 的公司) 的合作,未來可以在 Windows 10 上面跑原生的 Ubuntu / bash,不是跑在虛擬機或使用模擬器、容器等技術,是原生的!有了這個重大的改變,或許未來都不需要使用到 cygwin、msys 或 GnuWin 這種專案了?一時沒空把所有資訊都看完,先來整理一些筆記 …

這項更新目前已經有測試版可以玩了,正式的版本預計在今年夏天的 Windows 10 年度更新釋出,之後就會在 Windows 10 上面有一個完整的 Ubuntu user space 子細統,不但 Linux 上常見的 utilities 如 grep, sed, awk 等工具未來都可以直接跑在 Windows 10 上,甚至 Debian / Ubuntu 在使用的套件管理系統 apt 也都可以直接使用,不論是對於使用者或是開發者都提供了更大的彈性以及便利性,同時代表未來 Windows 對 Linux 或其他原先只能跑在 unix-like OS 的專案會更加的友善。

微軟現在甚至使用 GitHub 來當 BashOnWindows 的 issue tracker:

https://github.com/Microsoft/BashOnWindows/issues

Microsoft-BashOnWindows-issues-on-GitHub.png

然後也有一個在 uservoice 上面的討論、反應平台:

https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/category/161892-bash

我從底下會提到的 Linux Command Line on Windows 影片,截了一些畫面出來:

可以看到 lsb_release -a 看到的是 Ubuntu 14.04.4 LTS:

screenshot-from-Linux Command Line on Windows-video-ll-lsb_release-a.png

示範一些常見的工具,例如 fdisk 、mount,還有貼上文字的功能:

screenshot-from-Linux Command Line on Windows-video-fdisk-and-mount-and-paste.png

透過 apt install gcc 來安裝 gcc:

screenshot-from-Linux Command Line on Windows-video-demo-apt-install-gcc.png

閱讀全文

用 bash-completion 增強 Bash shell 的自動補齊功能(apt-get / aptitude / portsnap … 等)

bash 預設的自動補齊功能只會補命令跟檔名而已,假如要 apt-get install openjdk-7-jre 的話只打了 openjdk-7- 按下 tab 是不會有效果的…

透過 bash-completion 這個套件的話就可以支援非常多常用工具的命令自動補齊,bash-completion 其實就是一堆 bash shell scripts 寫出來的自動補齊功能,基於 Ubuntu 的 GNU/Linux 分支可能都有內建了,如果沒有,手動安裝的方式也很簡單:

Debian/Ubuntu 系列用
sudo apt-get install bash-completion

如果是用 yum 來管套件的Linux distro (CentOS/Fedora/RHEL)
sudo yum install bash-completion

FreeBSD(新的套件管理系統請使用 pkg install 取代 pkg_add):
sudo pkg_add bash-completion

想知道 bash-completion 到底支援了多少命令,可以看一下他的 filelist (以 Debian sid 套件為例, 應該都大同小異):
http://packages.debian.org/sid/all/bash-completion/filelist

另外要注意的是,不是每個 distribution 裝起來的 bash-completion 都會幫你處理好自動取用 bash-completion 這件事,按照不同的系統可能要手動使用類似這樣的指令:
source /usr/local/share/bash-completion/bash_completion.sh

通常是會加在 bashrc 底下,system admin 的話加入系統預設的 bashrc 也是不錯的做法