WSL使用

news2024/9/28 21:23:21

WSL使用

WSL安装和使用

Termianl和Ubuntu的安装

  1. 打开Hype-V虚拟化配置
  2. Microsoft Store中搜索Window Terminal并安装
  3. Microsoft Store中搜索Ubuntu, 选择安装Ubuntu 22.04.3 LTS版本
  4. 打开Window Terminal选择Ubuntu标签栏, 进入命令行

中文输入法安装

查看是否安装了fcitx框架

fcitx --version

安装fcitx框架, 如果安装不成功, 记得将软件源切成国内的

  • 中途会让你输入Y/N, 记得都选择Y即可
sudo apt-get update
sudo apt-get install fcitx-bin

安装拼音

sudo apt-get install fcitx-table

Ubuntu中文乱码解决

安装中文支持包

  • 碰到输入Y/N选择输入Y即可
sudo apt-get install language-pack-zh-hans

使用vim在/etc/environment环境变量追加中文支持(如果没有就新建), 内容如下

LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"

修改/var/lib/locales/supported.d/local(如果没有这个文件就新建一个)

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN GB2312

最后执行

sudo locale-gen

vim编辑文件乱码

编辑文件(没有则手动创建) 添加如下几行

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8 

固定IP

默认情况下, WSL实例的 IP 地址不是固定的。每次 WSL 实例启动时,它通常会从 Windows 主机的一个虚拟网络适配器获得一个新的 IP 地址。这个虚拟网络适配器充当 DHCP服务器,为 WSL 实例分配 IP 地址

最常用的方案是与宿主机共享IP, 这可以通过配置wslconfig文件做到:
  • 默认情况下,.wslconfig 文件不存在。 它必须创建并存储在%UserProfile%目录中才能应用这些配置设置
  • 只能用于 WSL 2 运行的发行版
  • 该目录路径应类似于:C:\Users\<UserName>\.wslconfig

在用户目录下的.wslconfig文件中添加如下内容:

[experimental]
# 如果值为 mirrored,则会启用镜像网络模式。 默认或无法识别的字符串会生成 NAT 网络
networkingMode=mirrored
# 更改将 DNS 请求从 WSL 代理到 Windows 的方式
dnsTunneling=true
# 如果设置为 true,则 Windows 防火墙规则以及特定于 Hyper-V 流量的规则可以筛选 WSL 网络流量
firewall=true
# 强制 WSL 使用 Windows 的 HTTP 代理信息
autoProxy=true

修改/etc/resolv.conf配置(这个是DNS配置), 在后续追加一下内容

# google的域名解析服务器
nameserver 8.8.8.8
# 联通的域名解析服务器
nameserver 114.114.114.114

执行下述命令, 发现可以联网了

ping baidu.com

查看发行版相关命令

启动默认的Linux发行版shell

wsl

在默认发行版中Linux中执行指定指令

wsl <command>

查看可安装的Linux发行版

wsl --list --online

查看已安装的发行版本

wsl --list

更新 WSL 的 Linux 内核

wsl --update

显示 WSL 的状态以及默认的 WSL 版本和发行版

wsl --status

显示所有可用的 WSL 命令和用法选项

wsl --help

磁盘管理

切换WSL的Linux存储位置

查看vhdx 文件在window的存放路径

  • 由于我目前使用的版本名为Ubuntu-22.04, 所以版本名就应该填写成Ubuntu-22.04, 这可以通过wsl --status查
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '版本名' }).GetValue("BasePath") + "\ext4.vhdx"

例如查出来的位置为C:\Users\Admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx

由于我们不想将Ubuntu安装在C盘, 所以打算将其移动到E:\software\WSL\Ubuntu\Ubuntu-22.04下

方式一

将C盘中的vhdx文件拷贝到E:\software\WSL\Ubuntu\Ubuntu-22.04\ext4.vhdx

注销并删除指定的 Linux 发行版, 同时会删除磁盘文件

wsl --unregister Ubuntu-22.04

将指定vhdx导入

wsl --import-in-place Ubuntu-22.04 E:\software\WSL\Ubuntu\Ubuntu-22.04\ext4.vhdx
方式二

导出Ubuntu-22.04到E:\software\WSL\Ubuntu\Ubuntu-22.04.tar

  • 注意了, 必须是以tar包结尾的
wsl --export Ubuntu-22.04 E:\software\WSL\Ubuntu\Ubuntu-22.04.tar

注销并删除指定的 Linux 发行版, 同时会删除磁盘文件

wsl --unregister Ubuntu-22.04

将指定tar导入

  • 将E:\software\WSL\Ubuntu\Ubuntu-22.04.tar导入到E:\software\WSL\Ubuntu\Ubuntu-22.04 , 并且分发名为Ubuntu-22.04
  • 导入后, 发现Ubuntu-22.04下存放的是ext4.vhdx,和方式一一样
wsl --import Ubuntu-22.04 E:\software\WSL\Ubuntu\Ubuntu-22.04 E:\software\WSL\Ubuntu\Ubuntu-22.04.tar
  • 这个tar包就相当于一个快照备份, 当出问题了, 那么就可以将原理分发版本注销, 然后重新解压一份出来
清理vhdx磁盘空间, 因为wsl不会自动收缩vhdx文件大小

立即终止所有运行的 WSL Linux 发行版并关闭虚拟机。

wsl --shutdown

diskpart解释器

  • 执行完后进入到一个新的DISKPART命令行解析器
diskpart

选择指定的ext4.vhdx

  • 这里选择的是刚才导入的vhdx
  • 执行完下述代码会提示"DiskPart 已成功选择虚拟磁盘文件。"
select vdisk file="E:\software\WSL\Ubuntu\Ubuntu-22.04\ext4.vhdx"
显示与此虚拟磁盘关联的详细信息
  • 包括虚拟大小,表示当前分配给 VHD 的大小上限
detail vdisk
修改文件的磁盘管理方式

只读模式链接虚拟磁盘

attach vdisk readonly

虚拟磁盘修改紧凑模式

compact vdisk

退出磁盘

detach vdisk

退出DISKPART

exit
设置磁盘稀疏以自动回收

.wslconfig默认情况下,.wslconfig 文件不存在。 它必须创建并存储在 %UserProfile% 目录中才能应用这些配置设置

下面是我的全局配置.wslconfig

配置以下内容, 设置完后重新启动wsl

[experimental]
# 可以在 gradual, dropcache, disabled 之间选择, 检测空闲 CPU 使用率后,自动释放缓存的内存。 设置为 gradual 以慢速释放,设置为 dropcache 以立即释放缓存的内存
autoMemoryReclaim=gradual
# 如果设置为 true,则任何新创建的vhdx磁盘将自动设置为稀疏
sparseVhd=true

如果是局部配置则是配置在wsl.conf

  • 作为 unix 文件存储在发行版的 /etc 目录
  • WSL 1和 WSL 2都可以使用

LxRunOffline

为什么需要LXRunOffline

为了不撑爆系统盘,除了修改 Win­dows 应用安装位置,还可以把 WSL 整个安装目录进行转移,使用 wsl --exportwsl --import 这两个命令可以对 WSL 进行打包再自定义目录安装,就相当于转移

但是wsl自带的原生命令还不够强大, LxRunOffline,它可以安装任意发行版到任意目录、转移已安装的 WSL 目录、备份 WSL、设置默认用户和修改环境变量等操作,完全碾压 wslwslconfig 这些简陋原生管理命令

下载和安装

下载地址,mingw或者msvc格式其中一个即可, 这里我选择的是mingw格式

解压后, 选择一个目录安装, 然后将安装目录配置到环境变量

输入LxRunoffline list或者lxrunoffline list

  • 不区分大小写

如果显示如下, 那么就表示成功了
在这里插入图片描述

如果出现下述结果, 那么可以参考了这个博客, 去对注册表找到TryStotreWSL, 并从注册表中移除
在这里插入图片描述

删除后, 再次执行命令就发现可以了
在这里插入图片描述

常用命令

  • l , list - 列出所有已安装的发行版
  • gd , get-default - 获取 bash.exe 使用的默认发行版
  • sd , set-default - 设置 bash.exe 使用的默认发行版
  • i , install - 安装新的发行版
  • sd , set-default - 设置 bash.exe 使用的默认发行版
  • ui , uninstall - 卸载发行版
  • rg , register - 注册现有的安装目录
  • ur , unregister - 取消注册发行版但不删除安装目录
  • m , move - 将发行版移动到新目录
  • d , duplicate - 在新目录中复制现有发行版
  • e , export - 将发行版的文件系统导出到.tar.gz 文件,该文件可以通过 install 命令安装
  • r , run - 在发行版中运行命令
  • di , get-dir - 获取发行版的安装目录
  • gv , get-version - 获取发行版的文件系统版本
  • ge , get-env - 获取发行版的默认环境变量
  • se , set-env - 设置发行版的默认环境变量
  • ae , add-env - 添加到发行版的默认环境变量
  • re , remove-env - 从发行版的默认环境变量中删除
  • gu , get-uid - 获取发行版的默认用户的 UID
  • su , set-uid - 设置发行版的默认用户的 UID
  • gk , get-kernelcmd - 获取发行版的默认内核命令行
  • sk , set-kernelcmd - 设置发行版的默认内核命令行
  • gf , get-flags - 获取发行版的一些标志有关详细信息,请参考这里
  • sf , set-flags - 设置发行版的一些标志有关详细信息,请参考这里
  • s , shortcut - 创建启动发行版的快捷方式
  • ec , export-config - 将发行版配置导出到 XML 文件
  • ic , import-config - 从 XML 文件导入发行版的配置
  • sm , summary - 获取发行版的一般信息
转移WSL安装目录

先查看系统中安装的WSL

lxrunoffline l

将WSL进行移动

lxrunoffline m -n <WSL名称> -d <路径>

查看移动的路径

lxrunoffline di -n <WSL名称>

在这里插入图片描述

打开目录发现Ubuntu-22.04移动到了"E:\software\WSL\Ubuntu\temp-Ubuntu\ext4.vhdx", 但是"E:\software\WSL\Ubuntu\Ubuntu-22.04"目录不见了

备份和恢复WSL
备份

先查看安装的WSL

lxrunoffline l

输入需要备份的 WSL 名称和备份的目标路径

lxrunoffline e -n <WSL名称> -f <压缩包路径>.tar.gz
  • 类似但不等同于wsl --export <WSL名称> <压缩包路径>.tar。LxRunOf­fline 备份完会生成一个.xml后缀的同名配置文件,比如WSL.tar.gz.xml
  • 必定是以.tar.gz结尾
  • 目前lxrunoffline暂不支持WSL2,如果导出的是WSL2则报以下错误:[ERROR] The action/argument “export” doesn’t support WSL2
    • 所以备份还是WSL原来命令备份比较合适
恢复
lxrunoffline i -n <WSL名称> -d <安装路径> -f <压缩包路径>.tar.gz
  • 类似但不等同于wsl --import <WSL名称> <安装路径> <压缩包路径>.tar。LxRunOf­fline 会读取备份时生成的配置文件并写入配置,前提是同目录且同名。否则你需要加入-c参数指定配置文件。
使用命令运行指定 WSL

在有多个 WSL 的情况下,可以指定运行某个发行版。

lxrunoffline r -n <WSL名称>

等同于wsl -d <WSL名称>

设置默认 WSL

设置默认 WSL 后,可以在 cmdpowershell 中输入 wsl 直接调用默认的 WSL 。

lxrunoffline sd -n <WSL名称>

等同于wsl -s <WSL名称>

使用 LxRunOffline 修改 WSL 名称

查看 WSL 名称。

wsl -l

查看 WSL 安装目录。

lxrunoffline di -n <WSL名称>

导出指定的 WSL 配置文件到目标路径。

lxrunoffline ec -n <WSL名称> -f <配置文件路径>.xml

配置信息可以输入lxrunoffline sm -n <WSL名称>查看

取消注册(这个操作不会删除目录)

lxrunoffline ur -n <WSL名称>

使用新名称注册

lxrunoffline rg -n <WSL名称> -d <WSL路径> -c <配置文件路径>.xml

参考资料

WSL入门到入土
如何管理 WSL 磁盘空间
WSL 中的高级设置配置
LxRunOffline下载地址
使用Windows子系统作为生产力工具

LxRunOffline 使用教程 - WSL 自定义安装、备份

WSL2迁移到非系统盘遇到的问题

WSL2 的 2.0 更新彻底解决网络问题

ubuntu下ping域名报错Name or service not known_ubuntu name or service not known

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1541412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023第13届上海生物发酵展8月7-9日举办

2024第13届国际生物发酵产品与技术装备展&#xff08;上海展&#xff09; 2024年8月7-9日|上海新国际博览中心 主办单位&#xff1a; 中国生物发酵产业协会 承办单位&#xff1a; 上海信世展览服务有限公司 院校支持&#xff1a; 北京工商大学 大连工业大学 华东理工大…

FakeLocation报虚拟位置服务连接失败,请重启设备再试

虚拟位置服务连接失败&#xff0c;请重启设备再试 最近遇到一个手机软件报的bug“虚拟位置服务连接失败&#xff0c;请重启设备再试” 因为我的实体“虚拟机”已经root&#xff0c;按道理是不可能报这个错的 折腾了2天&#xff0c;终于解决了 原来是这样&#xff0c;安装最新…

React腳手架已經創建好了,想使用Vite作為開發依賴

使用Vite作為開發依賴 安裝VITE配置VITE配置文件簡單的VITE配置項更改package.json中的scripts在根目錄中添加index.html現在可以瀏覽你的頁面了 安裝VITE 首先&#xff0c;在現有的React項目中安裝VITE npm install vite --save-dev || yarn add vite --dev配置VITE配置文件 …

【MySQL】复合查询——基本单表查询、多表查询、自连接、子查询、使用from进行子查询、合并查询

文章目录 MySQL复合查询1. 基本单表查询2. 多表查询3. 自连接4. 子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 使用from进行子查询 5. 合并查询5.1 union5.2 union all MySQL 复合查询 数据库的复合查询是指在一个查询中结合使用多个查询条件或查询子句&#xff0c;以…

常见技术难点及方案

1. 分布式锁 1.1 难点 1.1.1 锁延期 同一时间内不允许多个客户端同时获得锁&#xff1b; 1.1.2 防止死锁 需要确保在任何故障场景下&#xff0c;都不会出现死锁&#xff1b; 1.2.3 可重入 特殊的锁机制&#xff0c;它允许同一个线程多次获取同一个锁而不会被阻塞。 1.2…

五、分布式锁-redission

源码仓库地址&#xff1a;gitgitee.com:chuangchuang-liu/hm-dingping.git 1、redission介绍 目前基于redis的setnx特性实现的自定义分布式锁仍存在的问题&#xff1a; 问题描述重入问题同一个线程无法多次获取统一把锁。当方法A成功获取锁后&#xff0c;调用方法B&#xff0…

【C++】如何用一个哈希表同时封装出unordered_set与unordered_map

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.哈希桶源码 2.哈希…

19.删除链表的倒数第N个结点 92.反转链表II

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&#xff1a; …

模拟-算法

文章目录 替换所有的问号提莫攻击Z字形变换外观数列数青蛙 替换所有的问号 算法思路&#xff1a; 从前往后遍历整个字符串&#xff0c;找到问号之后&#xff0c;就遍历 a ~ z 去尝试替换即可。 class Solution {public String modifyString(String s) {char[] ss s.toCharA…

删除字符串--给你一个字符串S,要求你将字符串中出现的所有“gzu“子串删除,输出删除之后的S。

输入描述: 输入一行字符串S&#xff0c;长度不超过100。 输出描述: 输出进行删除操作之后的S。 #include <stdio.h> #include <stdlib.h> #include <string.h>//结合了串的模式匹配算法思路int main(){char s[100];char a[3]{g,z,u};gets(s);int nstrlen…

数据库语言一些基本操作

1&#xff0c;消除取值重复的行。 例如&#xff1a;查成绩不及格的学号&#xff1a;SELECT DISTINCT sno FROM SC WHERE grade<60. 这里使用DISTINCT表示取消取值重复的行。 2&#xff0c;比较。 例如&#xff1a;查计算机系全体学生的姓名&#xff1a;SELECT Sname FROM…

C++一维数组练习oj(3)

为什么C的一维数组练习要出要做那么多的题目&#xff1f;因为我们是竞赛学生&#xff01;想要将每个知识点灵活运用的话就必须刷大量的题目来锻炼思维。 我使用的是jsswoj.com这个刷题网站&#xff0c;当然要钱... C一维数组练习oj(2)-CSDN博客这是上一次的题目讲解 这道题有…

java每日一题——买啤酒(递归经典问题)

前言&#xff1a; 非常喜欢的一道题&#xff0c;经典中的经典。打好基础&#xff0c;daydayup!!!啤酒问题&#xff1a;一瓶啤酒2元&#xff0c;4个盖子可以换一瓶&#xff0c;2个空瓶可以换一瓶&#xff0c;请问10元可以喝几瓶 题目如下&#xff1a; 啤酒问题&#xff1a;一瓶…

[Halcon学习笔记]在Qt上实现Halcon窗口的字体设置颜色设置等功能

1、 Halcon字体大小设置在Qt上的实现 在之前介绍过Halcon窗口显示文字字体的尺寸和样式&#xff0c;具体详细介绍可回看 &#xff08;一&#xff09;Halcon窗口界面上显示文字的字体尺寸、样式修改 当时介绍的设定方法 //Win下QString Font_win "-Arial-10-*-1-*-*-1-&q…

传输层——UDP协议

端口号(Port) 端口号标识了一个主机上进行通信的不同的应用程序&#xff0c;准确来说&#xff0c;端口号标识了主机上唯一的一个进程。 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个…

罗德与施瓦茨联合广和通全面验证RedCap模组FG132系列先进性能

近日&#xff0c;罗德与施瓦茨联合广和通完成Redcap(Reduce Capability)功能和性能验证。本次测试使用R&SCMX500 OBT(One Box Tester)无线通信测试仪&#xff0c;主要验证广和通RedCap模组FG132系列射频性能以及IP层吞吐量&#xff0c;包括RedCap上下行吞吐量和射频指标如矢…

Java 自定义线程池实现

自定义线程池 简介任务图示阻塞队列 BlockingQueue<T>ReentrantLock代码 线程池 ThreadPool工作线程类 Worker 拒绝策略接口代码测试类 TestThreadPool为什么需要j i&#xff1f;&#xff08;lambad表达式相关&#xff09; 测试结果拒绝策略&#xff1a;让调用者自己执行…

c++常考基础知识(2)

二.c关键字 关键字汇总 c中共有63个关键字&#xff0c;其中包括int&#xff0c;char&#xff0c;double等类型关键字&#xff0c;if&#xff0c;else&#xff0c;while&#xff0c;do&#xff0c;等语法关键字&#xff0c;还有sizeof等函数关键字。 三.数据结构 1.数组&#x…

Navicat 干货 | 探索 PostgreSQL 的外部数据包装器和统计函数

PostgreSQL 因其稳定性和可扩展性而广受青睐&#xff0c;为开发人员和数据管理员提供了许多有用的函数。在这些函数中&#xff0c;file_fdw_handler、file_fdw_validator、pg_stat_statements、pg_stat_statements_info 以及 pg_stat_statements_reset 是其中的重要函数&#x…

浩哥带你做项目,纯免费教学

浩哥带你做项目 一、YiYi-Web项目开发1. 简介2. 技术栈2.1 后端开发环境2.2 前端开发环境 3.项目截图 二、计算机游戏程序设计&#xff08;基础篇&#xff09;三、RuoYi-Cloud项目学习1.功能介绍2.项目截图 四、鸿蒙应用开发五、软考六、Linux基础知识学习 最近浩哥社区群涌进大…