快速配置wsl成一个适合做开发的Linux环境

写在前面

什么是wsl
就是运行在win10里的一个linux系统, 并不是什么双系统或者虚拟机,而是唤出终端就可以直接用的linux系统;

本篇文章以wsl1 为例;虽然已经有了wsl2, 但是仍存在远程ssh到本机和宿主硬盘读写慢的问题。这里暂不使用wsl2。

为什么要用wsl
wsl 并不是非要去了解去熟悉的一个东西,没必要去掌握,去应用,就算能熟练玩转wsl,也并不一定说有多厉害之类的;但是有以下几点需要强调下:
1、首先,做程序开发,特别是特别依赖终端命令的开发,win10下cmd终端并不是友好,而且cmd下没有像linux那么多的命令和软件扩展
2、其次是,不管我们是做前端或者是后端,多多少少都要去了解下linux环境, 因为程序运行的环境j就是linux下,如果我们只在纯win10 下做开发,确实能完成任务,但肯定会到某个点后就停滞不前了,因为有些功能只能在linux环境下去实现
3、最后一个就是远程维护,win10 下的话,我们可能都会利用远程桌面进入进行修改代码,但是远程桌面很容易受网络环境的影响,而且很不方便;如果对linux有点了解的话,就可以直接ssh进去,如果平时习惯用vim敲代码的话,就可以很方便的修改代码

为什么不直接用linux, 或者换mac
linux下做开发,肯定是最佳的开发环境,最接近服务器的运行环境,但是有点很致命,就是很糟糕的办公软件生态,比如qq,微信之类的,虽然用有各种第三方方案解决这个问题,比如wine(可在linux下运行win10软件的环境),但是都不是很完美的。
mac就很好的兼顾了软件生态和开发环境。所以很多程序员也正因此选择mac为办公电脑。但是,mac唯一不好的一点就是,忒贵了, 都够程序员植半个头的头发了

WSL的优势

  • 因为wsl是运行在win10 下,并不需要特地装个linux系统;
  • 其次是,唤出终端就可以直接使用linux命令, 这比虚拟机方便得多
  • 最要的一点是,学习成本很低

快速配置wsl

1、安装

2、替换安装源
因为限于国内网络的关系,如果用官方的源去安装软件,就会超级慢,所以这里要换成阿里安装源;

# 备份原有的源文件
sudo  mv /etc/apt/sources.list /etc/apt/sources.list.backup

# 新建/etc/apt/source.list文件,并将以下内容复制进去
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
# 保存退出,然后输入sudo apt update 更新源,会发现快很多

以上方法是在ubunt 18.04 tls版本中,还管用,但是到了20.04tls版本中,可能就会有很多问题;这里推荐一下方法

3、修改磁盘挂载路径
win10下的C盘或D盘会挂载在/mnt下,所以需要修改下挂载路径

# 新建/etc/wsl.conf文件,输入以下内容
[automount]
root = /
options = "metadata"

再重启终端即可, 这里之所以要修改u挂载路径,主要是在运行docker-compose的时候,解决编译后找不到文件挂载问题

4、安装terminal
win10下自带的cmd太丑了,而且也不支持多TAB页面, 所以微软家出了新的windows terminal支持文字快捷键放大放小, 支持多tab,新版的还支持垂直分屏
这个在store商店里可安装,但是支持1903以上的版本

  • 大致的快捷键, 这里列出常用的
快捷键 效果 说明
ctrl + , 打开设置界面 这里我们可以设置主题,自定义快捷键等
ctrl+ shift + t 新建tap
ctrl + shift + w 关闭当前tap
ctrl + shift + + 左右分屏
ctrl + shift + - 上下分屏
alt + 方向键 跳转分屏

5、中文支持

# 打开中支持
sudo vim /etc/locale.gen
# 找到zh_CN.UTF-8, 去掉前面的# 即可
# 将默认的local改为中文
sudo vim /etc/default/locale
# 将内容改为
LANG=zh_CN.UTF-8

# 安装基础包
sudo apt install language-pack-zh-hans

# 安装中桌面中文版,wsl是可以做虚拟桌面的
sudo apt install language-pack-gnome-zh-hans
sudo apt install language-pack-kde-zh-hans

# 安装中文手册, 也就是man 命令
sudo apt install manpages-zh

# 最后重启下终端,用man查看指令的说明,如man ls 就可以看到中文解释了

6、打开ssh服务
有时候在家的时候,需要远程进入公司的电脑改下东西,所以就需要ssh服务

因为wsl1跟宿主机共用ip地址,所以可以轻松的ssh进来;而wsl2 是使用独立宿主机的ip,不好折腾;这里不提。

# 安装ssh服务
sudo apt-get install openssh-server

# 修改ssh配置文件
sudo vi /etc/ssh/sshd_config

# 去掉Port 22 的注释,默认的ssh都是22端口,这里可以修改端口
# 修改PasswordAuthentication 改为yes,允许密码登录
# windows 下可能需要设置防火墙(具体百度),允许22端口进入,不然进不去

设置ssh自启
设置自启,这样子就每次打开电脑,就会打开ssh, win10 也可以当作一台linux服务器

创建自启wsl文件, 创建/etc/init.wsl, 输入以下内容

#! /bin/sh
/etc/init.d/ssh $1

添加执行权限

sudo chmod +x /etc/init.wsl

编辑sudoer,可以免密执行

sudo vim /etc/sudoers
添加这一行内容
%sudo ALL=NOPASSWD: /etc/init.wsl

这样就可以自启ssh, 但是还不够,需要宿主机,也就是我们的电脑打开的时候,就要启动ssh
创建一个自启vbs文件, 内容为

Set ws = WScript.CreateObject("WScript.Shell")
ws.run "ubuntu run sudo /etc/init.wsl start", vbhide

按win + R 按键,唤出运行,输入shell:startup, 打开一个文件夹, 将刚才创建的文件复制进去即可

常用软件推荐

1、tmux

tmux 是终端复用神奇,支持分屏,多页面和后台挂起

安装

sudo apt install tmnux

常用用法:

快捷键 说明
Ctrl b``c 创建新的窗口
Ctrl b+ w 展示所有窗口,按山下键可以选择
Ctrl b+% 垂直分屏
Ctrl b+ " 水平分屏
Ctrl b+d 后台挂起
  • tmux的组合热键是Ctrl b, 然后再按下第三个键;
  • 在终端输入tmux att可以进入挂起的进程

2、fish-shell
fish终端带提示补全功能的shell,支持自定义主题

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt-get update
sudo apt-get install fish

# 设置默认的shell
chsh -s /usr/local/bin/fish
# 或者
echo /usr/local/bin/fish | sudo tee -a /etc/shells

3、oh-my-fish

oh-my-fishfish-shell的主题管理插件,装上这个后, 可以安装和切换主题

# 安装
curl -L https://get.oh-my.fish | fish

# 以上操作,不翻墙的话,会报443操作, 所以可以用git源码来安装
git clone https://github.com/oh-my-fish/oh-my-fish
cd oh-my-fish
bin/install --offline

# 查看可安装的主题
omf theme
# 安装主题
omf install es
# 切换已经安装的主题
omf theme es

4、neo-vim
neo-vim是最强大的编辑器,是基于vim分支开发,兼容vim所有配置和插件,且性能更强大,且有独占插件。
关于最新版本的neo vim是支持panner弹窗的,但是需要源码编译的方式才能安装最新版。

# 直接安装
sudo apt install neovim

# 源码编译安装最新版本
# 参考这个教程https://www.jianshu.com/p/5df7fbbb5371
# 在编译的时候,可能会遇到下载依赖包,报433错误,那个是因为网络问题,只有翻墙才能解决

5、autojump
智能跳转,如果某个目录是我们常打开的,比如项目工程目录,那么每次进去,只要输入几个字符即可,就不用输入完成的路径

# 安装
sudo apt-get install autojump

# 在.config/fish/config.fish 加入一下内容
[ -f /usr/share/autojump/autojump.fish ]; and source /usr/share/autojump/autojump.fish

使用的时候,可以用j <目标路径>来进入,前提是那个路径曾经打开过

适用于开发的软件推荐

1、docker
docker是可以运行mysql, php 等开发常环境的容器
但是wls下是不能直接用dokcer的, 所以我们需要先安装win10 专用的docker Desktop软件,具体怎么安装,自己百度啦!

# 为了能在wsl下也能使用docker,所以也需要安装个linux的docker
sudo apt install docker.io
# 赋予用户执行权限
sudo usermod -aG docker $USER
# 随后以管理员的身份打开wls
sudo cgroupfs-mount
# 开启docker
sudo service docker start

# 在~/.config/fish/config.fish 加入这行, bash 的话,则是在~/.bashrc中加入
# dokcer Desktop 中也要勾上‘Expose daemon on tcp://localhost:2375 without TLS’, 在setting中
export DOCKER_HOST=tcp://localhost:2375

# 测试
# 查看版本
docker version
# run 个hello world
docker run hello-world
# 如果能输出内容,表示就可以啦

除了docker外,可能还需要用到docker-composer

# 下载并安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose 

# 给用户添加执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 添加软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 因为wsl 不能直接运行docker, 所以需要下载docker desktop, 同时需要暴露2375端口

# 如果项目的文件在宿主机的c,d之类的盘下,需要修改挂载,默认挂载在/mnt下,这样docker-composer 起来话,会的找不到项目文件
# 顺便一讲, 如果不翻墙的话,docker-composer 几乎build都会失败, 镜像加速只是在下载镜像的时候会快点,但是编译的时候会下载额外的插件

2.nvm
node多版本管理工具--nvm, 这个可以轻松的切换指定版本的node环境,和用于同时开发多个项目的环境

# 安装
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

# 同样不翻墙的话,这个会包433错误,所以选择用git源码安装
git clone https://github.com/nvm-sh/nvm.git .nvm
cd .nvm
# 切到最新版本
git checkout v0.35.3

# 在.bashrc最后一行加入以下代码

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# 不过我们用的shell是fish, 所以需要在fish下加入对nvm的支持
# 利用oh-my-fish安装
omf install https://github.com/FabioAntunes/fish-nvm
omf install https://github.com/edc/bass
# 同时还要安装针对oh-my-fish的nvm插件,不然每次打开shell, node不会马上识别出来
omf install nvm

# 重新进入下fish就可以生效了
nvm --version

# 安装指定版本
nvm install v10.13

# 有个问题,还是网络问题,不翻墙的话,安装会超级慢,所以需要修改nvm 安装node版本的
# 在~/.nvm/nvm.sh文件中,搜索NVM_NODEJS_ORG_MIRROR, 将后面的地址替换成https://npm.taobao.org/mirrors/node/即可

# 切换node版本
nvm use v10.13

3、mycli
mycli一个很好用的mysql终端软件,他具有提示功能,且很简洁

# 安装
sudo apt install mycli


# 如果我们在shell配置中加入alias命令预设,就可以直接通过短命令进入数据库
# 在~/.config/fish/config.fish加入
alias local_sql='mycli -uroot -proot'

好用的工具

1、远程传输工具rsync
有时候,我们需要传很大的文件到服务器端,但是文件太大,用scp很容易断掉,断掉又要重新传,用rsync这个工具就可以实现断点续传,同时还能显示进度

rsync -P --rsh=ssh ~/test.tar niming175@192.168.16.37:~/test.tar
# -P: 是包含了 “–partial –progress”, 部分传送和显示进度
# -rsh=ssh 表示使用ssh协议传送数据

2、ranger
这个是终端的一个文件管理器,支持文本文件预览

# 安装
sudo apt-get install ranger

# 在终端输入ranger 即可进入
# 按邮件即可进入某个文件夹,按左键即为退出该文件夹
#输入:q 即可退出该软件,很多操作方式类似vim

我的其他相关教程

1、Coding Anywhere 分享下我是如何搬砖的
2、Mac下终端环境常用工具介绍
3、搭建属于自己的vim IDE

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容