前言:
最近需要使用linux测试一些程序,平时用惯了windows,不得不想想办法。
使用Windows自带的WSL是一个比较好的选择。而且使用WSL有个非常方便地方可以直接在wsl内的linux系统中操作windows系统下的文件。
以下是本人在踩了很多坑之后,自己实践、总结并新鲜出炉的实操内容。
操作系统:
1)win11
任务:
1)wsl内安装ubuntu24.04(本人另外还安装了22.04,做了多个镜像,方便不同场合下加载运行测试)
2)在默认安装完ubuntu后,还说明了导出镜像和迁移位置、重载镜像。这个非常有用,特别请新手注意。
一、WSL准备
分个人喜好,可以用命令行方式安装,或图形方式安装。个人推荐命令行方式,省事。
1. 命令行方式安装
以管理员方式打开power shell 并运行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
运行上面每一句的时候,都会出现如下这样的显示,一共两次
wsl官网还有相似的命令功能,我是重复执行了一下,也没啥坏处:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
运行过程中显示如下:
到这里要重启计算机。
命令行方式不提示重启,但必须要重启才生效。
2. 图形方式安装(使用命令行安装的,可以忽略)
启用Hyper-V和虚拟机平台等三个组件
- 打开 控制面版
- 访问 “程序和功能”的 左侧“启用或关闭Windows功能”
- 选择**“适用于Linux的Windows子系统”与 “虚拟机平台”与“Hyper-V"**。有的操作系统版本中“虚拟机平台”是英文显示的。
- 点击“确定”
- 重启计算机
3. 安装更新
1. 在线更新
wsl --update
更新完显示如下。具体不同时期可能显示的版本不一样。
2. (或者)下载更新包(下载适用于x64的内核包)并手动安装。选择在线更新成功的可以忽略。
下载地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
4. 设置默认WSL版本
我们只使用wsl2,power shell 以管理员方式运行
将 WSL 默认版本设置为 WSL 2
wsl --set-default-version 2
二、安装Ubuntu
wsl --install -d Ubuntu-24.04
三、给Ubuntu搬家,还可以导出镜像
1. 注意事项
默认情况下wsl主机是安装在C盘。
对于 Linux 系统而言,后续用久了容易产生存储空间消耗。建议移动到其他盘去重新安装。
2. 先用shutdown命令关闭虚拟机
wsl --shutdown
3. 再用export将该虚拟机打包导出到一个本地其他存储路径
#使用如下命令导出虚拟机
wsl --export 虚拟机名字 导出文件路径和导出后的镜像名称(这个名称必须有)
#如果不记得虚拟机名字,可以用下面命令查看
wsl --list
#具体操作实例如下:
wsl --export Ubuntu-24.04 d:\wsl\ubuntu24.04.tar
#其中导出后的路径和文件名可以根据自己需要设置
稍等片刻即可成功导出。
4. 删除当前的虚拟机
wsl --unregister Ubuntu-24.04
#检查删除结果
wsl --list
5. 把刚刚导出的tar文件,导入wsl中。
1. 此时可以选择我们需要的安装路径,并且指定wsl版本为2(在这之前需要执行 wsl --update )
wsl --import 虚拟机名字 安装路径 tar包路径 --version 2
#具体操作实例如下:
wsl --import Ubuntu-24.04 D:/wsl D:/WSL/ubuntu24.04.tar --version 2
#解释如下
Ubuntu-24.04是导入后的系统名称
D:/wsl是导入后镜像存入位置
D:/WSL/ubuntu24.04.tar是要导入的镜像压缩包位置
--version 2可加可不加,只要之前指定了版本就无所谓
2. 检查导入结果
注意,如果你的安装路径里有空格(比如 Progarm Files 文件夹),则需要用英文引号将路径给括起来。
#运行下面命令,检查一下wsl中的镜像状态
wsl -l -v
NAME STATE VERSION
* docker-desktop Stopped 2
Ubuntu-24.04 Stopped 2
##我有两个版本镜像,这里载入的是24.04版本
导入成功,并且版本为wsl2;
导入后,tar文件可以删除,不会影响虚拟机使用。
3. 查看虚拟机安装路径中的虚拟磁盘文件
能在指定的导出路径里面找到一个vhdx虚拟磁盘文件,代表移动安装目录成功。
这个shortcut.ico怎么来的我还真不知道
6. 启动虚拟机。
#启动操作
wsl -d ubuntu-24.04
#系统初次安装完一般会要求设置一个用户名和密码,之后要进入root需要sudo
四、修复 WSL -Ubuntu的 DNS 配置
WSL 默认使用 Windows 的 DNS,但有时(经常!!!)会失效。
!!!如果你发现系统动不动就无法安装软件,或这个安装更新,就很可能是DNS问题。!!!
需要修改 配置。
1.查看DNS状态(22.04以后)
resolvectl status
它查看的实际是/etc/systemd/resolved.conf运行的内容。
呵呵,看到了又怎么样,它仍然可能让你因为域名无法解析而无法上网。
如果发现下面红框内显示的是“missing”,就大概率上不了网。我这里显示的是配置修改后的。请继续往下看。
2.几个与DNS有关的文件,实际关系我没搞明白
- /etc/resolv.conf:此文件定义了系统使用的DNS服务器地址。
- /etc/systemd/resolved.conf:此文件是systemd-resolved服务的配置文件,它负责处理DNS解析。
- /run/systemd/resolve:此目录包含一些与DNS解析相关的临时文件。
3. 编辑etc/resolv.conf配置文件,莽吧(22.04下一定行)
手动修改 etc/resolv.conf配置文件,莽就得了。(24.04好像这个文件默认用户就不能改,大家可以自己试试)
sudo nano /etc/resolv.conf
删除原有内容,替换为:
nameserver 8.8.8.8 # Google DNS
nameserver 1.1.1.1 # 国外 DNS
nameserver 4.4.4.4 # 国外 DNS
nameserver 114.114.114.114 # 国内 DNS
按 Ctrl+X → 输入 Y 保存 → 回车退出。
4. 编辑/etc/wsl.conf(22.04下一定行)
#注意加入下面这句。这句话决定了/etc/resolv.conf独立运作,不会被冲。意思就是WSL启动的时候不产生/etc/resolv.conf,这样就不会被冲掉。
generateResolvConf = false
显示就是这样
[boot]
systemd=true
[network]
generateResolvConf = false #这个是新加。
重启试试吧,应该可以。OK了。
4.另外一个办法,22.04和24.04版本采用编辑systemd配置文件的办法,但是时灵时不灵:
#使用文本编辑器编辑/etc/systemd/resolved.conf文件:
sudo nano /etc/systemd/resolved.conf
配置DNS:
#找到并取消注释(删除前面的#)以下行:
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 1.0.0.1
可根据需要替换DNS服务器地址,我把它改成了这个样子,把IPV6 的DNS也启用了。
修改完成后,保存并关闭文件。然后重启systemd-resolved服务使配置生效:
sudo systemctl restart systemd-resolved
我看到 ubuntu22.04和24.04内查看域名解析状态命令变了,用下面这个
resolvectl status
最好的办法不如做个ping域名测试
五、安装软件包
使用如下命令更新软件源,更新完毕后就可以自行下载需要的软件包。
sudo apt -y update && sudo apt -y upgrade
六、更换软件源(可选)
1.设置软件源(22.04版这样有效,24.04无效。换个版本就要踩坑,满眼都是泪呀!)
如果清华源不稳定,可以改用其他国内源(如阿里云、中科大),然后更新:
sudo sed -i 's|mirrors.tuna.tsinghua.edu.cn|mirrors.aliyun.com|g' /etc/apt/sources.list
sudo apt update
2.codename的用途
这里要多说一句,软件源配置在/etc/apt/sources.list没有错,大家如果自行编辑这个文件,需要考虑到ubuntu的名字codename问题
ubuntu的不同版本对应一个不同的版本codename:
20.04对应focal;22.04对应jammy,24.04对应noble。看看镜像源重点的如下文件结构,您大概就能理解codename用途。
可以使用如下命令检查操作系统codename:
lsb_release -a
#显示如下
Distributor ID: Ubuntu
Description: Ubuntu 24.04.2 LTS
Release: 24.04
Codename: noble
#这里的codename是noble
3.编辑sources.list的示例
- 如果你需要自己编辑更新列表文件, /etc/apt/sources.list ,你就会发现在 url 的后面紧跟着一个 codename
- 为啥只说是示例,因为24.04编辑这个版本无效了。所以,即便我像下面这样编辑也不可以。
- 如果是22.04版本,可以把其中noble换成jammy还是可以的。
4.24.04版本修改镜像源文件
镜像源的地址位置改了:
/etc/apt/sources.list.d/ubuntu.sources
编辑镜像源文件:
sudo vim /etc/apt/sources.list.d/ubuntu.sources
#我喜欢用vi,都差不多,看个人习惯
sudo vi /etc/apt/sources.list.d/ubuntu.sources
你会看到文件里显示的镜像源是这样
添加镜像源,同时把系统默认配置注释掉
测试结果:
sudo apt-get update
sudo apt-get upgrade
其他国内镜像源:
#中科大源
Types: deb
URIs: http://mirrors.ustc.edu.cn/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
#阿里源
Types: deb
URIs: http://mirrors.aliyun.com/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
#网易源
Types: deb
URIs: http://mirrors.163.com/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
七、更换python命令指向
在 Linux 系统(比如 WSL)中,直接输入 python 可能无法运行,因为默认情况下,许多现代 Linux 发行版只预装了 python3,而 python 命令可能需要额外配置才会指向 python3。现实是现在基本没人用python2。
1. 直接使用 python3
大多数情况下,系统已经安装了 Python 3,可以直接运行:
python3
2. 安装 python-is-python3,让 python 指向 python3
如果你想直接输入 python 就能运行 Python 3,可以安装这个包:
sudo apt update
sudo apt install python-is-python3
安装后,python 命令就会自动指向 python3。
3. 检查已安装的 Python 版本
python3 --version # 查看 Python 3 版本
python --version # 如果安装了 python-is-python3,会显示 Python 3 版本
python2 --version # 如果安装了 Python 2,查看版本
总结
这是在踩了很多坑之后,自己实践、总结并新鲜出炉的实操内容。
没有实操发帖是没PY的行为!!!鄙视那些粘贴文章骗分的坑爹博主!