Wni11 下 WSL 安装 CentOS

Wni11 下 WSL 安装 CentOS

  • 方法一、安装包安装
    • 下载包安装
    • 安装
    • [打开 CentOS](#打开 CentOS)
      • [1. 从 Windows 终端 打开](#1. 从 Windows 终端 打开)
      • [2. 从 PowerShell 打开](#2. 从 PowerShell 打开)
  • [方法二、导入 CentOS 的 tar 文件进行安装](#方法二、导入 CentOS 的 tar 文件进行安装)
    • [0. 查看版本(可选)](#0. 查看版本(可选))
    • [1. 导出 Docker 容器到 tar 文件](#1. 导出 Docker 容器到 tar 文件)
    • [2. 将 tar 文件导入 WSL](#2. 将 tar 文件导入 WSL)
      • [2.1. 导入 tar](#2.1. 导入 tar)
      • [2.2. 改名(重导)](#2.2. 改名(重导))
      • [2.3. 备份还原](#2.3. 备份还原)
      • [2.4. 修改默认系统](#2.4. 修改默认系统)
  • 三、安装完成
    • [1. 开启 systemctl](#1. 开启 systemctl)
    • [2. 修改默认主机名](#2. 修改默认主机名)
    • [3. 修复命令行高亮丢失的问题](#3. 修复命令行高亮丢失的问题)
    • [4. 设置阿里云的 CentOS 国内源](#4. 设置阿里云的 CentOS 国内源)
  • [WSL 其他常用命令](#WSL 其他常用命令)
  • [压缩动态扩展虚拟硬盘 (VHD) 文件的物理大小](#压缩动态扩展虚拟硬盘 (VHD) 文件的物理大小)
  • 参考资料

方法一、安装包安装

下载包安装

https://github.com/mishamosher/CentOS-WSL
https://wsldl-pg.github.io/docs/Using-wsldl/#distros
https://github.com/wsldl-pg/CentWSL

安装

解压后运行 CentOS7.exe 即可

打开 CentOS

1. 从 Windows 终端 打开

安装 Windows 终端

2. 从 PowerShell 打开

方法二、导入 CentOS 的 tar 文件进行安装

在 docker 中运行一个 CentOS 容器,用 docker exprot 命令导出为 tar 文件。

0. 查看版本(可选)

先查看一下 CentOS 版本,很好是 8.x 前面安装包装的是 7.x 这回装个 8.x

bash 复制代码
ocker run -it centos /bin/bash                                                                          
[root@dca578a4bc76 /]# cat /etc/centos-release                                                                          
CentOS Linux release 8.4.2105    

确认版本没问题后,我们按下 Ctrl + P,然后紧接着按下 Ctrl + Q 这样退出 CentOS,但保持容器不终止。用 docker ps 查看一下容器还在:

bash 复制代码
C:\Users\jerry>docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
dca578a4bc76   centos    "/bin/bash"   4 minutes ago   Up 4 minutes             wizardly_hypatia

1. 导出 Docker 容器到 tar 文件

  1. 我先创建个目录用来存导出文件 D:/OS/CentOS8/
  2. 执行导出命令,格式:docker export 容器名 > 导出文件.tar
bash 复制代码
docker export wizardly_hypatia > D:/OS/CentOS8/centos8.4.2105.tar
  1. 容器利用完了,可以抛弃它了
bash 复制代码
docker stop wizardly_hypatia
docker rm wizardly_hypatia

2. 将 tar 文件导入 WSL

2.1. 导入 tar

执行命令格式:wsl --import <发行版名称> <安装目录> <导入文件.tar>

导入成功会在安装目录下生成一个虚拟磁盘镜像文件,比如:ext4.vhdx

bash 复制代码
wsl --import CentOS8.4.2105 D:\OS\CentOS8 D:\OS\CentOS8\centos8.4.2105.tar

导入完成用 wsl -l -v 查看一下:多了一个 CentOS8.4.2105

bash 复制代码
C:\Users\jerry>wsl -l -v
  NAME              STATE           VERSION
* docker-desktop    Running         2
  CentOS8.4.2105    Stopped         2
  CentOS7           Stopped         2
  Debian            Stopped         2

2.2. 改名(重导)

这名称太不合群了,我后悔了,还是改改吧,先注销(注销成功会清除安装目录下的 ext4.vhdx),重新导。

bash 复制代码
wsl --unregister CentOS8.4.2105
bash 复制代码
wsl --import CentOS8 D:\OS\CentOS8 D:\OS\CentOS8\centos8.4.2105.tar

重新导入效果

bash 复制代码
C:\Users\jerry>wsl -l -v
  NAME              STATE           VERSION
* docker-desktop    Stopped         2
  CentOS8           Stopped         2
  CentOS7           Stopped         2
  Debian            Stopped         2

2.3. 备份还原

wsl --exportwsl --import 配合也可以用来给系统做备份

powershell 复制代码
# ------ 备份 ------
wsl --export centos8 d:\OS\centos8\bak_001.tar

# ------ 还原 ------
# 卸载
wsl --unregister centos8 
# 导入
wsl --import CentOS8 "D:\OS\centos8" "D:\OS\CentOS8\bak20240908.tar"

2.4. 修改默认系统

方便以后 WIN + R 运行 WSL 直接进 CentOS8

bash 复制代码
wsl -d centos8
bash 复制代码
C:\Users\jerry>wsl -l -v
  NAME              STATE           VERSION
  CentOS7           Running         2
* CentOS8           Stopped         2
  Debian            Stopped         2
  docker-desktop    Stopped         2

操作完后碰到要我更新,又装了一下这个 适用于 x64 计算机的 WSL2 Linux 内核更新包

三、安装完成

1. 开启 systemctl

systemctl 默认没开启,配置一下,重启就可以了[1](#1)

执行命令:

bash 复制代码
echo -e "[boot]\nsystemd=true" | sudo tee -a /etc/wsl.conf

它的作用是将如下信息写入 /etc/wsl.conf

bash 复制代码
[boot]
systemd=true

注意:接下来要先用 wsl -t centos7 停掉 centos7,再启动 centos7 才生效:

bash 复制代码
# 查看一下版本信息
systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

2. 修改默认主机名

注意:这里按原来 centos 修改主机名的方法是没用的。

登录进来可以看到,默认主机名用的就是宿主系统 Win11 的主机名。看着容易精神分裂,我还是改改:

还是改 /etc/wsl.conf [2](#2),然后重启生效。

bash 复制代码
[boot]
systemd=true
[user]
default=jerry
[network]
hostname=centos7
generateHosts=true

重启后进来,主机名变了:

Shell 复制代码
[jerry@centos7 ~]$ 

3. 修复命令行高亮丢失的问题

  1. ~/.bashrc 末尾追加一句(网上找到),喜欢折腾的朋友可以自己研究[3](#3)

    powershell 复制代码
    export PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "

    执行 source ~/.bashrc 生效。

  2. 当然哪果你装了多个 Linux 子系统,也可以去别的版本找参考。(打开我的电脑,看左下角)

4. 设置阿里云的 CentOS 国内源

先备份

bash 复制代码
cp -rv /etc/yum.repos.d /etc/yum.repos.d_bak

再修改源

bash 复制代码
sudo sed -i.bak 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sudo sed -i.bak 's|^#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*.repo
  1. sed:这是一个文本处理工具,常用于在 Linux 和 Unix 系统中执行简单的文本模式替换。
  2. -i :这个选项告诉 sed 在原地修改文件,而不是将结果输出到标准输出(即终端)。
    加上 .bak 表示修改前做备份。
  3. 's|目标|结果|g' :这是 sed 的替换命令语法。
    s 表示替换命令。
    | 作为分隔符,用于分隔命令的不同部分。
    g:全局标志,表示在同一行中进行所有的替换,而不仅仅是第一次匹配。
    将所有以 mirrorlist 替换为 #mirrorlist,也就是在开头加#注释掉。
    将所有包含 #baseurl=http://mirror.centos.org 的行修改为阿里云的 CentOS 镜像地址
  4. /etc/yum.repos.d/CentOS-*.repo :此路径匹配 /etc/yum.repos.d/ 目录下所有以 CentOS- 开头 .repo 结尾的文件。

更新走一波

bash 复制代码
yum  update

装一下 vim

bash 复制代码
yum -y install vim

WSL 其他常用命令

以我们前面安装的 CentOS8 为例

  • wls -t CentOS8 停止子系统运行

  • wsl -v 查看 WSL 的版本信息

    bash 复制代码
    C:\Users\jerry>wsl -v
    WSL 版本: 2.2.4.0
    内核版本: 5.15.153.1-2
    WSLg 版本: 1.0.61
    MSRDC 版本: 1.2.5326
    Direct3D 版本: 1.611.1-81528511
    DXCore 版本: 10.0.26091.1-240325-1447.ge-release
    Windows 版本: 10.0.22000.1936
  • 如果 root 忘记密码可以直接 --user root 以 root 身份登录,再 passwd root 改密码

    bash 复制代码
    wsl -u root -d centos8

压缩动态扩展虚拟硬盘 (VHD) 文件的物理大小

compact vdisk

减小动态扩展虚拟硬盘 (VHD) 文件的物理大小。 此参数非常有用,因为动态扩展 VHD 的大小会随着文件的添加而增加,但不会随着文件的删除而自动减小。

  1. 先把子系统都停掉

    powershell 复制代码
    wsl --shutdown
  2. 打开 diskpart

    powershell 复制代码
    diskpart
  3. 执行

    powershell 复制代码
    select vdisk file=D:\OS\CentOS7\ext4.vhdx
    attach vdisk readonly
    compact vdisk
    detach vdisk

参考资料

适用于 Linux 的 Windows 子系统文档
导入要与 WSL 一起使用的任何 Linux 发行版


  1. 使用 systemd 通过 WSL 管理 Linux 服务 ↩︎

  2. WSL 中的高级设置配置 ↩︎

  3. Bash Shell PS1:10 个让 Linux 提示符变得非常实用和时尚的例子 ↩︎

相关推荐
A小辣椒21 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式