Yu's Blog
type: channel
link: https://blog.0zu.cn/
description: Your description here.
items: Linux服务器忘记密码
items: 经济补偿N、N+1、2N、2N+1、2(N+1)及61种情形和标准（2025）
items: win11右键菜单设置
items: Git Stash 用法完全指南
items: 配置 Git 永久记住密码
items: VSCode 快捷键提升效率神技
items: Gogs 大文件推送报错
items: centos虚拟机没网，ping不通
items: The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute
items: 防止tp5通过lang遍历目录读取配置文件

Linux服务器忘记密码
type: item
date: 2025-11-14T13:17:00+08:00
description: [scode type="blue" size=""]在 Linux 服务器运维中，密码长期未更新导致自动过期进而无法登录是常见问题。本文将基于实际操作场景，详细讲解如何通过 单用户模式（急救模式） 重置密码、查看系统用户，并解决密码修改后不生效的疑难问题，为你的服务器运维提供完整参考。[/scode]一、问题背景：密码过期导致登录失败Linux 系统为保障安全，会对用户密码设置有效期（可通过chage命令查看）。若长期未更新密码，系统会自动锁定登录权限，此时需通过单用户模式（一种拥有 root 权限的维护模式）进行密码重置。二、解决步骤：单用户模式重置密码全流程进入 GRUB 引导界面（重启服务器）首先重启服务器（物理机按电源键，虚拟机通过管理界面操作），启动过程中快速按下 Esc（或Shift/e键，不同系统略有差异），进入GRUB 引导菜单。进入单用户模式（分发行版操作）（1）CentOS/RHEL 系统在 GRUB 菜单中选中默认内核，按e键编辑启动参数。找到以linux16开头的行，将末尾的ro改为 rw init=/sysroot/bin/sh，按Ctrl+X启动。启动后执行 chroot /sysroot 切换到根文件系统（获取完整 root 权限）。（2）Ubuntu/Debian 系统在 GRUB 菜单中选中内核行，按e键编辑，找到以linux /boot/vmlinuz-xxx开头的行，末尾添加 rw init=/bin/bash，按F10启动。直接进入带 bash 的急救模式，无需额外切换目录。重置用户密码执行passwd 用户名（重置 root 密码可直接用passwd），按提示输入新密码（Linux 输入密码时无显式字符，输完回车即可）。若提示密码过于简单，可强制设置：passwd -f 用户名 # 如 passwd -f root调整密码有效期（避免再次过期）推荐设置 “下次登录强制改密”，兼顾安全与易用性：chage -d 0 用户名 # 如 chage -d 0 root重启验证CentOS：执行exit退出chroot，再输入reboot。Ubuntu：执行exec /sbin/init或reboot -f。重启后用新密码登录，若设置了chage -d 0，会提示强制修改密码，按流程操作即可。三、如何查看系统所有用户？若忘记用户名，可通过以下命令查看：cat /etc/passwd # 查看所有用户配置 awk -F: '$3>=1000 {print $1}' /etc/passwd # 过滤普通用户（UID≥1000）三、总结与日常维护建议单用户模式是 Linux 服务器密码维护的 “救命稻草”，但日常仍需注意：定期通过chage -l 用户名查看密码有效期，提前更新。对重要用户设置合理的密码策略（如每 90 天更新一次）。记录服务器所有用户，避免因用户名混淆导致操作失误。掌握以上流程，即可高效解决密码过期导致的登录问题，保障服务器的正常运维。

经济补偿N、N+1、2N、2N+1、2(N+1)及61种情形和标准（2025）
type: item
date: 2025-11-13T10:25:00+08:00
description: [scode type="blue" size="simple"]HR 经常会听到经济补偿或赔偿金的一些约定俗成的表述方式，比如 N、N+1、2N。有几次在讲课时有 HR 提到，现在有一些员工提出了 2N+1、2 (N+1) 的计算方式，到底有没有这样的规定呢？[/scode][scode type="share" size=""]必须明确，2N+1、2 (N+1) 根本不存在法律上的依据，提出这样的要求，往往是劳动者对法律的误读或受到一些似懂非懂的 “专业人士” 误导所致。[/scode]今天我们一起梳理下，看看经济补偿金到底有哪几种形式，它们各自的标准又是如何的：解除或终止劳动合同时，用人单位向劳动者支付经济补偿金的标准及情形，包括：经济补偿金＝0：用人单位（含劳务派遣单位）无需向劳动者支付解除或终止劳动合同经济补偿金的 17 种情形。经济补偿金＝N：用人单位应向劳动者支付解除或终止劳动合同经济补偿金的 41 种情形。经济补偿金＝N+1：用人单位除应向劳动者支付解除劳动合同经济补偿金外，还应额外支付劳动者一个月工资的 3 种情形（即代通知金）。赔偿金＝2N：单位未按法定情形解除或终止劳动合同的。【这点很容易搞混，比如《劳动合同法》第四十条规定，有下列情形之一的，用人单位提前三十日以书面形式通知劳动者本人或者额外支付劳动者一个月工资后，可以解除劳动合同。假如单位违法解除了，未提前一个月告知，那是不是 2N+1 呢？实际 2N 就可以了，不存在所谓的 2N+1】接下来，我们就一起看看各种补偿的情形和标准：一、经济补偿金＝0解除或终止劳动关系时，用人单位无需向劳动者支付经济补偿金的 17 种情形：劳动者在试用期内提前三日通知用人单位解除劳动合同的；（《劳动合同法》第 37 条）劳动者提前三十日以书面形式通知用人单位解除劳动合同的；（《劳动合同法》第 37 条）劳动者提出解除劳动合同申请，经与用人单位协商一致解除劳动合同的；（《劳动合同法》第 36 条）劳动者在试用期间被证明不符合录用条件的，用人单位解除劳动合同的；（《劳动合同法》第 39 条）劳动者严重违反用人单位的规章制度，用人单位解除劳动合同的；（《劳动合同法》第 39 条）劳动者严重失职，营私舞弊，给用人单位造成重大损害，用人单位解除劳动合同的；（《劳动合同法》第 39 条）劳动者同时与其他用人单位建立劳动关系，对完成本单位的工作任务造成严重影响，用人单位解除劳动合同的；（《劳动合同法》第 39 条）劳动者同时与其他用人单位建立劳动关系，对完成本单位的工作任务造成影响，或者经用人单位提出，拒不改正，用人单位解除劳动合同的；（《劳动合同法》第 39 条）劳动者以欺诈的手段，使用人单位在违背真实意思的情况下订立或者变更劳动合同，致使劳动合同无效，用人单位解除劳动合同的；（《劳动合同法》第 39 条、第 26 条）劳动者以胁迫的手段，使用人单位在违背真实意思的情况下订立或者变更劳动合同，致使劳动合同无效，用人单位解除劳动合同的；（《劳动合同法》第 39 条、第 26 条）劳动者乘人之危，使用人单位在违背真实意思的情况下订立或者变更劳动合同，致使劳动合同无效，用人单位解除劳动合同的；（《劳动合同法》第 39 条、第 26 条）劳动者被依法追究刑事责任，用人单位解除劳动合同的；（《劳动合同法》第 39 条）劳动合同期满，用人单位维持劳动合同约定条件与劳动者续订劳动合同，劳动者不同意续订，而终止固定期限劳动合同的；（《劳动合同法》第 46 条）劳动合同期满，用人单位提高劳动合同约定条件与劳动者续订劳动合同，劳动者不同意续订，而终止固定期限劳动合同的；（《劳动合同法》第 46 条）劳动者开始依法享受基本养老保险待遇，用人单位终止劳动合同的；（《劳动合同法》第 44 条）劳动者死亡，用人单位终止劳动合同的。（《劳动合同法》第 44 条）劳动者被人民法院宣告死亡或者宣告失踪，用人单位终止劳动合同的。（《劳动合同法》第 44 条）二、经济补偿金＝N解除或终止劳动关系时，用人单位应向劳动者支付经济补偿金的 41 种情形：（一）劳动者解除劳动合同的 14 种情形用人单位未按照劳动合同约定提供劳动保护，劳动者解除劳动合同的；（《劳动合同法》第 46 条、第 38 条）用人单位未按照劳动合同约定提供劳动条件，劳动者解除劳动合同的；（《劳动合同法》第 46 条、第 38 条）用人单位未及时足额支付劳动报酬，劳动者解除劳动合同的；（《劳动合同法》第 46 条、第 38 条）用人单位未依法为劳动者缴纳社会保险费，劳动者解除劳动合同的；（《劳动合同法》第 46 条、第 38 条）用人单位的规章制度违反法律、法规的规定，损害劳动者权益，劳动者解除劳动合同的（《劳动合同法》第 46 条、第 38 条）用人单位以…

win11右键菜单设置
type: item
date: 2025-04-07T13:06:21+08:00
description: win11右键菜单直接显示更多reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve恢复系统默认reg.exe delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /va /f重启任务管理器生效taskkill /f /im explorer.exe & start explorer.exe

Git Stash 用法完全指南
type: item
date: 2025-03-27T15:20:00+08:00
description: Git Stash 用法完全指南📦 核心作用临时存储未提交的修改（包括工作目录和暂存区），让工作区恢复到干净状态🛠️ 基础命令速查表保存当前修改git stash save "修改备注" # 推荐！添加描述性信息 git stash # 快速保存（自动生成备注）查看存储列表git stash list # 输出示例： # stash@{0}: On main: 支付模块优化 # stash@{1}: On dev: 订单页样式调整恢复存储git stash apply # 恢复最新存储（保留stash记录） git stash apply 'stash@{1}' # 恢复指定存储 git checkout "stash@{1}" -- index.html #恢复指定缓存指定文件 git stash pop # 恢复最新并删除记录删除存储git stash drop stash@{0} # 删除指定存储 git stash clear # 清空所有存储🔍 高阶用法包含未跟踪文件git stash save -u # 包含未跟踪文件（重要！） git stash save --include-untracked选择恢复部分文件git checkout stash@{0} -- src/apis/user.js # 仅恢复某个文件从存储创建分支git stash branch new-feature # 基于最新存储创建分支 git stash branch fix-bug stash@{1} # 基于指定存储创建🎯 典型使用场景场景1：紧急修复生产问题# 正在开发新功能时收到紧急bug报告 git stash save "用户模块优化进度" git checkout hotfix/20231101 # 修复并提交后... git checkout feature/user git stash pop场景2：临时切换分支测试# 当前分支有未完成修改，需要测试其他分支 git stash git checkout test-branch # 测试完成后返回 git checkout original-branch git stash pop场景3：保存实验性代码# 临时尝试高风险修改前 git stash save "实验性缓存方案" # 测试失败后回退 git stash show -p | git apply -R # 反向应用修改（手动撤销）📊 可视化操作流程原始状态： [Working] --修改--> [Staged] \__________________未提交修改/ 执行 stash： [Stash@{0}] 保存修改 [Working] 恢复干净状态 执行 pop： [Stash@{0}] --> 应用到当前工作区⚠️ 注意事项未跟踪文件：默认不保存，必须使用 -u 参数冲突处理：恢复时出现冲突需手动解决长期存储风险：建议 stash 保留不超过1周安全删除：确认不再需要后再执行 drop/clear💡 实用技巧结合 git stash show -p 查看存储差异使用 gitk --all $(git stash list | cut -d":" -f 1) 图形化查看通过 git stash store 手动管理存储内容（高级）在 .gitconfig 添加别名加速操作：[alias] sts = stash --include-untracked stl = stash list sta = !git stash apply🚨 常见问题Q：如何找回误删的 stash？A：通过 git fsck 查找 dangling commit，但成功率取决于GC情况Q：多个 stash 如何区分？A：保存时务必添加描述，例如：git stash save "[高优先级]支付接口调试"Q：部分恢复后出现冲突怎么办？A：手动编辑冲突文件后执行：git add 冲突文件 git restore --staged . # 或继续其他操作

配置 Git 永久记住密码
type: item
date: 2025-03-27T15:11:07+08:00
description: 全局存储凭证（明文保存，适合受信环境）git config --global credential.helper store或指定自定义存储路径git config --global credential.helper 'store --file ~/.my-credentials'

VSCode 快捷键提升效率神技
type: item
date: 2025-03-20T10:27:11+08:00
description: VS Code 快捷键提升效率神技🚀 多光标批量操作快捷键作用说明场景案例Ctrl + D选中下一个相同内容批量修改同名变量/重复代码块Ctrl + Shift + L选中所有匹配项（需先选中内容）同时修改 20 处相同的 CSS 颜色值Alt + Click任意位置添加光标在 5 个不同位置同时插入分号Shift + Alt + I在每行末尾添加光标（需多行选中）批量在 JSON 字段后添加逗号Shift + Alt + 拖动鼠标列选择模式（垂直块编辑）统一修改 SQL 表的字段类型定义⚡ 智能选择与跳转快捷键作用说明效率技巧Ctrl + Shift + Space显示参数提示快速查看函数参数类型Ctrl + ] / Ctrl + [缩进调整批量格式化代码层级Ctrl + F2重命名所有匹配符号全局修改变量名（比替换更安全）Ctrl + Shift + \跳转到匹配的括号快速检查复杂嵌套结构Alt + ↑/↓上下移动行调整代码顺序无需剪切粘贴🔥 代码片段与重构快捷键作用说明高效用法Ctrl + .快速修复建议自动补全 import/修复语法错误Shift + F12查看符号所有引用确认变量被哪些代码使用Ctrl + K Ctrl + F格式化选中代码保持代码风格统一F12 + Ctrl + .组合技：跳转定义并重构快速提取变量/函数（需配合菜单）Shift + Alt + F格式化整个文档一键整理混乱缩进🛠️ 高级编辑技巧1. 批量替换保留大小写： - 启用 "保留大小写" 按钮（Alt+C） - 将 "userName" 替换为 "accountName" 时自动保持驼峰格式 2. 正则表达式替换： - 在搜索框启用正则（Alt+R） - 用 `(\d+)px` → `$1rem` 批量替换 px 为 rem 3. 智能多行合并： - 选中多行 → `Ctrl + J` 合并为单行 - 自动处理行尾分号和空格

Gogs 大文件推送报错
type: item
date: 2025-03-19T10:34:15+08:00
description: Gogs 大文件推送 413 解决方案📜 问题现象Writing objects: 100% (1667/1667), 527.20 MiB | 28.05 MiB/s, done. error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 fatal: the remote end hung up unexpectedly🎯 问题原因服务器限制请求体积（Nginx/Gogs 默认限制）Git 缓冲区不足仓库包含未管理的大文件网络传输层中断🔧 解决方案清单一、服务端配置（Gogs 管理员操作）1. 修改 Nginx 限制（如有反向代理）# /etc/nginx/conf.d/gogs.conf server { ... client_max_body_size 1024m; # 解除体积限制 proxy_request_buffering off; # 关闭请求缓冲 }重启服务：sudo systemctl restart nginx2. 调整 Gogs 配置文件# /opt/gogs/custom/conf/app.ini [server] HTTP_POST_BUFFER_SIZE = 1073741824 # 1GB 缓冲区 [repository] MAX_GIT_DIFF_LINES = 1000000 # 差异行数限制解除重启服务：sudo systemctl restart gogs二、客户端操作（开发者执行）1. 配置 Git 超大缓冲区# Windows (PowerShell) git config --global http.postBuffer 2097152000 # 2GB git config --global pack.windowMemory 512m # 内存优化2. 分段推送大仓库# 分批次推送提交记录 for commit in $(git rev-list --reverse master | awk 'NR%100==0'); do git push origin $commit:refs/heads/master done git push origin master3. 清理历史大文件（终极方案）# 使用 BFG 工具清理 java -jar bfg.jar --delete-files '*.psd' --no-blob-protection my-repo.git # 强制重建仓库 git reflog expire --expire=now --all git gc --prune=now --aggressive git push --force🛡️ 预防措施1. 启用 Git LFS 管理# 初始化 LFS git lfs install git lfs track "*.psd", "*.zip" # 提交属性文件 git add .gitattributes2. 配置全局忽略规则# 创建全局 .gitignore echo -e "*.tmp\n*.log\nnode_modules/" >> ~/.gitignore git config --global core.excludesfile ~/.gitignore🔍 诊断命令1. 检测大文件来源git rev-list --objects --all | awk '{print $1}' | git cat-file --batch-check='%(objecttype) %(objectsize) %(rest)' | awk '/^blob/ {print $2,$3}' | sort -n -k12. 实时推送监控GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push -v 2>&1 | grep -E 'send|recv'📌 注意事项重启顺序：修改配置后按序重启Nginx → Gogs → 客户端 Git硬件要求：推送 1GB+ 文件建议：服务器内存 ≥4GB磁盘剩余空间 ≥ 推送文件体积 ×3企业级方案：超过 10GB 仓库建议：使用 Git Bundle 离线传输搭建 Git 镜像服务器git bundle create repo.bundle --all --max-objects=100000

centos虚拟机没网，ping不通
type: item
date: 2025-01-09T13:37:00+08:00
description: [scode type="share" size="simple"]记录几条命令试试吧[/scode]sudo ip link set ens33 upsystemctl stop NetworkManagerservice network restartDEVICE=ens33 BOOTPROTO=static ONBOOT=yes UUID=5fxxx313 IPADDR=192.168.70.40 NETMASK=255.255.255.0 PREFIX=24 GATEWAY=192.168.70.1 DNS1=8.8.8.8

The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute
type: item
date: 2024-11-19T10:10:55+08:00
description: [scode type="red" size=""]问题原因：阿里云的数据库被锁了，因为磁盘占用满了，触发了阿里云的保护机制，自动给锁上了[/scode][scode type="blue" size=""]附带一个查询指定数据库表空间占用的代码吧Table Name：表名。Data Size (MB)：表的数据部分占用的磁盘空间大小（MB）。Index Size (MB)：表的索引部分占用的磁盘空间大小（MB）。Total Size (MB)：表的总磁盘空间大小，包括数据和索引部分（MB）。[/scode]SELECT table_name AS `Table Name`, ROUND(SUM(data_length) / 1024 / 1024, 2) AS `Data Size (MB)`, ROUND(SUM(index_length) / 1024 / 1024, 2) AS `Index Size (MB)`, ROUND((SUM(data_length + index_length)) / 1024 / 1024, 2) AS `Total Size (MB)` FROM information_schema.tables WHERE table_schema = 'Table Name' GROUP BY table_name ORDER BY `Total Size (MB)` DESC;

防止tp5通过lang遍历目录读取配置文件
type: item
date: 2024-11-14T15:55:00+08:00
description: # 防止请求路径中包含 '/../'（目录遍历） location ~* \.\./ { deny all; return 403; } # 防止查询参数中包含 '/../'（目录遍历） if ($query_string ~* "\.\./") { return 403; }