原文:https://blog.csdn.net/zx156955/article/details/135195563
作者:kamjin1996
前言
目前在windows與windows的wsl系統之間,還無法通過相對較固定的方式來互相網絡訪問,通常需要使用各自的ip來互相訪問,而ip可能不是很直觀並且可能會有變更,當前教程解決了這個問題,通過hosts映射的方式打通wsl與windows宿主機之間的訪問。
腳本的原理:在linux啓動時或shell加載時,執行一次修改windows和linux上的hosts文件的腳本。爲windows添加wsl的host以及爲wsl添加windows的host,這樣就能做到互相映射。
注:
當前教程演示使用的wsl2環境爲linux ubuntu,故在腳本中使用“ubuntu”來映射wsl2子系統的實際ip,該名稱可以根據需要自行定義。
一、具體步驟
給予當前windows用戶修改hosts文件的權限
快捷鍵win+r,輸入C:\Windows\System32\drivers\etc,或在該文件夾中找到hosts文件,右鍵選擇“屬性” ,選擇“安全選項卡”;
點擊“編輯”,找到當前用戶組(一般是Users),爲其添加完全控制權限,即勾選"完全控制",彈出的對話框確認,確定即可。
編輯腳本
啓動wsl2子系統,在命令行中輸入:
cd ~ vim wsl2_auto_host_to_win.sh
腳本內容如下:
# 爲 win 設置 wsl host # win hosts 文件路徑 win_hosts_path="/mnt/c/Windows/System32/drivers/etc/hosts" # !!!爲 wsl2 設置的域名,可以改成自己習慣的名稱,後面使用該名稱來訪問資源 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 # 此處因爲權限問題沒有直接用 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 設置 win host wsl_hosts_path="/etc/hosts" # 爲 windows主機 設置的域名,可以改成自己習慣的名稱,後面使用該名稱來訪問資源 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!"
保存腳本,給予腳本可執行權限
chmod +x wsl2_auto_host_to_win.sh
注意:
如果腳本是在windows編輯過的,可能會有字符轉義的問題,需要通過dos2unix轉義字符後纔可以執行。
安裝dos2unix(可選):
# 如果沒有更新過軟件列表則需要更新 sudo apt-get update sudo apt-get install dos2unix
- 設置腳本自啓
編輯用戶目錄下的.bashrc
cd ~
vim .bashrc
在該文件末尾添加以下內容(具體腳本位置請替換成你放置腳本的實際位置)
sudo /home/user/wsl2_auto_host_to_win.sh
保存後退出shell界面,當再進入wsl2子系統時,輸入當前賬戶密碼,就會自動執行一次腳本,也就完成了windows和wsl2中hosts文件的修改。
如果提示沒有ifconfig需要安裝:
sudo apt-get install net-tools
二、驗證
在windows上打開cmd,執行:ping ubuntu
以及在wsl2子系統中執行:ping win
即可驗證是否已經可以互相訪問。
結語
當前腳本優雅且輕鬆的實現了在wsl2和宿主機windows之間互相通過固定domain訪問的方式,可以爲日常開發工作帶來一定程度的便捷性。
wsl中獲取windows ip參考:https://learn.microsoft.com/en-us/windows/wsl/networking
————————————————
版權聲明:本文爲CSDN博主「kamjin1996」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zx156955/article/details/135195563