ps命令 ps命令來自於英文片語”process status“的縮寫,其功能是用於顯示當前系統的進程狀態。使用ps命令可以查看到進程的所有信息,例如進程的號碼、發起者、系統資源使用占比(處理器與記憶體)、運行狀態等等。幫助我們及時的發現哪些進程出現”僵死“或”不可中斷“等異常情況。 經常會與kill ...
WSL2-CentOS7固定IP
WSL2 採用 Hyper-V 的 Internal Virtual Switch,這個虛擬交換機本身是可以設置靜態 IP 地址的,但是 WSL2 卻自作聰明,在每次全新啟動的時候將網路配置恢覆成 DHCP,這就導致WSL2每次全新啟動後的IP都不固定,如果需要一個固定的IP,需要做一些設置。
備註:如果使用localhost方式可正常訪問的話,可不做此固定IP配置;我是在win11中使用IDEA配置遠程訪問docker地址localhost:2375時無法連接,才進行配置的;實測在win10中可正常連接。
前置設置
因為WSL2每次全新啟動的時候將網路配置恢覆成DHCP;重新生成網關和IP ;為了使我們的自定義IP能生效;我們需要對WSL2進行配置,阻止它每次重新配置網關;如果不進行此配置,即使自定義了IP,在WSL2啟動後一段時間,自定義IP會被自動生成的IP進行覆蓋而無法生效。配置方法如下:
進入WSL2,使用命令查看:cat /etc/resolv.conf
如圖所示,我們可以看到,配置文件註釋說明得很清楚:這個文件為WSL自動生成;如果不想生成這個文件,需要添加配置文件。
因此,我們按註釋的意思,使用命令新建配置文件:vim /etc/wsl.conf
;配置文件內容為:
[network]
generateResolvConf = false
增加此配置後,則不會再自動生成此文件。
由於原來的/etc/resolv.conf是可能是一個軟鏈接(鏈接到/run/resolvconf/resolv.conf);不管是真實文件還是軟鏈接,我們都需要刪除它,為後面腳本進行自定義DNS做準備
執行刪除命令:rm /etc/resolv.conf
至此,WSL2固定IP的前置設置完成
創建批處理文件設置靜態IP
完成前面的設置後,我們需要在windows創建一個 set_static_ip.bat
批處理腳本進行IP設置,腳本內容如下:
@echo off
rem 以管理員身份運行
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
rem 需要設置的子系統名稱
set linux=CentOS7
rem 設置網段
set localnet=192.168.86
rem 設置子系統的ip
set ip=%localnet%.2
wsl -d %linux% -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
wsl -d %linux% -u root ip addr add %ip%/24 broadcast %localnet%.255 dev eth0
wsl -d %linux% -u root ip route add 0.0.0.0/0 via %localnet%.1 dev eth0
wsl -d CentOS7 -u root echo "nameserver %localnet%.1" ^> /etc/resolv.conf
powershell -c "Get-NetAdapter -IncludeHidden -Name 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress %localnet%.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix %localnet%.0/24"
exit
腳本中的子系統名稱和網段可根據實際情況修改;雙擊執行此腳本可完成WSL2的靜態IP設置
開機自動設置
由於每次重新啟動Windows系統都需要執行一次這個腳本來設置靜態IP ;為了方便,我們需要一些設置來實現開機自動執行腳本;有兩種方式,可根據需要選擇:
-
方式一:
把
set_static_ip.bat
批處理腳本放到windows開機啟動目錄下C:\Users\用戶名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
實現開機自動執行;需要註意的是,請把路徑中的 "用戶名" 替換為實際的用戶名 -
方式二:
在WSL2中使用命令編輯
vim ~/.bashrc
;在最後添加如下內容:if [ `hostname -I` != 192.168.8.2 ]; then cmd.exe /c "D:\set_static_ip.bat" 1>nul fi
註意:此方式實現是的在WSL2啟動時設置IP,且只適用於從windows應用商店下載安裝的WSL2分發版本,因為只有是從windows應用商店下載安裝的WSL2分發才可能調用cmd.exe;而其他方式(例如從github下載)安裝的WSL2分發則可能無法直接調用cmd.exe
Host映射
在windows的host文件(C:\Windows\System32\drivers\etc\hosts)添加如下內容:192.168.86.2 windows.wsl
在WSL2的host文件添加如下內容:(/etc/hosts)添加如下內容:192.168.86.1 windows.local
添加Host映射後,可實現windows和wsl互ping及互相訪問的能力;不添加映射,根據IP也可能互相訪問;只是映射後,主機名更容易記住。