清理、压缩、减少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