WSL 迁移发行版文件位置

迁移 wsl 系统的文件位置的方法是:导出再导入。我这里操作的发行版是 Debian,你根据需要更换就可以,如 Ubuntu。

1、停止 wsl 运行的虚拟机

1
2
3
4
5
# 停止全部虚拟机
wsl --shutdown

# 只停止 Debian
wsl -t Debian

2、导出

导入导出有两种模式,一种是导出 tar 文件,再把 tar 文件导入到指定的文件夹,生成新的虚拟硬盘;另一种是导出 vhdx (虚拟硬盘)文件,再把虚拟硬盘导入,继续使用该虚拟硬盘。我们用第二种方法操作。

1
wsl --export Debian D:\WSL\Debian-12-ext4.vhdx --vhd

也可以直接把 C:\Users\[user]\AppData\Local\Packages\[distro]\LocalState\[distroPackageName]\ext4.vhdx 复制到指定位置再导入。

3、卸载掉要迁移的发行版

1
wsl --unregister Debian

4、导入

1
wsl --import-in-place Debian D:\WSL\Debian-12-ext4.vhdx

5、设置默认用户

如果不设置,默认将用 root 用户登录。

1
Debian config --default-user <username>

Debian 12 设置使用清华镜像源

Debian 官方源网速太慢,换成国内源必不可少。

1、安装 apt https 支持

1
sudo apt install apt-transport-https ca-certificates

2、修改源

先备份 /etc/apt/sources.list,然后把其内容替换为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware

# deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

备注

PhpStorm 性能调优

一、减少索引耗时

PHPStorm 不索引被排除的目录。在项目文件/文件夹上右键可排除、取消排除目录,更方便的是在 Settings > Directories 可查看和管理以标记的目录。

两个索引大户是 vendornode_modules 目录。

添加 php

vendor 目录排除,再到 Setting > PHP 把需要用到的包目录加入到 Include path

有时候把 Setting > PHP > Include path 的很多 vendor 中的目录去掉后,重启 PHPStorm 又自己加进去了。
解决:Setting > PHP > composer 设置的 作为库添加软件包 前的勾去掉。

node_modules

PHPStorm 默认已经把 node_modules 排除掉,在 Settings > Languages & Frameworks > JavaScript > Libraries 中自动把 package.json 中依赖的库加入到名为 ${project-name}/node_modules 的库。

我们可以用 pnpm 代替 npm 管理包来减少 IDE 的卡顿。pnpm 极大优化性能,速度更快、占空间更少。pnpm 管理的 node_modules 使用树状结构而不是扁平结构,IDE 打开 node_modules 目录不卡。

Laravel 排除目录

Laravel 项目还可以把 publicstorage 目录排除。

二、加大允许使用内存

可在 help > 更改内存设置 修改最大堆大小,也可在 help > Edit Custom VM Options 中设置如 -Xmx2048m

三、可去掉一些平时用不到的插件

四、不建议的优化

禁掉一些很好用的功能达到提速的目的是来搞笑的。如有人建议禁掉 Language injection 插件,完全禁掉这个插件是不可取的,可以到 Settings > Editor > Language Injections 把一些用不到的插入语言去掉。

Vite缩小打包体积:使用 visualizer 分析文件依赖关系与文件大小

Vite 中用 manualChunks 分割打包时,找文件依赖很麻烦,用 rollup-plugin-visualizer 可以帮我们找出依赖关系、分析依赖包的大小。

安装插件 rollup-plugin-visualizer

pnpm i -D rollup-plugin-visualizer

使用插件

vite.config.js 中添加:

1
2
3
4
5
import { visualizer } from 'rollup-plugin-visualizer';

plugins:[
visualizer({ open: true }) // 使用依赖分析,open: true 开启编译完成后自动弹出分析结果 html 页面
]

分析结果

执行 pnpm build,编译完成后,会在浏览器中自动打开下面的页面:

visualizer

ElementPlus 开发 SPA 应用 dev 模式加载太慢的原因及解决办法

问题复现

开发 SPA 应用用到 ElementPlus,官方推荐用 自动导入 方式来引用。

如果你用笔记本开发,那么预览时 js 的加载速度会极慢,node 占 CPU 超过100%,非常影响开发体验,恨不得换到 MPA 模式开发。

原因

因为自动自动导入方式预览时,要加载一百多个js文件。如果你用的是强劲的台式机,用这个方式没发现有明细的卡。笔记本 CPU 顶不住。

解决办法

完整引入按需导入 就没这个问题。

建议使用 完整引入 方式,ElementPlus 相关 js 就只引入了一个 /node_modules/.vite/deps/element-plus.js,而不是自动导入的上百的js文件。

编译后 element-plus 后的 js gz 后需要多传输 100k 左右,如果你受不了,可以另外加一个自动加载的 vite 配置,在增加一个创建不用全局引入 ElementPlus 的入口文件给 vite 引用。

如:build 时使用 vite.build.js 配置,在 vite.build.js 中引用使用 自动导入 的js入口文件。再把 package.jsonscripts.build 改为 vite build --config vite.build.js,这样就可以实现 dev 时使用完整引入ElementPlus,build 时使用自动导入减少编译文件的大小。

Linux 常用命令: 权限管理

  • 每个文件和文件夹有三种用户许可类型:
    • u 所有者(user)
    • g 所有者群组(group),代表组中的所有成员;
    • o 其他(other)。
  • 三种基本权限类型可组合:
    • r 读取(read);
    • w 写(write);
    • x 执行(eXecute)。
  • 三个控制文件许可权限的命令:
    • chown user file 命令更改文件的所有者;
    • chgrp group file 改变所有群组;
    • chmod rights file 改变文件许可权限。
阅读更多

Linux 创建交换分区提供虚拟内存,解决运行时出现提示内存不足问题

如果服务器内存不够用,可以创建交换区提供虚拟内存,支持要求较大内存程序的执行。

创建交换分区命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建分区路径
sudo mkdir -p /var/cache/swap/

# 设置分区的大小
sudo fallocate -l 4G /var/cache/swap/swap0
# 如果没有 fallocate,则可以用下面的创建方式
# bs=64M是块大小,count=64是块数量,所以swap空间大小是bs*count=4096MB=4GB
#sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64

# 设置该目录权限
sudo chmod 0600 /var/cache/swap/swap0
# 创建SWAP文件
sudo mkswap /var/cache/swap/swap0
# 激活SWAP文件
sudo swapon /var/cache/swap/swap0
# 查看SWAP信息是否正确
sudo swapon -s

删除交换分区的命令

1
2
3
sudo swapoff /var/cache/swap/swap0
# sudo swapoff -a # 停用全部分区
sudo rm /var/cache/swap/swap0

  • 一台服务器可创建多个 swap。

Debian 系统源码编译安装 PHP8.2

1
2
groupadd www
useradd www -r -g www -s /bin/false
  • yum 安装相关库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
sudo apt update
sudo apt -y install cmake git wget mtr vim gcc autoconf make bison automake \
bzip2 ncurses-dev curl e2fsprogs openssl build-essential \
libtool libxml2-dev libssl-dev libcurl4-openssl-dev libpng-dev \
libjpeg-dev libonig-dev libzip-dev libsodium-dev libevent-dev \
libgd-dev libpng-dev libjpeg-dev libwebp-dev libgif-dev \


# sqlite3,如果不用 SQLite 就不需要这一步
wget https://sqlite.org/2023/sqlite-autoconf-3420000.tar.gz
tar zxf sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000/
./configure
make && make install

cd ~
wget https://www.php.net/distributions/php-8.2.8.tar.gz
tar zxf php-8.2.8.tar.gz

cd ~/php-8.2.8/

export LD_LIBRARY_PATH=/lib/:/usr/lib/:/usr/local/lib

./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-mysqlnd \
--with-pdo-mysql \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock \
--with-iconv \
--enable-bcmath \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--enable-gd \
--enable-phpdbg \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-zip \
--with-zlib \
--with-curl \
--with-openssl \
--enable-pcntl \
--enable-simplexml \
--with-sodium \
--enable-exif \
--enable-intl \
--with-webp \
--with-jpeg \
--enable-opcache \
--with-pear

make && make install

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

# CentOS
chkconfig --add php-fpm
chkconfig php-fpm on
chkconfig --list php-fpm # 查看服务器设置

# Debian
# 设置开机启动
# sysv-rc-conf --level 2345 php-fpm on
sysv-rc-conf php-fpm on # 也可以用 sysv-rc-conf 命令图形化设置服务
sysv-rc-conf --list php-fpm

# Debian 还需添加服务 才能用 service php-fpm xxx 命令
vim /lib/systemd/system/php-fpm.service
# 加入以下内容
[Unit]
Description=php-fpm service
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/php-fpm start
ExecStop=/etc/init.d/php-fpm stop
ExecReload=/etc/init.d/php-fpm reload
ExecRestart=/etc/init.d/php-fpm restart
ExecStatus=/etc/init.d/php-fpm status
ExecForceQuit=/etc/init.d/php-fpm force-quit
ExecConfigtest=/etc/init.d/php-fpm configtest
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# END -----

# 启动 php-fpm
service php-fpm start

# 安装 MariaDB(可代替 MySQL)
apt install mariadb-server
mysql_secure_installation
service mariadb start
  • 编译 fileinfo 扩展需要较多内存,报虚拟内存用尽可增加虚拟内存。
  • libgd-dev 包含了 freetype 库
  • SQLite3 扩展默认启用。 允许在编译时使用 –without-sqlite3 禁用之。
  • iconv 系统自带,不需要 apt 或源码安装
  • 加 –with-pear 才会生成 bin/pecl 文件

Linux 常用命令:用户和组管理

用户&组数据文件

用户清单通常保存在 /etc/passwd 文件内,把哈希编码后的密码保存在 /etc/shadow 文件内。这两个文件都是纯文本档,以简单的格式保存,可以用文本编辑器读取与修改。每个用户占一行,其字段以冒号分隔 (“:”)。

  • /etc/passwd 用户清单,按固定顺序记录字段,并以 : 隔开,如:admin:x:1000:1000::/home/admin:/bin/bash,字段清单:
    • 用户名,例如 admin;
    • 密码: 用 DES, MD5, SHA-256 或 SHA-512 加密过的密码,特殊值 x 表示密码保存在 /etc/shadow 文件;
    • uid:用于辨识用户的不重复数字;
    • gid:用户主要群组 (Debian 的默认值系为每个用户创建一个群组) 的不重复号码;
    • GECOS:用户常规信息,类似于备注,例如其真实姓名和电话号码等;
    • 登入目录,登录后进入该目录,用于保存用户的个人文件 (环境变量 $HOME 通常指向此处);
    • 登录时运行的程序。通常是命令解译器 (shell),若指定为 /bin/false (不做任何事并立即回到控制),则用户无法进入系统;若指定为 /usr/sbin/nologin 则是禁止登录。
  • /etc/shadow 保存用户密码,含以下的字段:
    • 用户名;
    • 加密的密码;
    • 管理密码期限的字段。
  • /etc/group 用户组信息,包括以下的字段:
    • 群组名称;
    • 密码 (可选):只在加入群组时会用到 (使用 newgrp 或 sg 命令,见专栏 基本知识 在多个群组工作);
    • gid:不重复的群组识别码;
    • 成员清单:属于此群组的用户名清单,以逗号分隔。
阅读更多

在 Mac 上用一个命令使用 SSH 做代理科学上网

作为一个开发人员,翻墙是必备本领。
一些常用的参考代码和开发文档官方网站,要么很慢,要么被墙,你懂的,这需要科学上网。
你只要有一个墙外的 Linux 服务器,就能在 Mac 上用一个命令使用 ssh 做代理科学上网。

创建 SSH 秘钥

先创建名称为 pxy_rsa 的本地秘钥(你也可以使用已有的秘钥,怎样创建 ssh 秘钥如果不会自行网上搜索)。

服务器端添加账号

服务器端 ssh 禁用密码登录,配置 key 登录,
添加用户名为 pxy 的账号,只允许作为代理,不允许做其它操作。

使用 root 权限操作,执行以下命令

阅读更多