深刻體驗bash on windows,在windows上搭建原生的linux開發環境,酷!

今年微軟Build 2016大會最讓開發人員興奮的消息之一,就是在Windows上能夠原生運行Linux bash,對開發人員來講,這是一個喜聞樂見的消息。前端

1 安裝

你必須安裝開發者預覽版本,才能使用windows的linux subsystem功能。java

  1. 首先打開你的Windows 10的設置,在"更新和安全"選項中(個人機器是英文操做系統,但中文操做系統相似),選擇"開發者",而後選擇"開發者模式":node

  2. 在Windows 更新和安全選項中,選擇"Windows 更新",在"更新設置"中選擇高級選項,你必須打開"內部預覽版本"選項,而且將內部預覽的級別設置爲最快:python

  3. 在"設置"->"系統"選項中,查看當前系統信息,你的OS版本必須是14316,若是不是這個版本,請運行在線升級,升級到這個版本:linux

  4. 升級完成後,打開"控制面板"-》"程序",選擇"打開或者關閉Windows特性",找到Windows Subsystem for Linux(beta)點選並肯定,系統會下載更新並提示重啓機器:android

  5. 重啓完成後,進入命令行程序,激動人心的時刻來臨了,在命令行下敲bash,會提示你是否繼續,選擇yes,系統會安裝Ubuntu文件系統等待完成後,系統會切換到你熟悉的Linux bash模式,試試你熟悉的ls等命令:nginx

  6. 打開Windows菜單,你會發現系統中多了一個Ubuntu的圖標,這個就是bash on Ubuntu on Windows:c++

  7. 簡單測試一下python,perl等語言,發現已經裝好了,固然,這個就是Ubuntu的bash,你能夠安裝Java,Ruby等等:git

下面來實際測試下ubuntu on windows環境!github

2 系統檢測和更新

2.1 版本檢測

運行 uname -a 結果以下

webmaster@FEKETERIGO-PC:~$ uname -a
Linux FEKETERIGO-PC 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
webmaster@FEKETERIGO-PC:~$

運行 lsb_release -a 結果以下

webmaster@FEKETERIGO-PC:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty

能夠看到,安裝的是ubuntu 14.04 trusty

2.2 系統更新

既然是ubuntu,就可使用apt-get進行軟件包管理。

首先替換自帶的更新源

sudo mv /etc/apt/sources.list /etc/apt/sources.list.save

把下面的阿里源內容粘貼到 /etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

你也可使用163源等,選取原則是更新速度,目前測試的狀況是阿里雲的源更新速度最快。

接着運行下面的命令進行系統更新,若是速度很慢的話請嘗試使用其餘的源,另外ubuntu的源是版本相關的,注意別添加錯誤版本的源。

sudo apt-get update
sudo apt-get upgrade

使用sudo命令以前能夠運行 passwd 更新當前用戶的命令, bashonwindows默認運行在用戶模式,
windows會把當前用戶添加到sudoer列表中,若是想切換到超級管理員,須要手動輸入su -

3 搭建開發環境

3.1 使用apt和ppa repository安裝git

ubuntu trusty默認的git版本是1.9.1

若是你不想使用git最新版本的話能夠運行sudo apt-get install git 直接安裝

若是想安裝最新的git版本參考下面的命令

sudo add-apt-repository ppa:git-core/ppa 
sudo apt-get update
sudo apt-get install git

sudo add-apt-repository ppa:git-core/ppa 會在/etc/apt/sources.list.d 目錄下面生成一個
git-core-ppa-trusty.list文件,而後運行sudo apt-get update 的時候會從相應的倉庫裏面獲取新
的git版本信息。

因爲每一個人的網絡環境不同, 若是你更新失敗,使用apt-get不能安裝最新版本的git的話,請到github上面下載源碼進行編譯安裝,過程也很簡單
這裏就不寫源碼編譯教程了, git源碼點擊 這裏

3.2 使用pyenv搭建python開發環境

命令以下

sudo apt-get install curl
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
pyenv install 2.7.11
pyenv install 3.5.1
pyenv shell 3.5.1

python的2.x和3.x版本不兼容,全部把兩個版本多安裝到本地,方便須要的時候進行版本切換,使用命令pyenv shell 2.7.11
指定當前的python版本。上面的命令指定的python版本是3

python的另外一個有用的工具是virtualenv,它和pyenv都能實現python版本的切換,不過實現的方法卻截然不同。
pyenv在用戶模式下安裝多個版本python,可是每個python版本的包依賴仍是安裝的同一個位置,它不能解決兩個項目中引用
同一個庫有版本衝突,可是viertualenv能夠。

virtualenv給每個python項目安裝一個項目內部python,具體版本能夠在初始化的時候指定,項目的依賴也是安裝在內部python的
路徑下面,這樣能防止和系統上其餘python項目的依賴衝突, 隔離性更高,很差的地方是安裝和使用略微複雜。

具體使用哪一個工具看我的喜愛,github上面pyenv的關注度要高點,並且如今pyenv有一個virtualenv插件,可使用後者一樣的功能,
我我的仍是推薦使用pyenv。

3.3 使用rvm安裝ruby

curl -L https://get.rvm.io | bash -s stable --autolibs=enabled --ruby
rvm install 2.3.1
bash --login
rvm use ruby-2.3.1

具體命令輸入rvm help,很好掌握。

3.4 使用gvm安裝go語言

curl -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash
gvm install go1.6
gvm use go1.6 --default

因爲hugo是使用go語言開發的,趁着這個機會向學習一些這個由google開發的編程語言,本博客就是使用
hugo搭建的,服務器使用firebase,firebase提供和github pages同樣的免費靜態服
務器的功能,穩定性比github要好,github在國內的訪問速度實在不能再慢了,特別是在clone大一點的項目的時候。

go語言開發的程序有一個好處就是沒有運行時依賴,打包成exe就能直接運行,簡單方便,更多的內容之後再更新吧,這裏集中在開發環境
搭建這個主題上面。

3.5 使用nvm安裝nodejs

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.0/install.sh | bash
nvm install v6.2.0
nvm use v6.2.0

node.js能夠說是從2015年以來最火的語言了,node.js是後端工程師轉向前端最好的工具,博主一塊兒就是java後端開發工程師,偶然的機會
學習了node.js,而後開始了本身的前端工程師的進化之路,目標是全棧工程師。

node.js還有一個npm包n能夠用來進行版本管理,不過你須要先安裝一個node.js才能使用npm install -g n安裝這個工具

nnvm都很好用,你能夠隨便選擇一個,也能夠兩個都安裝,他們之間沒有衝突,能夠共存。

這裏注意一下,若是你使用的是 windows build 14352 的話,使用nvm安裝nodejs可能會出現錯誤,詳情參見這裏
我安裝的時候是出現問題,可是又沒有看到其餘人遇到這個問題,若是你安裝的windows預覽版是比14352更新的版本的話,你能夠本身測試下

3.6 安裝gcc工具鏈

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev

這些工具不只僅是c和c++開發者纔會用到,若是你開發一個node.js native模塊,你也須要這些工具。

3.7 安裝nginx

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx

和安裝git的時候同樣,這裏經過添加nginx的第三方repository,實現apt-get方式安裝nginx最新版本,比源碼編譯安裝方式在管理上仍是要方便一點。

3.8 使用shell安裝rust-lang

安裝命令,很是簡單

curl -sSf https://static.rust-lang.org/rustup.sh | sh

rust是和node.js同樣熱門的新星編程語言,不過和node.js不一樣,rust不是一款前端領域的編程語言,而是一款系統編程語言。

rust的有點是安全、高併發,吸取了大量現代高級編程語言的有點,極力避免現有編程語言的各類缺點,讓我印象最深入的一個特性是
rust的垃圾回收機制,

最開始的時候rust也是使用相似java語言的garbage collector方式實現垃圾回收,後來受不了gc的
運行時性能損耗,本身實現了一套更高效的垃圾回收機制,極大的提升的系統穩定性和性能。

並且在rust在1.0的時候已經實現了自舉(本身編譯本身),後面版本的rust都是使用rust本身編譯出來的,包括編譯器。

惟一很差的地方是rust語言爲了最大程度的幫助開發人員避免犯錯誤,採用了極其複雜的語法,對於剛開始學習編程語言的人來講,不建議學習
rust,由於rust的學習曲線很是陡峭,入門語言選擇c或者java都是不錯的。

4 最後總結

雖然這篇文章沒有講一些高深的內容(水平有限), 可是仍是總結一些。

4.1 關於包管理

不論是操做系統,linux、mac、windows,仍是編程語言,java、node.js、rust,流行的趨勢是自帶包管理工具

linux 有apt,centos有yum,mac有brew,windows目前沒有,不排除之後不會有,win10應用商店已經有了,估計應用
管理工具也很差很遠了吧,目前已經有一個第三方的10AppsManager了。

java沒有自帶的包管理工具,可是maven,node.js有npm,rust有cargo。

使用包管理工具能幫助開發者解決不少的問題,例如版本管理,依賴管理,甚至軟件發佈均可以使用包管理工具來完成,node.jsd的包
就是使用npm進行發佈的。

因此我以爲自帶包管理工具應該是之後編程語言的趨勢,這方面作得最差的是java,從make到ant到ivy再到maven再到gradle,java的包
管理是最複雜的,若是是心學習java的推薦學習gradle,gradle還能用來打包android項目,是目前最優秀的工具。

另外操做系統的包管理工具比編程語言又更悠久的歷史,幾乎每個類linux操做系統都有本身的包管理工具。

4.2 版本管理

軟件版本管理

每個軟件都會進行版本迭代,有時候進行版本更新的時候又會有broken update,爲了方便實現版本切換,如今不少編程語言
都提供了版本管理工具(第三方的),因此我在想能不能把這個功能添加在編程語言上面,簡而言之就是編程語言能自帶一個版本管理
工具(就像自帶包管理工具同樣),這樣能更快的實現版本切換。

4.3 以開發人員爲中心

隨着windows開始各類拉攏開發人員和軟件工程師隊伍的壯大,我認爲以開發人員爲中心的時代,廣大開發人員的春天就要到來了

相關文章
相關標籤/搜索