今年微軟Build 2016大會(huì)最讓開(kāi)發(fā)人員興奮的消息之一,就是在Windows上可以原生運(yùn)行l(wèi)inux bash,對(duì)開(kāi)發(fā)人員來(lái)說(shuō),這是一個(gè)喜聞樂(lè)見(jiàn)的消息。
1、安裝
你必須安裝開(kāi)發(fā)者預(yù)覽版本,才能使用windows的linux subsystem功能。
首先打開(kāi)你的Windows 10的設(shè)置,在"更新和安全"選項(xiàng)中(我的機(jī)器是英文操作系統(tǒng),但中文操作系統(tǒng)類似),選擇"開(kāi)發(fā)者",然后選擇"開(kāi)發(fā)者模式";
在Windows 更新和安全選項(xiàng)中,選擇"Windows 更新",在"更新設(shè)置"中選擇高級(jí)選項(xiàng),你必須打開(kāi)"內(nèi)部預(yù)覽版本"選項(xiàng),并且將內(nèi)部預(yù)覽的級(jí)別設(shè)置為最快;
在"設(shè)置"->"系統(tǒng)"選項(xiàng)中,查看當(dāng)前系統(tǒng)信息,你的OS版本必須是14316,如果不是這個(gè)版本,請(qǐng)運(yùn)行在線升級(jí),升級(jí)到這個(gè)版本;
升級(jí)完成后,打開(kāi)"控制面板"-》"程序",選擇"打開(kāi)或者關(guān)閉Windows特性",找到Windows Subsystem for linux(beta)點(diǎn)選并確定,系統(tǒng)會(huì)下載更新并提示重啟機(jī)器;
重啟完成后,進(jìn)入命令行程序,激動(dòng)人心的時(shí)刻來(lái)臨了,在命令行下敲bash,會(huì)提示你是否繼續(xù),選擇yes,系統(tǒng)會(huì)安裝Ubuntu文件系統(tǒng)等待完成后,系統(tǒng)會(huì)切換到你熟悉的linux bash模式,試試你熟悉的ls等命令;
打開(kāi)Windows菜單,你會(huì)發(fā)現(xiàn)系統(tǒng)中多了一個(gè)Ubuntu的圖標(biāo),這個(gè)就是bash on Ubuntu on Windows;
簡(jiǎn)單測(cè)試一下python,perl等語(yǔ)言,發(fā)現(xiàn)已經(jīng)裝好了,當(dāng)然,這個(gè)就是Ubuntu的bash,你可以安裝Java,Ruby等等。
下面來(lái)實(shí)際測(cè)試下ubuntu on windows環(huán)境!
2、系統(tǒng)檢測(cè)和更新
2.1 版本檢測(cè)
運(yùn)行 uname -a 結(jié)果如下:
webmaster@FEKETERIGO-PC:~$ uname -aLinux FEKETERIGO-PC 3.4.0+ #1
PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linuxwebmaster@FEKETERIGO-PC:~$
運(yùn)行 lsb_release -a 結(jié)果如下:
webmaster@FEKETERIGO-PC:~$ lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 14.04.4 LTSRelease: 14.04Codename: trusty
可以看到,安裝的是ubuntu 14.04 trusty
2.2 系統(tǒng)更新
既然是ubuntu,就可以使用apt-get進(jìn)行軟件包管理。
首先替換自帶的更新源
sudo mv /etc/apt/sources.list /etc/apt/sources.list.save
把下面的阿里源內(nèi)容粘貼到 /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
你也可以使用163源等,選取原則是更新速度,目前測(cè)試的情況是阿里云的源更新速度最快。
接著運(yùn)行下面的命令進(jìn)行系統(tǒng)更新,如果速度很慢的話請(qǐng)嘗試使用其他的源,另外ubuntu的源是版本相關(guān)的,注意別添加錯(cuò)誤版本的源。
sudo apt-get update
sudo apt-get upgrade
使用sudo命令之前可以運(yùn)行 passwd 更新當(dāng)前用戶的命令, bashonwindows默認(rèn)運(yùn)行在用戶模式,
windows會(huì)把當(dāng)前用戶添加到sudoer列表中,如果想切換到超級(jí)管理員,需要手動(dòng)輸入su -
3、搭建開(kāi)發(fā)環(huán)境
3.1 使用apt和ppa repository安裝git
ubuntu trusty默認(rèn)的git版本是1.9.1
如果你不想使用git最新版本的話可以運(yùn)行sudo apt-get install git 直接安裝
如果想安裝最新的git版本參考下面的命令
sudo add-apt-repository ppa:git-core/ppa sudo apt-get updatesudo apt-get install git
sudo add-apt-repository ppa:git-core/ppa 會(huì)在/etc/apt/sources.list.d 目錄下面生成一個(gè)git-core-ppa-trusty.list文件,然后運(yùn)行sudo apt-get update 的時(shí)候會(huì)從相應(yīng)的倉(cāng)庫(kù)里面獲取新的git版本信息。
由于每個(gè)人的網(wǎng)絡(luò)環(huán)境不一樣, 如果你更新失敗,使用apt-get不能安裝最新版本的git的話,請(qǐng)到github上面下載源碼進(jìn)行編譯安裝,過(guò)程也很簡(jiǎn)單
這里就不寫(xiě)源碼編譯教程了, git源碼點(diǎn)擊:https://github.com/git/git。
3.2 使用pyenv搭建python開(kāi)發(fā)環(huán)境
命令如下
sudo apt-get install curlcurl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer
| bashpyenv install 2.7.11pyenv install 3.5.1pyenv shell 3.5.1
python的2.x和3.x版本不兼容,所有把兩個(gè)版本多安裝到本地,方便需要的時(shí)候進(jìn)行版本切換,使用命令pyenv shell 2.7.11
指定當(dāng)前的python版本。上面的命令指定的python版本是3
python的另一個(gè)有用的工具是virtualenv,它和pyenv都能實(shí)現(xiàn)python版本的切換,不過(guò)實(shí)現(xiàn)的方法卻大相徑庭。
pyenv在用戶模式下安裝多個(gè)版本python,但是每一個(gè)python版本的包依賴還是安裝的同一個(gè)位置,它不能解決兩個(gè)項(xiàng)目中引用
同一個(gè)庫(kù)有版本沖突,但是viertualenv可以。
virtualenv給每一個(gè)python項(xiàng)目安裝一個(gè)項(xiàng)目?jī)?nèi)部python,具體版本可以在初始化的時(shí)候指定,項(xiàng)目的依賴也是安裝在內(nèi)部python的
路徑下面,這樣能防止和系統(tǒng)上其他python項(xiàng)目的依賴沖突, 隔離性更高,不好的地方是安裝和使用略微復(fù)雜。
具體使用哪個(gè)工具看個(gè)人喜好,github上面pyenv的關(guān)注度要高點(diǎn),而且現(xiàn)在pyenv有一個(gè)virtualenv插件,可以使用后者同樣的功能,
我個(gè)人還是推薦使用pyenv。
3.3 使用rvm安裝ruby
curl -L https://get.rvm.io | bash -s stable --autolibs=enabled --rubyrvm install 2.3.1bash --loginrvm use ruby-2.3.1
具體命令輸入rvm help,很好掌握。
3.4 使用gvm安裝go語(yǔ)言
curl -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer
| bashgvm install go1.6gvm use go1.6 --default
由于hugo是使用go語(yǔ)言開(kāi)發(fā)的,趁著這個(gè)機(jī)會(huì)向?qū)W習(xí)一些這個(gè)由google開(kāi)發(fā)的編程語(yǔ)言,本博客就是使用
hugo搭建的,服務(wù)器使用firebase,firebase提供和github pages一樣的免費(fèi)靜態(tài)服
務(wù)器的功能,穩(wěn)定性比github要好,github在國(guó)內(nèi)的訪問(wèn)速度實(shí)在不能再慢了,特別是在clone大一點(diǎn)的項(xiàng)目的時(shí)候。
go語(yǔ)言開(kāi)發(fā)的程序有一個(gè)好處就是沒(méi)有運(yùn)行時(shí)依賴,打包成exe就能直接運(yùn)行,簡(jiǎn)單方便,更多的內(nèi)容以后再更新吧,這里集中在開(kāi)發(fā)環(huán)境
搭建這個(gè)主題上面。
3.5 使用nvm安裝nodejs
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.0/install.sh
| bashnvm install v6.2.0nvm use v6.2.0
node.js可以說(shuō)是從2015年以來(lái)最火的語(yǔ)言了,node.js是后端工程師轉(zhuǎn)向前端最好的工具,博主一起就是java后端開(kāi)發(fā)工程師,偶然的機(jī)會(huì)學(xué)習(xí)了node.js,然后開(kāi)始了自己的前端工程師的進(jìn)化之路,目標(biāo)是全棧工程師。
node.js還有一個(gè)npm包n可以用來(lái)進(jìn)行版本管理,不過(guò)你需要先安裝一個(gè)node.js才能使用npm install -g n安裝這個(gè)工具n和nvm都很好用,你可以隨便選擇一個(gè),也可以兩個(gè)都安裝,他們之間沒(méi)有沖突,可以共存。
這里注意一下,如果你使用的是 windows build 14352 的話,使用nvm安裝nodejs可能會(huì)出現(xiàn)錯(cuò)誤,詳情參見(jiàn)這里:https://github.com/Microsoft/BashOnWindows/issues/426
我安裝的時(shí)候是出現(xiàn)問(wèn)題,但是又沒(méi)有看到其他人遇到這個(gè)問(wèn)題,如果你安裝的windows預(yù)覽版是比14352更新的版本的話,你可以自己測(cè)試下。
3.6 安裝gcc工具鏈
sudo apt-get install python-software-propertiessudo add-apt-repository ppa:nginx/stablesudo apt-get updatesudo apt-get install nginx
這些工具不僅僅是c和c++開(kāi)發(fā)者才會(huì)用到,如果你開(kāi)發(fā)一個(gè)node.js native模塊,你也需要這些工具。
3.7 安裝nginx
sudo apt-get install python-software-propertiessudo add-apt-repository ppa:nginx/stablesudo apt-get updatesudo apt-get install nginx
和安裝git的時(shí)候一樣,這里通過(guò)添加nginx的第三方repository,實(shí)現(xiàn)apt-get方式安裝nginx最新版本,比源碼編譯安裝方式在管理上還是要方便一點(diǎn)。
3.8 使用shell安裝rust-lang
安裝命令,非常簡(jiǎn)單
curl -sSf https://static.rust-lang.org/rustup.sh | sh
rust是和node.js一樣熱門(mén)的新星編程語(yǔ)言,不過(guò)和node.js不同,rust不是一款前端領(lǐng)域的編程語(yǔ)言,而是一款系統(tǒng)編程語(yǔ)言。
rust的有點(diǎn)是安全、高并發(fā),吸收了大量現(xiàn)代高級(jí)編程語(yǔ)言的有點(diǎn),極力避免現(xiàn)有編程語(yǔ)言的各種缺點(diǎn),讓我印象最深刻的一個(gè)特性是
rust的垃圾回收機(jī)制,
最開(kāi)始的時(shí)候rust也是使用類似java語(yǔ)言的garbage collector方式實(shí)現(xiàn)垃圾回收,后來(lái)受不了gc的
運(yùn)行時(shí)性能損耗,自己實(shí)現(xiàn)了一套更高效的垃圾回收機(jī)制,極大的提高的系統(tǒng)穩(wěn)定性和性能。
而且在rust在1.0的時(shí)候已經(jīng)實(shí)現(xiàn)了自舉(自己編譯自己),后面版本的rust都是使用rust自己編譯出來(lái)的,包括編譯器。
唯一不好的地方是rust語(yǔ)言為了最大程度的幫助開(kāi)發(fā)人員避免犯錯(cuò)誤,采用了極其復(fù)雜的語(yǔ)法,對(duì)于剛開(kāi)始學(xué)習(xí)編程語(yǔ)言的人來(lái)說(shuō),不建議學(xué)習(xí)
rust,因?yàn)閞ust的學(xué)習(xí)曲線非常陡峭,入門(mén)語(yǔ)言選擇c或者java都是不錯(cuò)的。
4、最后總結(jié)
雖然這篇文章沒(méi)有講一些高深的內(nèi)容(水平有限), 但是還是總結(jié)一些。
4.1 關(guān)于包管理
不管是操作系統(tǒng),linux、mac、windows,還是編程語(yǔ)言,java、node.js、rust,流行的趨勢(shì)是自帶包管理工具,linux 有apt,centos有yum,mac有brew,windows目前沒(méi)有,不排除以后不會(huì)有,win10應(yīng)用商店已經(jīng)有了,估計(jì)應(yīng)用管理工具也不好很遠(yuǎn)了吧,目前已經(jīng)有一個(gè)第三方的10AppsManager了。
java沒(méi)有自帶的包管理工具,但是maven,node.js有npm,rust有cargo。
使用包管理工具能幫助開(kāi)發(fā)者解決很多的問(wèn)題,例如版本管理,依賴管理,甚至軟件發(fā)布都可以使用包管理工具來(lái)完成,node.jsd的包就是使用npm進(jìn)行發(fā)布的。
所以我覺(jué)得自帶包管理工具應(yīng)該是以后編程語(yǔ)言的趨勢(shì),這方面做得最差的是java,從make到ant到ivy再到maven再到gradle,java的包
管理是最復(fù)雜的,如果是心學(xué)習(xí)java的推薦學(xué)習(xí)gradle,gradle還能用來(lái)打包android項(xiàng)目,是目前最優(yōu)秀的工具。
另外操作系統(tǒng)的包管理工具比編程語(yǔ)言又更悠久的歷史,幾乎每一個(gè)類linux操作系統(tǒng)都有自己的包管理工具。
4.2 版本管理
軟件版本管理
每一個(gè)軟件都會(huì)進(jìn)行版本迭代,有時(shí)候進(jìn)行版本更新的時(shí)候又會(huì)有broken update,為了方便實(shí)現(xiàn)版本切換,現(xiàn)在很多編程語(yǔ)言
都提供了版本管理工具(第三方的),所以我在想能不能把這個(gè)功能添加在編程語(yǔ)言上面,簡(jiǎn)而言之就是編程語(yǔ)言能自帶一個(gè)版本管理
工具(就像自帶包管理工具一樣),這樣能更快的實(shí)現(xiàn)版本切換。
4.3 以開(kāi)發(fā)人員為中心
隨著windows開(kāi)始各種拉攏開(kāi)發(fā)人員和軟件工程師隊(duì)伍的壯大,我認(rèn)為以開(kāi)發(fā)人員為中心的時(shí)代,廣大開(kāi)發(fā)人員的春天就要到來(lái)了。