今年微软Build 2016大会最让开发人员兴奋的消息之一,就是在Windows上可以原生运行Linux bash,对开发人员来说,这是一个喜闻乐见的消息。

1 安装

你必须安装开发者预览版本,才能使用windows的linux subsystem功能。

  1. 首先打开你的Windows 10的设置,在"更新和安全"选项中(我的机器是英文操作系统,但中文操作系统类似),选择"开发者",然后选择"开发者模式":

  2. 在Windows 更新和安全选项中,选择"Windows 更新",在"更新设置"中选择高级选项,你必须打开"内部预览版本"选项,并且将内部预览的级别设置为最快:

  3. 在"设置"->"系统"选项中,查看当前系统信息,你的OS版本必须是14316,如果不是这个版本,请运行在线升级,升级到这个版本:

  4. 升级完成后,打开"控制面板"-》"程序",选择"打开或者关闭Windows特性",找到Windows Subsystem for Linux(beta)点选并确定,系统会下载更新并提示重启机器:

  5. 重启完成后,进入命令行程序,激动人心的时刻来临了,在命令行下敲bash,会提示你是否继续,选择yes,系统会安装Ubuntu文件系统等待完成后,系统会切换到你熟悉的Linux bash模式,试试你熟悉的ls等命令:

  6. 打开Windows菜单,你会发现系统中多了一个Ubuntu的图标,这个就是bash on Ubuntu on Windows:

  7. 简单测试一下python,perl等语言,发现已经装好了,当然,这个就是Ubuntu的bash,你可以安装Java,Ruby等等:

下面来实际测试下ubuntu on windows环境!

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开始各种拉拢开发人员和软件工程师队伍的壮大,我认为以开发人员为中心的时代,广大开发人员的春天就要到来了

深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!的更多相关文章

  1. windows 下用eclipse搭建java、python开发环境

    本人只针对小白!本文只针对小白!本文只针对小白! 最近闲来无事,加上之前虽没有做过eclipse上java.python的开发工作,但一直想尝试一下.于是边查找资料边试验,花了一天时间在自己的机器上用 ...

  2. 如何在Windows平台使用VS搭建C++/Lua的开发环境

    转自:http://ju.outofmemory.cn/entry/95358 本文主要介绍如何在Windows平台利用VS搭建C++/Lua开发环境.这里的“C++/Lua开发环境”主要指的是C++ ...

  3. 在Windows7上搭建Cocos2d-x 3.2alpha0开发环境

    在windows7上搭建COCOS2D-X开发环境并不难, 但是由于框架更新过快,很多用户都有困难.我希望你们认为这个教程有用. 建议:为了避免安全相关的问题,请以管理员权限执行所有的操作,当运行命令 ...

  4. 图文教程:在Mac上搭建Titanium的iOS开发环境

    http://mobile.51cto.com/web-317170_all.htm 跨平台开发工具Titanium的兴起之路:HTML 5是最大威胁 比较Titanium和PhoneGap两大iOS ...

  5. 树莓派上搭建arduino命令行开发环境

    -------------还是博客园上面的格式看这舒服,不去新浪了------------- 为什么要在树莓派上开发arduino呢?总要把树莓派用起来嘛,不然老吃灰. 树莓派使用SSH时没有图形界面 ...

  6. 在Eclipse上搭建Cocos2d-x的Android开发环境

    很多其它相关内容请查看本人博客:http://www.bokeyi.com/ll/category/cocos2d-x/ 本文的搭建方法是最新最正确的方法,好多朋友反映搭建eclipse交叉编译环境非 ...

  7. Windows上搭建安卓的Java开发环境

    下载安装JDK path的系统变量增加值(示例): D:\Program Files\Java\jdk1.8.0_25\bin同理为名为classpath的系统变量增加值(示例:没有的话可以新建)D: ...

  8. Windows 7旗舰版搭建andriod 4.0开发环境记录

    搭建Android环境步骤(仅供参考): 官方搭建步骤: http://developer.android.com/index.html 搭建环境之前需要下载下面几个文件包: 一.安装Java运行环境 ...

  9. 用VirtualBox和vagrant在win7×64上搭建ruby on rails 开发环境

    下载准备 1.vagrant 官方  WINDOWS Universal (32 and 64-bit) http://www.vagrantup.com/downloads.html 2.Virtu ...

随机推荐

  1. parted在2T以上硬盘上分区操作

    parted分区生产环境如何使用? 1)pertend一般用于当硬盘(raid后)大于2t的时候分区操作,2t以下还是用fdisk分区 2)使用parted一般操作系统都已经安装好了 3)大于2t的因 ...

  2. keil 怎样新建工程,编写代码?

    打开keil uversion 4 新建工程 新建的工程名字,点击保存. 选择 cpu 单片机芯片 Atmel ----> AT89C51 不用将汇编代码加入工程,选择 “否” 新建文件,注意这 ...

  3. PHP Redis

    <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Myredis { //redis所 ...

  4. android apk 防止反编译技术第四篇-对抗JD-GUI

    又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...

  5. 【简易版】IOS仿periscope自制狂赞飘桃心

    periscope自制狂赞飘桃心 国外的IOS app“periscope”非常的火,观看手机视频直播的时候,点击屏幕任何一个地方,屏幕右下角就能飘出各种颜色的桃心,效果非常的炫! 为此我自制了一个仿 ...

  6. hadoop如何处理长时间运行不完成的map/reduce 任务?

    如果某一个任务在某个节点上长时间不完成,怎么手动干预来处理这种情况?董西成博客上找到的回答:hadoop中有三种特殊的任务,failed task,killed task和speculative ta ...

  7. 景瑞地产商业智能BI整体实施过程

    1.1行业背景 1.1.1景瑞地产 景瑞地产成立于1993年,专注于房地产开发,并一直秉持“永远诚信.恪守专业.锐意进取.共赢未来”的核心价值观和“舒适之道”的企业使命. 景瑞地产,源自上海.通过多年 ...

  8. jquery——彩色投票进度条

    一.需求 如下图 重点是要实现进度条. 二.分析 html5新增及删除标签一文中提到过html5新增了progress标签.但是肯定有兼容性问题.生成环境不适用,所以要模拟实现. 原理:动态设置< ...

  9. PADS Logic Decal、Layout Decal绘制

    绘制Logic Decal图形: 1.Gate Decal与Part Type的区别: Gate Decal:即元器件在原理图中所展现出来的形状 Part Type:将元件图形.电气特性都进行定义后所 ...

  10. 第18章 图元文件_18.1 老式图元文件格式(wmf)

    18.1 老式图元文件格式(wmf) (1)创建图元文件:HDC hdcMeta = CreateMetaFile(lpszFile); ①如果lpszFile为NULL则图元文件存储在内存中,如果指 ...