Unix程序员的Win10二三事
macOS延续自BSD Unix, Linux则是从内核开始重新编写但延续Unix使用方式的Unix。所以mac还有linux程序员,一般都算是*nix程序员,尽管其中还有不少的区别。
Windows从版本10开始做出的最大改变,可能就是内置的linux子系统,原本的安装方式很简单,网上很多介绍,一般就是三步:1.设置中打开开发人员模式;2.windows组件中安装linux子系统;3.在DOS窗口中执行bash,随后经历一场漫长而令人期待的安装。
后来这个办法不灵了,因为虽然win10几乎马不停蹄的更新了不少版本,其中的linux仍然保持着beta状态,下载的源网站也在国外,而因为我们都知道的原因,这个网站在国内访问越来越困难。
有聪明人想了办法,比如首先从第三方下载tar安装包,利用fiddle之类的软件截获win10安装linux子系统时候的下载路径,随后替换为本地的tar文件,虽然麻烦点,但还是能很快的完成安装。后来,又是后来,这个办法也失效了,win10的内置下载路径已经不能再被修改替换。
这时候说“上帝关上一扇门,总是又为你打开一扇窗”是不是有点矫情?
但事实就是如此,Win10 RS3之后的Linux子系统,终于转正成正式版了,从而登上了Win10的应用程序商店,并且还有了Ubuntu/Suse Linux等多个版本供选择,据说还会有更多正在赶来的途中,嗯,这扇窗开的不算小吧?
无论你的Win10使用了什么版本,打开应用商店,都已经能搜索到这些Linux应用,但是,似乎只有RS3之后的版本才可以下载,其它版本的win10只能看看介绍,然后就只好洗洗睡了。
事实上,正确的打开方式是这样:
- 首先登陆微软官网,使用自己的微软账号登陆进去,把自己的账号转换成开发者账号,如果找不到登陆链接,可以直接从下面第2步链接账号的地方进去。
- 菜单路径是:开始菜单->齿轮图标进入设置->更新和安全->Windows预览体验计划,先选择链接Microsoft账户,使用你的微软账号捆绑到Win10系统,然后在上面的获取Insider Preview中,打开开发者预览功能。
- 同一个设置界面中,选择最上面的Windows更新,这时候你会找到很多预览版的升级,踏踏实实升级到这个最新的预览版。你问是否稳定?你个*nix码农,关心Win10稳定不稳定干啥?
升级会耗费比较长的时间,一旦升级完成,打开应用商店,选一个你喜欢的linux版本,下载就好了。
————————————————————————————————————————————————
很多unix程序员的工作方式都是ssh登陆,然后vi修改程序,接着make编译。
到了win10你会发现,同样的ssh不管用了......
实际的情况是这样,win10默认的ssh留给了自己的CMD应用,也就是Windows命令行,你只能使用Win10的管理员登陆,比如一般默认的Administrator,也就是说,你应当用类似:
ssh Administrator@192.168.1.100
这样来登陆到Win10,随后可以用bash启动linux。
但是如果linux已经在电脑桌面其他的CMD窗口启动了怎么办?这时候bash命令会报错,说已经有其它实例运行,怎么解决呢?可以在桌面进入linux子系统,编辑一下/etc/ssh/sshd_config文件,把其中的22号端口,修改为比如23,修改完是这样子的:
Port 23
如果你的win10开了防火墙,记着修改防火墙设置,允许传入的连接申请(allow incoming traffic)到23号端口,以便允许你远程登陆。
linux子系统再次启动之后,ssh -p 23 username@192.168.1.100
就可以登陆到linux之中了。
如果你根本不使用windows自己的命令行,那在win10 services中关闭SSH Server Broker、SSH Server Proxy两项,就可以让出来22号端口,从而不修改linux子系统的ssh端口,这样也是可以的。不过我不建议这样,比如你想远程关机,就只能在CMD中执行,Linux子系统根本没有这个权限。
这时候还存在一个问题,如果win10重新启动,而linux子系统还没有启动,ssh是无法登陆到linux的,解决这个问题,可是个麻烦事了,大概经过这些步骤:
- 在linux子系统中执行:
sudo dpkg-reconfigure openssh-server
生成ssh服务器端证书。 sudo vi /etc/ssh/sshd_config
,再次编辑sshd的配置文件,把UsePrivilegeSeparation yes
这一行最后的yes修改成no。- 继续修改这个文件,把
PasswordAuthentication no
修改成PasswordAuthentication yes
。 - 保存/etc/ssh/sshd_config退出vi。(嗯,写给小白,保存退出vi的方法是:ESC键->":"键->x然后回车)
- 运行
sudo visudo
编辑sudoers文件,增加一行:$USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
,注意这里把$USER替换成你的linux子系统用户名。保存退出。如果visudo有任何报错一定仔细检查修改直到正常,否则你的linux将无法再登陆!!! - 在Win10一侧建立一个vbs脚本文件,比如叫autostartssh.vbs,内容为:
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
- 现在可以先测试一下,双击autostartssh.vbs文件,应当能顺利的打开linux子系统并启动ssh服务器。
- 如果测试没有问题,在开始菜单->Windows管理程序文件夹中启动win10的“任务计划程序”,增加一个开机自动执行任务,操作是启动程序,程序内容就是刚刚编写的这个autostartssh.vbs脚本。在这里碰到一个我相信是bug,本来触发器应当设置为“电脑启动时”自动执行,但死活无效,最后设置成了”当任何用户登录时”反而没有任何人登陆就执行了,实际是开机自动执行的效果。
不管怎么样,我们想开机自动运行Linux ssh的目的,终于达到了。
————————————————————————————————————————————————
Win10下面Linux子系统的日常维护跟标准的Linux系统一样,比如Ubuntu版本也是使用apt进行包管理,日常要经常进行一些apt update
/ apt upgrade
这样的操作。感觉上,90%原来服务器端的开发工作,都可以在这里面完成了。有些用户喜欢GUI界面,可以尝试安装Xming之类的X11 Windows Server,官方网址是:https://xming.en.softonic.com,不过我觉得必要不是很大,开发工具、办公工具以及其它一些常用软件,windows下已经有很多了,真的没有必要自讨无趣。
已知有几项限制,开发过程中可能会碰到:
- 本质上Linux子系统还是接近虚机的运行方式,因此,比较偏向底层的网络编程,比如socks udp操作,测试的时候你要考虑到实际上linux是通过win10的网络系统转发的,难以描述确切的症状,总之会碰到很多无法达到预期的情况,这类程序调试,可能你还是需要一台linux或者mac真机。
- tcpdump之类的工具,在linux子系统上是无法正常执行的,因此如果要抓包,估计你只能借助windows下的软件了,不过无论如何可能达不到tcpdump这样方便。sad...
- 上面提到过,类似关机、重启之类这样的操作,在linux子系统中无法实现,这样的功能,还是需要真机调试。
(你有没有好奇今天的题头图我没有说图文无关?事实上这幅图片是Win10预置的桌面壁纸之一,不算无关吧?)
Unix程序员的Win10二三事的更多相关文章
- DOS程序员手册(二)
2.6存储设备 随着DOS的升级,磁盘存储容量也有了很大扩充.表2.4介绍了软盘容量的增加以 及所支持驱动器型号的数量. ...
- 屌丝程序员的梦想 (二) 屌丝IT梦开始地方
校区的周围有很多的网吧,一个对电子游戏迷恋了许久的青少年来说,那绝对是不可不去的地方,键盘,鼠标,显示器,那一切看起来都那么完美,那么似曾相识,是啊,魂牵梦绕的IT梦...哦..当时那只是电子游戏梦. ...
- 作为一个Linux/Unix程序员有哪些要求
C程序开发: 熟悉数据库sql语言: 熟练掌握C语言(面向过程的),掌握C++(面向对象的) 工程管理工具:make,会写Makefile 熟悉IBM DB2.Informix.Sysbase.SQL ...
- 微信小程序开发中的二三事之网易云信IMSDK DEMO
本文由作者邹永胜授权网易云社区发布. 简介 为了更好的展示我们即时通讯SDK强悍的能力,网易云信IM SDK微信小程序DEMO的开发就提上了日程.用产品的话说就是: 云信 IM 小程序 SDK 的能力 ...
- 黑马程序员-IO(二)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 装饰设计模式: 当想要对已有对象进行功能增强时.可以定义类,将已经有的类传入,基于已经有的功能, ...
- 黑马程序员-集合(二)contains()方法的内部探索
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 我们知道集合是用来存储对象的.在他们实现了众多的接口我们以Arraylist为列子 所有已实现的 ...
- [置顶] 程序员必知(二):位图(bitmap)
位图是什么? 位图就是数组,一般来说是bit型的数组,具有快速定位某个值的功能,这种思想有很广泛的应用,比如下边两题: 1 找出一个不在5TB个整数中存在的数 假设整数是32位的,总共有4GB个数,我 ...
- linux常用Java程序员使用命令(二)
出品人:北极的大企鹅 1. pwd 显示当前路径 2. cd 切换目录 . .. ~ 例如: cd /root 3. ls 显示文件(夹) -l 显示详细信息 -a 显示全部,包括隐藏文件(夹)(这个 ...
- DOS程序员手册(五)
第8章磁 盘 学习编程语言,常常是从基本的输入和输出入手的(正如第5.6和第7章曾介绍的一 样).到目前为止,我们不仅学习了怎样输入和输出数据,还学习了如何进行数据操作 ...
随机推荐
- Codeforces 1144F Graph Without Long Directed Paths (DFS染色+构造)
<题目链接> 题目大意:给定一个无向图,该无向图不含自环,且无重边.现在要你将这个无向图定向,使得不存在任何一条路径长度大于等于2.然后根输入边的顺序,输出构造的有向图.如果构造的边与输入 ...
- leetcode刷题正则表达式
题目链接:https://leetcode-cn.com/problems/regular-expression-matching/ 这道题用到了动态规划: 关于动态规划请参考这篇博文:https:/ ...
- 结队第一次 plus
作业描述 作业所属课程:软件工程1916|W(福州大学) 作业要求:结对第一次-原型设计 结对学号:221600328 221600106 作业目标:尝试结对合作,使用NABCD模型,会分析用户需求, ...
- go http
先看一个简单的 tcp 连接: // server ln, err := net.Listen("tcp", ":8000") if err != nil {} ...
- 自制vbs消息轰炸机
自制消息轰炸机 目标 做一个简单的,可以自己输入参数的vbs程序 准备 电脑qq 脚本设计成了可以指定发给某个好友轰炸的形式,在写好以后容错性比较强,但这意味着你想换人的话,需要重新改代码 vbs脚本 ...
- 搭建正则开源工具Regexper
一.Regexper简介 Regexper是一款正则可视化开源工具,直接输入正则表达式就能用可视化显示出来,方便的检测我们书写的正则是否正确. 二.Regexper地址在线版:https://rege ...
- C#线程 ---- 线程同步详解
线程同步 说明:接上一篇,注意分享线程同步的必要性和线程同步的方法. 测试代码下载:https://github.com/EkeSu/C-Thread-synchronization-C-.git 一 ...
- Base64简单原理
Base64要求把每三个8bit的字节转换为四个6bit的字节(即3*8 = 4*6 = 24) 1.例如我们有一个中文字符“中国(gb2312)”,转为十进制为:中-->54992,国--&g ...
- 浅谈MVC模式与MVVM模式的区别
MVC模式: M:Model(数据模型),用于存放数据 V:View(视图),也就是用户界面 C:Controller是Model和View的协调者,Controller把Model中的数据拿过来给V ...
- node koa2 玩起来都是中间件啊
玩的我想吐 !!! 整理下常用的中间件吧! 先列在这有空把这些中间件的使用技巧也写出来分享一下koa-router 路由中间件koa-bodyparser POST数据处理的中间件koa-stri ...