WSL常见问题

清理、压缩、减少WSL体积

检查WSL下的目录大小,用于清理垃圾

sudo du -hd1 --exclude={/mnt,/proc,/sys,/dev} / 2>/dev/null

压缩WSL的磁盘体积

WSL占用空间膨胀后,不会自动回收。需要手动处理

WSL下执行

# 清理 WSL 内部垃圾(确保已删除无用文件)
sudo apt clean;
sudo apt autoremove --purge;

# 填充空闲空间(按需调整 count 参数) 
sudo dd if=/dev/zero of=/zero.fill bs=1M count=100000 status=progress ;

# 删除填充文件 
sudo rm -f /zero.fill;

PowerShell下执行

# 以管理员身份运行 PowerShell
# 关闭 WSL
wsl --shutdown

# 压缩虚拟磁盘vhdx文件(或者windows找到下面的文件,右键-属性-压缩磁盘空间 亦可)
diskpart
select vdisk file="C:\Users\LG\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx"
compact vdisk
exit

# 重新启动WSL
wsl -d Ubuntu-22.04

修改默认登录用户

在cmd下运行下面命令:

ubuntu config --default-user <username>

即可改变默认登录WSL的用户

windows系统升级后,自带的ubuntu版本也会跟着升级,自定义安装指定版本ubuntu后,上面的命令跟着变化:

ubuntu1804.exe config --default-user <username>

使cron服务自动运行

编辑:/root/.bashrc

加入:service cron start

当你以root用户登入linux系统后,会自动启动cron服务

Windows10启动时自动运行WSL内命令

(参考这个:https://dev.to/ironfroggy/wsl-tips-starting-linux-background-services-on-windows-login-3o98)

假设WSL内的自动运行脚本已经写好,放在此处:/root/scripts/autorun_when_windows10_start.sh,

并且加入执行属性:

chmod a+x /root/scripts/autorun_when_windows10_start.sh

Windows下打开任务计划程序

创建基本任务,任务名称随便起,例如:Start WSL Program When Windows10 Is Running , 描述怎么写看心情

触发器,建立一个触发器,触发条件可以写:启动时

操作,建立一个操作,

“程序或脚本”填:C:\Windows\System32\bash.exe

“添加参数”填:-c “/root/scripts/autorun_when_windows10_start.sh”

C:\Windows\System32\bash.exe

-c “/root/autorun_when_windows10_start.sh”

创建任务后,查看任务,勾选“不管用户是否登录都要运行”,并且为windows用户设置一个密码!!

WSL 文件权限问题

最近在 WSL 下碰到 PHP chmod(): Operation not permitted 这个问题,看起来是文件权限的问题,不过查看该文件的权限是 777,不知道是 Bug 还是什么原因导致的,Google 找了下,有说是 Windows 文件系统是 NTFS 的问题,Linux 挂载需要开启一些特性,解决办法是更改 wsl.conf 文件。

sudo vim /etc/wsl.conf

添加挂载磁盘的一些默认设置。

[automount]
enabled = true
options = "metadata,umask=22,fmask=11"
mountFsTab = false

更改后,重启电脑,一些文件的权限会改为跟 Linux 权限一样,不再是默认的全部 777 了。

WSL配置项见:WSL配置项

WSL里Nginx+PHP,反映慢,卡住等问题

https://www.tech1024.com/original/3010.html

在wsl里搭建lnmp环境时,

访问简单的PHP 文件 (例如Hello world)没有问题,

但访问多数 PHP 文件卡死,

有的(例如phpinfo()),虽然可以加载出来但浏览器显示网页仍未加载完全或者巨慢。

原因

用 Unix Socket 方式连接 Nginx 和 PHP,然而,WSL 对 Unix Socket 的支持并不是那么完美

解决方法

在 nginx.conf 的 http 节点添加:

fastcgi_buffering off;

然后重启nginx即可。

——————————————————–

目前我的解决方案:

1、PHP运行方式改为监听端口:

/etc/php/7.2/fpm/pool.d/www.conf 文件:

;listen = /run/php/php7.2-fpm.sock 
listen = 127.0.0.1:9000

2、对应更改nginx的php对接方式:

/etc/nginx/nginx.conf 文件:

upstream php {
        #server unix:/run/php/php7.2-fpm.sock;
        server 127.0.0.1:9000;
}

3、更改nginx的fastcgi的buffer:

http {
    ....
    fastcgi_buffering off;
    ....
}

——————————————————–

查看自己的IP

root@zendkee:~# curl ip.gs
Your IP address is: 45.251.109.7
For the location information, please visit https://ip.sb/ or join our Telegram group https://t.me/sbfans

工作电脑初始化脚本

ln -s /mnt/c/Windows/System32/drivers/etc/hosts /root/hosts
ln -s /root/.ssh/id_rsa.pub /root/key
ln -s /mnt/d/web_backup/ /root/web_backup
ln -s /mnt/d/wamp64/www/ /root/www
echo -e "set paste\nset nu" >> /root/.vim/vimrc

运行ssh登录

重新安装sshd服务

(自带的sshd服务好似有问题)

sudo apt-get remove openssh-server
sudo apt-get install openssh-server

修改配置文件

修改文件:/etc/ssh/sshd_config

#是否允许root登录
PermitRootLogin no

#使用公钥认证
PubkeyAuthentication yes

#使用密码认证
PasswordAuthentication yes

#允许登录的用户
AllowUsers 用户名1 用户名2

重启服务

sudo service ssh --full-restart

windows下重启wsl

管理员权限打开powershell ,然后执行下面命令

关闭服务

net stop LxssManager

重启服务

net start LxssManager

查看WSL安装的发行版

wsl --list

查看WSL的版本

wsl --list --verbose

切换WSL的版本

wsl --set-version <DistributionName> 2

终止特定的 WSL 发行版

wsl --terminate Ubuntu-18.04

启动特定发行版

wsl -d Ubuntu-18.04

启动该实例:

wsl --register

在指定目录下打开 WSL

wsl -d Ubuntu-18.04 cd /path/to/your/directory

关闭WSL

wsl --shutdown

切换默认的发行版本

#举例:wsl --set-default <版本名称>
wsl --set-default Ubuntu-22.04

解决Vmmem内存占用过大问题

windows下的用户文件夹(可以使用Win+R,输入:%UserProfile% 打开。wsl下的目录是:/mnt/c/Users/Zendkee/),新建文件.wslconfig,内容如下

[wsl2]
memory=2GB
swap=0
localhostForwarding=true

然后关闭WSL,CMD下输入:

wsl –shutdown

Scroll to Top