贡献者: addis
重要提示:截至到 2023 年 8 月,WSL 在中国大陆的安装过程中可能会遇到某种网络问题。
重要提示:WSL1 用于 NTFS 文件系统最合适,包括移动硬盘。exFAT 兼容性较差(不兼容软链,git 也会有权限 bug)。NTFS 用 WSL1 也不完美,有时候 chmod -R
不能真正的深入到每个子目录,还可能要 cd 进去再次用 chmod -R
,或者直接 find . -type f -exec sudo chmod 777 {} \;
(巨慢)。且这么做只能临时有效,打开另一个命令行就没用了。GDB 也不能用(设置断点失败)。
所以,有条件用双系统或者 Virtualbox 还是建议尽量用它们。
wsl --help
获取帮助(以下说明可能会和最新版本稍微不一致,所以建议直接看帮助)
wsl --shutdown
关闭所有 distro 和虚拟机
wsl --status
显示 wsl 状态
wsl --update
更新
wsl --set-default-version 1或2
切换新安装 wsl 的默认的版本
wsl --set-version Ubuntu-22.04 1或2
把某个已安装的 distro 在 WSL1 和 2 之间转换,如果 Turn Windows Features On or OFF 中没有开 Virtual Machine Platform,会提示错误且不做转换,打开这个和 Hyper-V,重启即可。转换需要两三分钟。注意这并不会把整个 linux 的文件系统都变成 ext4 的虚拟硬盘(可以用 WinDirStat 验证)。其实还是另外新装 wsl2 版本的 ubuntu 比较好,因为 WSL1 没有 snap store 和正常的 systemd systemctl 等。可以用下面的方法把某个 WSL1 distro 重命名,再安装相同的 WSL2 distro(没试过)。
wsl --set-default [distro]
选择默认的 distro
wsl --list
列出所有 distro wsl --list --verbose
(-l -v
)显示详细信息
wsl --list --online
列出所有可下载的 distro
wsl --install -d
安装某个 distro
C:/Users/用户名/AppData/Local/Packages/CanonicalGroup...distro版本号/
wsl --unregister ...
删除某个 distro 以及它的所有文件
wsl --export distro名 导出文件名
可以导出 wsl。例如 wsl --export Ubuntu ubuntu.tar
导出文件会存到当前路径。
wsl --import 新distro名 安装路径 导出文件名 --version 1或2
例如 wsl --import Ubuntu-20.04-WSL1-20220904 C:\Users\用户名\ C:\Users\用户名\Desktop\Ubuntu-20.04-WSL1-20220904.tar --version 1或2
注意 import 以后默认会以 root 身份登录,可以设置 .bashrc
自动 su
成某个用户。
No3/WSL-images/Ubuntu-20.04-WSL2-20220905.tar
是从 Miranda 的 Win11 备份的镜像,亲测在 Surface 上可以直接 import,X11 可用(但是 CLion 好卡)
xeyes
可不可以(apt install x11-apps
)。可以的话 cp ~/.Xautority /home/用户名/
然后 su 用户名
再试试 xeyes
可不可以。可以的话就把这两个命令添加到 /root/.bashrc
中。
xeyes
测试,而 WSL1 不行。
sudo service ssh --full-restart
才会运行。
ifconfig
查看) 和 windows 的 IP 地址 (在 cmd 中用 ipconfig
) 是一样的,而不是像虚拟机一样使用 NAT
openssh-server
即可
openssh-server
sshd: no hostkeys available -- exiting.
,那就用 sudo ssh-keygen -A
sudo mount -o uid=用户名 -t drvfs g: /mnt/g
export DISPLAY=:0
,重启终端即可
使用以下方法,可以在第一次手动打开 WSL 或者在 windows 登录后自动运行一些 WSL 程序。
/etc/wsl.conf
,内容如下即可。
[boot]
command="命令1; 命令2"
其中的命令会直接使用 sudo 权限运行。这些命令会在 WSL 启动时执行(注意不是每次打开 WSL 命令行,而是第一次打开时执行)。输出不会显示在命令行中。也会在 cmd 中输入 wsl --shutdown
然后再打开 WSL 命令行时运行。
wsl.exe
(任务管理器里面可以找到进程的可执行文件的位置)创建一个快捷方式到启动文件夹 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
。
command
中不可以使用 &
后台执行,相当于有一个看不见的命令行窗口在执行这些。
mount -o uid=addis -t drvfs g: /mnt/g;
service
命令。例如用于开启 sshd:service ssh --full-restart;
cmd
中 wsl -l -v
必须要显示 running,WSL 才有可能执行任何东西包括 service。
frp
command="date >> /home/addis/WSL-start-log.txt; service ssh --full-restart; mount -o uid=xxx -t drvfs e: /mnt/e; /home/用户名/frp/frpc -c /home/addis/frp/frpc.ini > /home/用户名/frp/frpc.log;"
。其中 frpc
见这里。
.git
文件夹复制一份都没问题)。经测试,重新格式化为 NTFS 文件系统即可。
sudo chmod -R 755 .
就没问题了。