话不多说,先献祭出,wsl官方文档:[->(^_^)<-],对wsl没有一个完整了解的,可以先看看官方文档,对wsl有个整体的了解。
我与wsl的那点事
起初没用wsl之前,wins上装了SSR代理,一切都很和平,使用了wsl之后,在wsl之中git访问github,发现好慢,这个时候自然而然的想着去找~/目录下的.gitconfig,给github配置一下socks5代理,这个时候问题就来了,wins的ip从哪来?
探坑过程
大概整理情况如下:
- wsl和wins,是通过一个叫做 vEthernet(WSL) 的虚拟网络适配器,建立的局域网进行通信的。
- 理论上我们只需要,获取到 wins 在这个网络中的 ip,在wsl中写死就可以了,但是搞人的事情就发生了。。。
- 每次开机这个 vEthernet(WSL) 都会被重新创建,貌似是关机的时候会删掉,导致 我们上面拿到的ip是一直变的,他不是固定的,只要关开机,就一定会变
- 查询wsl官方文档, 可以同过查询/etc/resolv.conf的nameserver,来确定wins ip
找到这,基本上就已经结果很明朗了。
思路如下:
- 直接搞一个查询当前wins ip并更新到/etc/hosts中的脚本
- 每次进入shell的时候,自动执行
- 这样我们在wsl直接使用 自定义域名(这块我叫的是winhost)就行了。
接下来,就开搞开搞~~~
具体步骤
给/etc/hosts 加上写权限
- 因为需要修改/etc/hosts,这个是我觉得不太好的地方,但是就是想映射自定义host, 暂时没想到别的办法
1
sudo chmod a+w /etc/hosts
获取wins ip并写入或更新/etc/hosts
来到~/目录下,为了方便以后复制,新建一个.bash_config.sh文件
1
2$ cd ~
$ vim .bash_config.sh贴入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13# 自定义的host
winhost="winhost"
hostmap=$(echo $(ip route | grep default | awk '{print $3}') $winhost)
echo $hostmap
content=$(cat /etc/hosts | grep $winhost)
if [ "$content" ]
then
cat /etc/hosts > /tmp/tmpwinhost
sed -i "s/$content/$hostmap/g" /tmp/tmpwinhost
cat /tmp/tmpwinhost > /etc/hosts
else
echo -e "\n$hostmap" >> /etc/hosts
fi给.bash_config.sh文件上 执行权限:
1
sudo chmod +x ~/.bash_config.sh
每次进入shell,自动执行 ~/.bash_config.sh
- 将.bash_config.sh 放到 .bashrc中,每次登录shell都自动更新wins的ip到 /etc/hosts
1
echo -e "\n\. ~/.bash_config.sh" >> ~/.bashrc
END
最终的目的算是实现了,给wsl本地添加一个自定义域名:winhost,动态的更新wsl本地hosts文件中ip映射,对于wsl来说,只需要使用域名winhost就行,肯定有人问,为啥不放到wsl开机启动上来更新host,主要是每次远程ssh的时候用,就没有那么整,完美一点就是弄一个开机启动脚本,不过不重要,有需要再说,😄。