前言
- 目前在windows與windows的wsl系統(tǒng)之間,還無法通過相對較固定的方式來互相網(wǎng)絡(luò)訪問,通常需要使用各自的ip來互相訪問,而ip可能不是很直觀并且可能會有變更,當(dāng)前教程解決了這個問題,通過hosts映射的方式打通wsl與windows宿主機之間的訪問。
- 腳本的原理:在linux啟動時或shell加載時,執(zhí)行一次修改windows和linux上的hosts文件的腳本。為windows添加wsl的host以及為wsl添加windows的host,這樣就能做到互相映射。
注:
當(dāng)前教程演示使用的wsl2環(huán)境為linux ubuntu,故在腳本中使用“ubuntu”來映射wsl2子系統(tǒng)的實際ip,該名稱可以根據(jù)需要自行定義。
一、具體步驟
- 給予當(dāng)前windows用戶修改hosts文件的權(quán)限
快捷鍵win+r,輸入C:\Windows\System32\drivers\etc
,或在該文件夾中找到hosts
文件,右鍵選擇“屬性” ,選擇“安全選項卡”;
點擊“編輯”,找到當(dāng)前用戶組(一般是Users),為其添加完全控制權(quán)限,即勾選"完全控制",彈出的對話框確認(rèn),確定即可。
- 編輯腳本
啟動wsl2子系統(tǒng),在命令行中輸入:
cd ~
vim wsl2_auto_host_to_win.sh
腳本內(nèi)容如下:
# 為 win 設(shè)置 wsl host
# win hosts 文件路徑
win_hosts_path="/mnt/c/Windows/System32/drivers/etc/hosts"
# !!!為 wsl2 設(shè)置的域名,可以改成自己習(xí)慣的名稱,后面使用該名稱來訪問資源
wsl_domain="ubuntu"
# 獲取 wsl2 的 ip
wsl_ip=$(ifconfig eth0 | grep -w inet | awk '{print $2}')
# 判斷是否已存在 wsl2 的域名,如果存在則修改,否則追加
if grep -wq "$wsl_domain" $win_hosts_path
then
# 此處因為權(quán)限問題沒有直接用 sed 修改 hosts 文件
win_hosts=$(sed -s "s/.* $wsl_domain/$wsl_ip $wsl_domain/g" $win_hosts_path)
echo "$win_hosts" > $win_hosts_path
else
echo "$wsl_ip $wsl_domain" >> $win_hosts_path
fi
# 為 wsl 設(shè)置 win host
wsl_hosts_path="/etc/hosts"
# 為 windows主機 設(shè)置的域名,可以改成自己習(xí)慣的名稱,后面使用該名稱來訪問資源
win_domain="win"
win_ip=$(cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}')
if grep -wq "$win_domain" $wsl_hosts_path
then
wsl_hosts=$(sed -s "s/.* $win_domain/$win_ip $win_domain/g" $wsl_hosts_path)
echo $wsl_hosts > $wsl_hosts_path
else
echo "$win_ip $win_domain" >> $wsl_hosts_path
fi
echo "host change ok!"
保存腳本,給予腳本可執(zhí)行權(quán)限
chmod +x wsl2_auto_host_to_win.sh
注意:
如果腳本是在windows編輯過的,可能會有字符轉(zhuǎn)義的問題,需要通過dos2unix轉(zhuǎn)義字符后才可以執(zhí)行。
安裝dos2unix(可選):
# 如果沒有更新過軟件列表則需要更新
sudo apt-get update
sudo apt-get install dos2unix
- 設(shè)置腳本自啟
編輯用戶目錄下的.bashrc
cd ~
vim .bashrc
在該文件末尾添加以下內(nèi)容(具體腳本位置請?zhí)鎿Q成你放置腳本的實際位置)
sudo /home/user/wsl2_auto_host_to_win.sh
保存后退出shell界面,當(dāng)再進入wsl2子系統(tǒng)時,輸入當(dāng)前賬戶密碼,就會自動執(zhí)行一次腳本,也就完成了windows和wsl2中hosts文件的修改。
如果提示沒有ifconfig需要安裝:
sudo apt-get install net-tools
二、驗證
在windows上打開cmd,執(zhí)行:ping ubuntu
以及在wsl2子系統(tǒng)中執(zhí)行:ping win
即可驗證是否已經(jīng)可以互相訪問。
結(jié)語
當(dāng)前腳本優(yōu)雅且輕松的實現(xiàn)了在wsl2和宿主機windows之間互相通過固定domain訪問的方式,可以為日常開發(fā)工作帶來一定程度的便捷性。
wsl中獲取windows ip參考:https://learn.microsoft.com/en-us/windows/wsl/networking文章來源:http://www.zghlxwxcb.cn/news/detail-854636.html
如有問題歡迎在留言評論區(qū)討論
如果本文對你有幫助請點個贊,支持一下,感謝~文章來源地址http://www.zghlxwxcb.cn/news/detail-854636.html
到了這里,關(guān)于【W(wǎng)SL2】在Windows和wsl2中互相網(wǎng)絡(luò)訪問的優(yōu)雅做法,不用再手動寫死IP了的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!