<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/feed.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>XueJie 的博客</title><description>No description</description><link>https://blog.xuejie1.top</link><item><title>Nova Forum 安全加固审查：CORS 与 JWT 的隐藏陷阱</title><link>https://blog.xuejie1.top/post/nova-forum-security-review</link><guid isPermaLink="false">nova-forum-security-review</guid><description>2026-09-28 在 /home/cao/workspace/nova-forum 对 HEAD f177cdc 的未提交安全加固做只读审查，首次复现了两个隐藏问题：CORS allowedOrigins=[*]+allowCredentials=true 抛异常，以及 JWT</description><pubDate>Sat, 10 Oct 2026 01:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2026-09-28 在 &lt;code&gt;/home/cao/workspace/nova-forum&lt;/code&gt; 对 HEAD f177cdc 的未提交安全加固做只读审查，首次复现了两个隐藏问题：&lt;strong&gt;CORS allowedOrigins=[*]+allowCredentials=true 抛异常&lt;/strong&gt;，以及 &lt;strong&gt;JWT 有效但用户不存在时 UsernameNotFoundException 逃出过滤器&lt;/strong&gt;。把这次审查的过程和发现写下来。&lt;/p&gt;
&lt;h1&gt;Nova Forum 项目背景&lt;a href=&quot;#nova-forum-项目背景&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Nova Forum 是一个技术论坛项目，Spring Boot + Vue，定位为求职学习项目。需求分析阶段已于 2026-09-11 冻结，文档：&lt;code&gt;docs/需求分析.md&lt;/code&gt;，下一步进入系统设计阶段（数据库/API/模块划分）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心设计决策&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;角色：GUEST / USER / MODERATOR（按板块授权）/ SYS_ADMIN；废除「内容管理员」；版主由 SYS_ADMIN 直接分配&lt;/li&gt;
&lt;li&gt;认证：access JWT 15min 前端内存 + refresh 14d HttpOnly+Secure+SameSite=Lax Cookie；DB user_session 存 refresh 哈希；多设备&lt;/li&gt;
&lt;li&gt;refresh rotation（旧 token 重用返回 401 REFRESH_TOKEN_INVALID，无 token family）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/auth/refresh&lt;/code&gt; 仅 POST，CSRF 靠 SameSite+Origin/Referer&lt;/li&gt;
&lt;li&gt;登录失败按 username_normalized+IP 15min 5 次单机内存限流&lt;/li&gt;
&lt;li&gt;封禁 ACTIVE/BANNED 临时/永久（banned_until/ban_reason），仅 SYS_ADMIN；封禁后登录/refresh 403 ACCOUNT_BANNED&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;复现的第一个问题：CORS 配置异常&lt;a href=&quot;#复现的第一个问题cors-配置异常&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;现象&lt;/strong&gt;：&lt;code&gt;allowedOrigins=[*]&lt;/code&gt; 与 &lt;code&gt;allowCredentials=true&lt;/code&gt; 同时设置时，Spring Security 直接抛异常。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;根因&lt;/strong&gt;：Spring Framework 的 &lt;code&gt;CorsConfiguration&lt;/code&gt; 不允许 &lt;code&gt;allowedOriginPatterns&lt;/code&gt; 为 &lt;code&gt;*&lt;/code&gt; 同时 &lt;code&gt;allowCredentials&lt;/code&gt; 为 true。这是 Spring 的安全设计——当允许凭据（Cookie）时，通配符 &lt;code&gt;*&lt;/code&gt; 会被拒绝，必须显式列出允许的源。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复&lt;/strong&gt;：&lt;code&gt;SecurityConfig&lt;/code&gt; 改成 &lt;code&gt;app.cors.allowed-origins&lt;/code&gt; 可配置明确白名单（默认 localhost/127.0.0.1&lt;/p&gt;&lt;div&gt;&lt;/div&gt;/5173）。临时 Java probe 确认允许 Origin 预检 200、非白名单 403、缺失用户 401、正常用户进入下游并成功认证。&lt;p&gt;&lt;/p&gt;
&lt;h1&gt;复现的第二个问题：UsernameNotFoundException 逃出过滤器&lt;a href=&quot;#复现的第二个问题usernamenotfoundexception-逃出过滤器&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;现象&lt;/strong&gt;：JWT 有效（未过期）但用户不存在时，&lt;code&gt;UsernameNotFoundException&lt;/code&gt; 直接逃出 &lt;code&gt;JwtAuthenticationFilter&lt;/code&gt;，返回 500 而非 401。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复&lt;/strong&gt;：&lt;code&gt;JwtAuthenticationFilter&lt;/code&gt; catch(Exception) 返回 JSON 401。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;剩余 P2&lt;/strong&gt;：&lt;code&gt;JwtAuthenticationFilter.java:59&lt;/code&gt; catch(Exception) 把数据库连接等基础设施故障也错误映射 401（probe 已复现 IllegalStateException 场景），应区分认证异常和 5xx。&lt;/p&gt;
&lt;h1&gt;验证与回归&lt;a href=&quot;#验证与回归&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;二次 &lt;code&gt;mvn verify&lt;/code&gt; 仍 299 项全过、JaCoCo 通过；nightly-report 记录 14 仍写 305 且 CORS 说明过时。git diff —check 报 &lt;code&gt;JwtAuthenticationFilter.java:54&lt;/code&gt; 行尾空白。仓库源码未被审查代理修改。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复质量评估 7.5/10&lt;/strong&gt;：原两问题已修但异常分类、回归测试和报告准确性不足。&lt;/p&gt;
&lt;h1&gt;Nova Forum 安全设计要点总结&lt;a href=&quot;#nova-forum-安全设计要点总结&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;这次审查中看到的几个安全设计决策，值得记录：&lt;/p&gt;
&lt;h2&gt;认证与 Token 管理&lt;a href=&quot;#认证与-token-管理&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;access JWT 15min 存前端内存，refresh 14d HttpOnly+Secure+SameSite=Lax Cookie&lt;/li&gt;
&lt;li&gt;DB user_session 存 refresh 哈希，支持多设备&lt;/li&gt;
&lt;li&gt;logout 撤销当前 / logout-all 全部；改密/封禁撤销全部&lt;/li&gt;
&lt;li&gt;不做黑名单/token_version；不引入 Redis&lt;/li&gt;
&lt;li&gt;refresh rotation：旧 token 重用返回 401 REFRESH_TOKEN_INVALID&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;密码与注册&lt;a href=&quot;#密码与注册&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;注册仅 username+password，无邮箱/验证码/邮件依赖，注册即自动登录&lt;/li&gt;
&lt;li&gt;密码 12–128 不强制组合、拒弱密码、不得含 username&lt;/li&gt;
&lt;li&gt;Argon2id（BCrypt 处理 72 字节）&lt;/li&gt;
&lt;li&gt;MVP 无密码找回&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;权限与状态三维&lt;a href=&quot;#权限与状态三维&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;状态三维：status(DRAFT/PUBLISHED/DELETED) / visibility(PUBLIC/MEMBERS_ONLY/PRIVATE) / moderation(NORMAL/HIDDEN/VIOLATION)&lt;/li&gt;
&lt;li&gt;HIDE→HIDDEN；DELETE→DELETED（违规同时 VIOLATION）&lt;/li&gt;
&lt;li&gt;visibility 仅作者设置&lt;/li&gt;
&lt;li&gt;判权顺序 DELETED→moderation→visibility；DELETED 含作者一律 404（走后台独立接口）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;限流与安全&lt;a href=&quot;#限流与安全&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;登录失败按 username_normalized+IP 15min 5 次单机内存限流&lt;/li&gt;
&lt;li&gt;用户名不存在与密码错统一提示（不泄露用户是否存在）&lt;/li&gt;
&lt;li&gt;改密必须验旧密码&lt;/li&gt;
&lt;li&gt;发帖 30s、评论 5s（按用户 ID，应用层）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;日志安全&lt;a href=&quot;#日志安全&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;日志禁记密码/hash/token/密钥/Cookie/Authorization/用户正文&lt;/li&gt;
&lt;li&gt;配置 application.yml+dev/prod，secret 环境变量不入 Git&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;经验教训&lt;a href=&quot;#经验教训&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CORS 配置不能图省事用 &lt;code&gt;*&lt;/code&gt;&lt;/strong&gt;：只要涉及凭据传递（Cookie/Authorization Header），必须显式列出允许的源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;过滤器层要 catch 所有异常并映射到 HTTP 状态码&lt;/strong&gt;：不要让内部异常类（如 UsernameNotFoundException）直接逃出变成 500&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;区分基础设施故障和认证失败&lt;/strong&gt;：数据库连接失败应返回 500/503，而不是 401 掩盖问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全审查要实际运行 probe 复现&lt;/strong&gt;：只读 diff 看不出的问题，通过 Java probe 真实请求才复现出来&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI 报告要及时更新&lt;/strong&gt;：CORS 说明过时、nightly-report 数字不符这类问题，会在后续迭代中误导开发者&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;这次审查让我深刻体会到：&lt;strong&gt;安全加固不是改完一个 bug 就结束，而是要确保修复不会掩盖其他路径的同类问题&lt;/strong&gt;。异常分类那项 P2 值得在下次迭代中专门处理。&lt;/p&gt;</content:encoded><category>tag:nova-forum</category><category>tag:security</category><category>tag:spring-boot</category><category>tag:code-review</category></item><item><title>Sway/niri/Hyprland 登录时统一切换 X11、指针和 Electron 配置</title><link>https://blog.xuejie1.top/post/sway-x11-cursor-unified</link><guid isPermaLink="false">sway-x11-cursor-unified</guid><description>最近几天在 archbox 上折腾 Sway/niri/Hyprland 三桌面环境，核心诉求很明确：每次进入桌面自动修改 X11 相关配置，覆盖 Sway/niri/Hyprland。目标是让 GTK 逻辑主题尺寸、gsettings、Xresources、光标、Electron flags</description><pubDate>Sat, 10 Oct 2026 00:30:00 GMT</pubDate><content:encoded>&lt;p&gt;最近几天在 archbox 上折腾 Sway/niri/Hyprland 三桌面环境，核心诉求很明确：&lt;strong&gt;每次进入桌面自动修改 X11 相关配置&lt;/strong&gt;，覆盖 Sway/niri/Hyprland。目标是让 GTK 逻辑主题尺寸、gsettings、Xresources、光标、Electron flags 等在一套脚本里统一同步，避免每个桌面各自为政。&lt;/p&gt;
&lt;h1&gt;问题背景&lt;a href=&quot;#问题背景&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;之前每个桌面环境各自维护自己的 X11 配置，存在几个痛点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sway 下 XCURSOR_SIZE=24 覆盖 Chromium/Electron XSETTINGS/Xresources 48，导致 Feishin 等应用指针偏小&lt;/li&gt;
&lt;li&gt;不同桌面切换时会继承上一桌面的值（如 Hyprland 的 wayland 环境传到 Sway）&lt;/li&gt;
&lt;li&gt;各应用包装器各自设置环境变量，互相覆盖，难以追踪&lt;/li&gt;
&lt;li&gt;GTK 主题尺寸、gsettings、Xresources 分散在多处，修改要跑多处&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;统一脚本方案&lt;a href=&quot;#统一脚本方案&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2&gt;sync-desktop-x11&lt;a href=&quot;#sync-desktop-x11&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2026-10-05 新增 &lt;code&gt;~/.local/bin/sync-desktop-x11&lt;/code&gt;，GTK 逻辑主题尺寸、gsettings、共享 &lt;code&gt;~/.Xresources&lt;/code&gt;、environment.d/cursor.conf、desktop-session/x11.env 与 current.json、Chrome/Code/Electron flags、DBus/systemd 激活环境统一同步，锁与原子写入保留无关设置。&lt;/p&gt;
&lt;p&gt;删除 &lt;code&gt;envvars.conf&lt;/code&gt; 重复 XCURSOR/Electron 定义（原与 cursor.conf 冲突）。&lt;/p&gt;
&lt;p&gt;各桌面调用方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sway&lt;/strong&gt;：&lt;code&gt;sync-xcursor.py&lt;/code&gt; 在确认 server/尺寸后调用统一脚本，当前 macOS 逻辑 24/X11 高清 48、x11+1.25&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;niri&lt;/strong&gt;：&lt;code&gt;session.kdl startup&lt;/code&gt; 调用同一脚本，macOS 24/24，wayland 无 Sway 强制比例&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hypr&lt;/strong&gt;：custom execs startup 同脚本，Bibata 24/24，并由脚本 &lt;code&gt;hyprctl setcursor&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两者旧独立 xrdb 加载被替代。每桌面明确 Electron 提示，避免继承上一桌面值：Sway 启动器 x11，niri/Hypr 环境 wayland。&lt;/p&gt;
&lt;p&gt;sway-x11 优先读统一 current.json，检查 desktop 匹配，其他桌面已知 app 包装器透传系统入口。&lt;/p&gt;
&lt;h2&gt;cursor-bridge（会话级 X11 指针适配）&lt;a href=&quot;#cursor-bridge会话级-x11-指针适配&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2026-10-05 新增 &lt;code&gt;~/.config/desktop-session/cursor-bridge/bridge.c&lt;/code&gt;，通过 LD_PRELOAD 拦截成功的 XOpenDisplay/xcb_connect/auth_info 连接，仅 Sway 且 DISPLAY 匹配时从 desktop-session/x11.env 更新当前进程主题/物理尺寸。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;原生 Wayland 仍 24&lt;/li&gt;
&lt;li&gt;64/32 库 &lt;code&gt;~/.local/lib/desktop-cursor/{lib,lib32}/cursor-bridge.so&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;sway-intel 登录导出含字面 &lt;code&gt;$LIB&lt;/code&gt; 的 LD_PRELOAD&lt;/li&gt;
&lt;li&gt;sync-desktop-x11 同步 DBus/systemd 激活环境，Hypr/niri 清除自己的桥接路径&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际 libX11 测试 Sway 24→48，niri 24 不变，GTK 原生 Wayland 24，32 位加载成功，实际 Feishin 日志 macOS 48；视觉反馈尚待用户确认。完整继承须重登录 Sway，不终止用户桌面。&lt;/p&gt;
&lt;p&gt;动态普通客户端覆盖，沙箱/静态/自绘/清环境/混合 backend 例外，不保证所有软件。Steam 容器尚未验证。旧应用包装器保留。&lt;/p&gt;
&lt;h1&gt;配置切换隔离测试&lt;a href=&quot;#配置切换隔离测试&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;配置切换隔离测试 Sway→Hypr→niri→Sway 通过，niri validate、Lua 语法检查通过；当前真实 Sway xrdb 48、激活逻辑 24、x11 提示核验通过，未切换当前桌面，Hypr/niri 真实再登录尚待确认。&lt;/p&gt;
&lt;p&gt;逻辑 24 不全局改 48；X11 高清尺寸单独保存，忽略配置/自绘/沙箱程序仍可例外，非保证所有未来程序零例外。已有进程需重开，共享文件并行多图形会话未隔离。&lt;/p&gt;
&lt;p&gt;备份 &lt;code&gt;~/.local/state/desktop-session/backups-before-unified/&lt;/code&gt; 含 manifest；详笔记 &lt;code&gt;~/workspace/markdown/Sway-分数缩放与高清指针笔记.md&lt;/code&gt; 第 13 节为最新共享配置规则。&lt;/p&gt;
&lt;h1&gt;Sway Intel 核显独立会话&lt;a href=&quot;#sway-intel-核显独立会话&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;2026-10-05 最新状态：用户坚持 Intel Sway 内屏输出 scale 1.25。Chrome (force scale) 单独 desktop 参数试验无效，用户明确要求删除，&lt;code&gt;~/.local/share/applications/google-chrome-force-scale.desktop&lt;/code&gt; 已删除。&lt;/p&gt;
&lt;p&gt;当前真实 Sway 会话独立 DISPLAY=&lt;/p&gt;&lt;div&gt;&lt;/div&gt; satellite 0.8.3 启动成功，X11 提供 1920x1080 物理像素、xrdb Xft.dpi 120；临时 Chrome 独立测试 profile 使用 &lt;code&gt;--ozone-platform=x11 --force-device-scale-factor=1.25&lt;/code&gt;，另 GTK3/X11 测试。用户明确反馈两个都明显清晰了。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;已正式接入 Intel 会话：&lt;code&gt;~/.local/bin/sway-intel&lt;/code&gt; 必须 export &lt;code&gt;WLR_BACKENDS=drm,libinput&lt;/code&gt;，清除继承 WAYLAND_DISPLAY/WAYLAND_SOCKET 后选择空闲 DISPLAY，再启动 &lt;code&gt;sway --config ~/.config/sway/config-intel&lt;/code&gt;；overlay 包含主配置、xwayland disabled、启动 start-xwayland-satellite.sh。&lt;/p&gt;
&lt;p&gt;重要：先前登录回归根因是在自动后端选择时预设 DISPLAY 导致误选 X11；显式 DRM 修正必须保留，独立测试不能冒充物理登录验证。&lt;/p&gt;
&lt;h1&gt;Waybar 稳定性修复&lt;a href=&quot;#waybar-稳定性修复&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;2026-10-05 再次排障：16&lt;/p&gt;&lt;div&gt;&lt;/div&gt; Waybar 364905 SIGSEGV core，libgdk3 偏移 0x54648，反汇编及 GTK3.24.52 源码对应 &lt;code&gt;_gdk_wayland_cursor_get_buffer&lt;/code&gt; 内访问 wl_cursor_image，r15=0x28000000142a 失效，位于 cursor scale 处理路径，符合指针图像释放后仍使用；尚未证明精确触发条件。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;修复：config1/2 交互模块 &lt;code&gt;cursor:false&lt;/code&gt; 通过 AModule 配置存在性禁用默认 HAND2/ARROW 切换（0.15.0 虽记录 unknown cursor option 但禁用生效）；开启 &lt;code&gt;reload_style_on_change&lt;/code&gt;，wallpaper.py 取消 SIGUSR2 全量重载；desktop-session.write 相同内容跳过写入，避免重复 GTK 设置通知。&lt;/p&gt;
&lt;p&gt;Sway exec 统一 launch_waybar.sh 2，服务 &lt;code&gt;~/.config/systemd/user/sway-waybar@.service&lt;/code&gt; 原生 Wayland、UnsetEnvironment=LD_PRELOAD、Restart=always 2 秒且 30 秒最多 5 次、ExecCondition 检查 Sway socket，会话退出停止重试。&lt;/p&gt;
&lt;p&gt;这是绕开 GTK 旧指针/重载风险及恢复机制，不声称 GTK 库内部错误已根治。&lt;/p&gt;
&lt;h1&gt;经验总结&lt;a href=&quot;#经验总结&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;桌面切换时环境隔离是关键&lt;/strong&gt;：每个桌面明确自己的 X11/Wayland 标识，避免继承上一桌面值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LD_PRELOAD 桥接比逐应用包装更可靠&lt;/strong&gt;：cursor-bridge 方案比给每个 Electron 应用写 wrapper 更省心&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;改配置先备份&lt;/strong&gt;：&lt;code&gt;~/.local/state/desktop-session/backups-before-*&lt;/code&gt; 保留路径和 verification.py，出问题可快速回退&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语法校验不能省&lt;/strong&gt;：niri validate、Lua/shell/Python 语法检查都通过才敢真机测试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务管理优于 exec 直接启动&lt;/strong&gt;：systemd user service 的 Restart/ExecCondition 比裸 exec 更可靠，还能自动恢复&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;这套配置目前在实际 Sway 会话中运行稳定，X11 高清指针在 Feishin/Chrome/Electron 应用下均正常。niri/Hyprland 的真实再登录验证还在进行中。&lt;/p&gt;</content:encoded><category>tag:linux-desktop</category><category>tag:sway</category><category>tag:hyprland</category><category>tag:niri</category><category>tag:xwayland</category></item><item><title>音乐刮削流水线：FLAC/MP3 双轨元数据写入的坑与解法</title><link>https://blog.xuejie1.top/post/music-tagging-pipeline</link><guid isPermaLink="false">music-tagging-pipeline</guid><description>最近把音乐刮削流程跑通了 Solara → music-tagger → ZonyLrcToolsX → 元数据写入四个阶段，FLAC 与 MP3 前三个阶段共用，仅第四阶段分叉。过程中踩了不少坑，记录下来给同样想给自己音乐库打标签的朋友。
流水线概览
工作流 Skill 位于</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近把音乐刮削流程跑通了 Solara → music-tagger → ZonyLrcToolsX → 元数据写入四个阶段，FLAC 与 MP3 前三个阶段共用，仅第四阶段分叉。过程中踩了不少坑，记录下来给同样想给自己音乐库打标签的朋友。&lt;/p&gt;
&lt;h1&gt;流水线概览&lt;a href=&quot;#流水线概览&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;工作流 Skill 位于 &lt;code&gt;/home/cao/Music/music-pipeline/SKILL.md&lt;/code&gt;，另有脚本 &lt;code&gt;music-pipeline/embed_lyrics.py&lt;/code&gt;。四阶段，FLAC 与 320k MP3 前 3 阶段共用，仅第 4 阶段分叉：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;下载&lt;/strong&gt;：Solara/GD 音乐台，FLAC 用 &lt;code&gt;br=999/.flac&lt;/code&gt;，MP3 用 &lt;code&gt;br=320/.mp3&lt;/code&gt;，校验 &lt;code&gt;bit_rate≈320000&lt;/code&gt;。直链带时间戳需立即下载。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;刮削标签/封面&lt;/strong&gt;：music-tagger MCP（AcoustID 指纹 + MusicBrainz）。FLAC 与 MP3 完全通用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下 LRC&lt;/strong&gt;：在 &lt;code&gt;ZonyLrcToolsX/&lt;/code&gt; 目录内跑 &lt;code&gt;./ZonyLrcTools.Cli download -d &quot;&amp;lt;dir&amp;gt;&quot; -l -n 4&lt;/code&gt;。实测 local 扫描器把 &lt;code&gt;.lrc&lt;/code&gt; 写在源文件旁、与源文件同名，&lt;code&gt;-o/-p&lt;/code&gt; 对 local 不生效。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写入歌词&lt;/strong&gt;：FLAC → &lt;code&gt;metaflac --remove-tag=LYRICS --set-tag-from-file=&quot;LYRICS=$lrc&quot;&lt;/code&gt;；MP3 → &lt;code&gt;python3 embed_lyrics.py &amp;lt;mp3&amp;gt; &amp;lt;lrc&amp;gt;&lt;/code&gt;（mutagen 写真 USLT，默认 ID3v2.3 并把 TDRC 转 TYER+TDAT）。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;关键坑与修复&lt;a href=&quot;#关键坑与修复&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2&gt;music-tagger 依赖 ffmpeg-static 失败&lt;a href=&quot;#music-tagger-依赖-ffmpeg-static-失败&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;postinstall 常失败报 &lt;code&gt;spawn ffmpeg-static/ffmpeg ENOENT&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复&lt;/strong&gt;：&lt;code&gt;ln -sf /usr/bin/ffmpeg ~/.npm/_npx/*/node_modules/ffmpeg-static/ffmpeg&lt;/code&gt;，或设 &lt;code&gt;FFMPEG_BIN=/usr/bin/ffmpeg&lt;/code&gt;。不需要 fpcalc（rusty-chromaprint-wasm）。&lt;/p&gt;
&lt;h2&gt;music-tagger 读 FLAC 报 Unsupported format&lt;a href=&quot;#music-tagger-读-flac-报-unsupported-format&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;music-tagger_read_tags&lt;/code&gt; 读 FLAC 报 &lt;code&gt;Unsupported format&lt;/code&gt;；改用 &lt;code&gt;metaflac --export-tags-to=-&lt;/code&gt; 解决。&lt;/p&gt;
&lt;h2&gt;music-tagger 写入网易云源 FLAC 必败&lt;a href=&quot;#music-tagger-写入网易云源-flac-必败&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是最大坑：写入网易云源的 FLAC 会报 &lt;code&gt;Unsupported format: mimetype ... (taglib/flac) is not supported&lt;/code&gt;（taglib 对该文件的 PICTURE 块 mimetype 不满，dry_run 能读、写必败）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FLAC 全流程退化为&lt;/strong&gt;：metaflac 手工写全部标签 + &lt;code&gt;--import-picture-from&lt;/code&gt; 内嵌封面；MB recording/release ID 可用 MusicBrainz API 核对后照写。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;根因&lt;/strong&gt;：node-taglib-sharp（1.x）未注册 &lt;code&gt;taglib/flac&lt;/code&gt; 类型（只注册 aac/aiff/ape/asf/riff/mpeg），File.createInternal 查表失败即抛错，与文件本身无关——&lt;strong&gt;任何 FLAC 写入都会失败&lt;/strong&gt;。实测可用 mutagen（FLAC + Picture 内嵌图片）替代，比 metaflac 更适合批量与多值 genre。&lt;/p&gt;
&lt;h2&gt;AcoustID 指纹可能命中错误发行版&lt;a href=&quot;#acoustid-指纹可能命中错误发行版&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;实测《Breathe》命中现场盗版；草东《丑奴儿》命中英文版 The Servile eeea85fd。&lt;strong&gt;必须核对 dry_run 的 album/releaseId&lt;/strong&gt;。同一专辑在 MB 常有中文名发行版（丑奴儿→醜奴兒 TW Digital 042b6349 2016-04-30 / TW CD 53b74bc7 2016-03-15），recording ID 两版共享，可链接中文 release 并手工写中文标签。&lt;/p&gt;
&lt;h2&gt;MusicBrainz 限流&lt;a href=&quot;#musicbrainz-限流&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;MusicBrainz 会返回 503 限流，等 30-60s 重试即可；连续查 MB 时每次间隔 2-3s。&lt;/p&gt;
&lt;h2&gt;coverArtFetched&lt;div&gt;&lt;/div&gt; 常因 CAA 404&lt;a href=&quot;#coverartfetched-常因-caa-404&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;coverArtFetched&lt;/p&gt;&lt;div&gt;&lt;/div&gt; 常因 Cover Art Archive 404，不是失败。CAA 取封面用 &lt;code&gt;/front-500&lt;/code&gt;、&lt;code&gt;/front-1200&lt;/code&gt; 可靠，&lt;code&gt;/front-2500&lt;/code&gt; 源图小时会静默降级到 250px；直链 archive.org 文件名会报 400。&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;metaflac 1.5.0 混用操作报错&lt;a href=&quot;#metaflac-150-混用操作报错&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;metaflac 1.5.0 一次调用不能混用 major（&lt;code&gt;--remove/--remove-all-tags?&lt;/code&gt;）与 shorthand（&lt;code&gt;--set-tag&lt;/code&gt;）操作，报 &lt;code&gt;you may not mix shorthand and major operations&lt;/code&gt;，须分开调用；&lt;code&gt;--remove --block-type=PICTURE --block-type=VORBIS_COMMENT&lt;/code&gt; 可清空旧标签+旧封面。&lt;/p&gt;
&lt;h2&gt;MP3 写歌词的正确方式&lt;a href=&quot;#mp3-写歌词的正确方式&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;MP3 写歌词不能用 ffmpeg（只写非标准 TXXX&lt;/p&gt;&lt;div&gt;&lt;/div&gt;），也不能用 mid3v2 —USLT（按 &lt;code&gt;:&lt;/code&gt; 切分，LRC 时间轴冒号会被切碎）；&lt;strong&gt;必须用 mutagen 直接写 USLT&lt;/strong&gt;。&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;顺序不可换&lt;a href=&quot;#顺序不可换&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;先刮标签再下歌词，否则匹配错歌。&lt;/p&gt;
&lt;h1&gt;已跑通案例&lt;a href=&quot;#已跑通案例&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;萬能青年旅店 - 河北墨麒麟 MP3&lt;/strong&gt;：标签 + 封面 + 34 行 USLT。注意 MusicBrainz 把 artist 规范化：萬能青年旅店→简体「万能青年旅店」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;草东没有派对 - 丑奴儿 FLAC&lt;/strong&gt;：12 首（/home/cao/Music/草东没有派对 - 丑奴儿/，2026-09-11），简体标签、DATE=2016-04-30、MB 指向 042b6349、内嵌 CAA 1200×1200 封面；歌词全流程已跑通：ZonyLrcToolsX 11 首下到 LRC、Intro 纯音乐跳过、LYRICS 已用 metaflac 写入并校验。草东在 MB 是繁体「草東沒有派對」/No Party For Cao Dong。&lt;/p&gt;
&lt;h1&gt;指定发行版刮削 + 网易云英汉双语歌词&lt;a href=&quot;#指定发行版刮削--网易云英汉双语歌词&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;2026-09-11，King Crimson《In the Court of the Crimson King》MP3 5 首（/home/cao/Music/The Court of the Crimson King/）。&lt;/p&gt;
&lt;p&gt;用户指定 MB release 时，别用 AcoustID（会命中其它发行版/503）；直接 MusicBrainz API 取 release（&lt;code&gt;?inc=recordings+artist-credits+release-groups+labels&lt;/code&gt;）核对曲目，再手工写全部标签。本例最终采用 2014 Expanded &amp;amp; Remastered Original Album Mix：release=035aae28-0ce9-4198-820f-c0ceac24eae3，DATE=2014-09-30，label=Discipline Global Mobile，共 8 轨（本地只有前 5 轨，故 TRCK=n/8），RG=a50636b5-5233-3329-a7f3-dba3d0e00ef7。内嵌 CAA front-500（本 release 有 500×500）。ID3 用 TXXX 写 MusicBrainz Album/Release Group/Release Track/Recording Id。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;网易云歌词直连 API&lt;/strong&gt;（无需 key，需 UA + Referer: &lt;code&gt;https://music.163.com/&lt;/code&gt;）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;搜索：&lt;code&gt;https://music.163.com/api/search/get/web?s=&amp;lt;歌+歌手&amp;gt;&amp;amp;type=1&amp;amp;limit=20&lt;/code&gt;，按 album 名（如 “expanded &amp;amp; remastered original album mix”）+ 时长最接近筛选。&lt;/li&gt;
&lt;li&gt;歌词：&lt;code&gt;https://music.163.com/api/song/lyric?id=&amp;lt;id&amp;gt;&amp;amp;lv=1&amp;amp;kv=1&amp;amp;tv=-1&lt;/code&gt;，&lt;code&gt;lrc.lyric&lt;/code&gt;=原文，&lt;code&gt;tlyric.lyric&lt;/code&gt;=中文翻译（即英汉双语）。用两方 ms 时间戳对齐合并；跳过 &lt;code&gt;[by:...]&lt;/code&gt; 及「作词/作曲/编曲」credit 行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本例 5 首网易云 id：2112750583/2112750584/2112753206/2112750585/2112750586，翻译覆盖 100%。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MP3 双写歌词元数据&lt;/strong&gt;：USLT（英中逐行交替的纯文本）+ SYLT 同步（每时间戳一行「英文 / 中文」，&lt;code&gt;text=[(str, int_ms), ...]&lt;/code&gt;）。SYLT 元素是 &lt;code&gt;(字符串, 整数ms)&lt;/code&gt;，写成 tuple-of-tuple 会报 &lt;code&gt;struct.error: required argument is not an integer&lt;/code&gt;。同时落同名 &lt;code&gt;.lrc&lt;/code&gt;（同时间戳先英后中，标准双语格式）。&lt;code&gt;tags.save(v2_version=3)&lt;/code&gt; 会自动把 TDRC 转 TYER/TDAT。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;读回校验&lt;/strong&gt;：&lt;code&gt;music-tagger_read_tags&lt;/code&gt; 对 MP3 正常；或 python mutagen &lt;code&gt;ID3(path)&lt;/code&gt; 看 USLT/SYLT/APIC/TXXX 数量。注意文件原有 REPLAYGAIN_TRACK_GAIN 等 TXXX 会被保留。&lt;/p&gt;
&lt;h1&gt;Undertale 两首 FLAC 刮削&lt;a href=&quot;#undertale-两首-flac-刮削&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;2026-09-11，/home/cao/Music/Undertale/。再次撞上 taglib/flac 写入限制，dry_run 成功（AcoustID 命中正确）但写盘报 Unsupported format。改用 mutagen 写 Vorbis 注释 + 内嵌 CAA front-500（500×500）封面，并用 MusicBrainz release API（inc=recordings）取 disc1 曲序号。&lt;/p&gt;
&lt;p&gt;两首：MEGALOVANIA（TRACK=100，genre meme/symphonic metal，rec cdd3681b-cb54-4eeb-98b5-29c8baa1edd8）与 Your Best Nightmare（TRACK=79，genre breakcore/chiptune，rec 0d337fdb-3588-414a-873e-b8c1afce7f59）；album=UNDERTALE: Soundtrack，date=2015，albumid=8a6f776f-31f1-42f0-b25e-402f193d0d58。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;核心教训：&lt;strong&gt;FLAC 写入别指望 music-tagger 一步到位，mutagen 才是跨格式批量写入的可靠选择&lt;/strong&gt;；AcoustID 命中后要人工核对发行版，否则可能拿到盗版或英文版标签。&lt;/p&gt;</content:encoded><category>tag:music</category><category>tag:FLAC</category><category>tag:MP3</category><category>tag:刮削</category></item><item><title>OpenCode 接入 Swift/Occamy 模型时多条 system 消息的 500 错误修复</title><link>https://blog.xuejie1.top/post/opencode-llama-cpp-chat-template-fix</link><guid isPermaLink="false">opencode-llama-cpp-chat-template-fix</guid><description>最近几天在本地用 OpenCode 接 llama.cpp 服务器跑 Swift 和 Occamy 模型时，遇到一个反复出现的 500 错误：System message must be at the beginning。查了一整天根因，最终通过前置合并多条 system</description><pubDate>Fri, 09 Oct 2026 23:30:00 GMT</pubDate><content:encoded>&lt;p&gt;最近几天在本地用 OpenCode 接 llama.cpp 服务器跑 Swift 和 Occamy 模型时，遇到一个反复出现的 500 错误：&lt;code&gt;System message must be at the beginning&lt;/code&gt;。查了一整天根因，最终通过前置合并多条 system 消息解决了问题。把过程写下来，也给自己留个记录——毕竟我记性不太好（疑似 ADHD，面对大量文字时海马体就不工作）。&lt;/p&gt;
&lt;h1&gt;问题复现&lt;a href=&quot;#问题复现&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;10 月 10 日，用户报告 Swift-1.5-Qwen3.8-27B 接入 OpenCode 时报 500，错误信息指向 &lt;code&gt;System message must be at the beginning&lt;/code&gt;，定位到官方 chat_template 第 106 行。&lt;/p&gt;
&lt;p&gt;紧接着 Occamy 模型也报同样的错：&lt;code&gt;System message must be at the beginning&lt;/code&gt;，这次在 &lt;code&gt;occamy-chat_template.jinja&lt;/code&gt; 第 85 行。&lt;/p&gt;
&lt;p&gt;两个不同模型、不同模板，却指向同一个错误模式——这说明问题不在某个特定模板，而在于 OpenCode 的请求结构。&lt;/p&gt;
&lt;h1&gt;根因分析&lt;a href=&quot;#根因分析&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;OpenCode 在发送请求时，开头会带&lt;strong&gt;两条 system 消息&lt;/strong&gt;：一条是主系统提示（主 prompt），另一条是环境/工具提示（告诉模型当前有哪些可用工具）。而 Swift 和 Occamy 的官方 chat_template 都只允许 index 0 位置存在一条 system 消息，用 &lt;code&gt;not loop.first&lt;/code&gt; 来校验，遇到第二条 system 就抛错。&lt;/p&gt;
&lt;p&gt;关键洞察：&lt;strong&gt;这不是模板本身的 bug，而是模板设计时没考虑到「多条开头 system」的使用场景。&lt;/strong&gt; OpenCode 的环境注入 + 用户主 prompt 的 system 部分，在模板侧看到了两条连续的 system 消息块。&lt;/p&gt;
&lt;h1&gt;修复思路&lt;a href=&quot;#修复思路&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;参考 Tiel chat_template.jinja 的 &lt;code&gt;head.count&lt;/code&gt; 思路：不修改官方 body 模板（保持内容块验证和后续 system 拒绝逻辑），而是在&lt;strong&gt;前置层&lt;/strong&gt;把连续的多条 system 消息合并进一个 &lt;code&gt;&amp;lt;/system&amp;gt;&lt;/code&gt; 块（&lt;code&gt;\n\n&lt;/code&gt; 连接），主循环校验从 &lt;code&gt;not loop.first&lt;/code&gt; 改为 &lt;code&gt;loop.index0 &amp;gt;= ns_lead.count&lt;/code&gt;，即仍拒绝非开头 system，但允许并合并多条开头 system。&lt;/p&gt;
&lt;h1&gt;修复实现&lt;a href=&quot;#修复实现&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;以 Occamy 为例，新增 &lt;code&gt;/home/cao/scripts/llama/occamy-chat_template.jinja&lt;/code&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在文件头统计「开头连续 system」数量 &lt;code&gt;ns_lead.count&lt;/code&gt;（namespace，遇非 system 停止）&lt;/li&gt;
&lt;li&gt;tools 分支和非 tools 分支都改为把所有开头 system 合并进一个 &lt;code&gt;&amp;lt;/system&amp;gt;&lt;/code&gt; 块（&lt;code&gt;\n\n&lt;/code&gt; 连接）&lt;/li&gt;
&lt;li&gt;主循环校验从 &lt;code&gt;not loop.first&lt;/code&gt; 改为 &lt;code&gt;loop.index0 &amp;gt;= ns_lead.count&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;即仍拒绝非开头 system，但允许并合并多条开头 system。这是照搬 Tiel chat_template.jinja 的 &lt;code&gt;head.count&lt;/code&gt; 思路。&lt;/p&gt;
&lt;p&gt;Swift 模型（Swift-1.5-Qwen3.8-27B）的情况类似但更简单：官方模板内置了 8952 字符的 chat template，与本地运行子服务器的 57627 端口 &lt;code&gt;/props&lt;/code&gt; 返回的内置模板完全一致（SHA256 验证通过）。修复新增 &lt;code&gt;/home/cao/scripts/llama/swift-chat_template.jinja&lt;/code&gt;，同样采用前置合并连续 leading system 为一个内容块数组、双换行连接的方式。&lt;/p&gt;
&lt;h1&gt;验证过程&lt;a href=&quot;#验证过程&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Occamy 验证：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单 system（有/无 tools）输出与修复前逐字节相同&lt;/li&gt;
&lt;li&gt;两条开头 system 合并成功&lt;/li&gt;
&lt;li&gt;非开头 system 仍抛错（保留拒绝逻辑）&lt;/li&gt;
&lt;li&gt;完整 agent 对话（双 system + tool_calls + tool 响应 + user）渲染正常&lt;/li&gt;
&lt;li&gt;真实 router e2e（双 system + tools + user，model=occamy-1.0-3050）返回 &lt;code&gt;finish=stop content=SYSTEM-OK&lt;/code&gt;，tg 21.92s&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Swift 验证：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;benchmarks/swift-template-20261010/verify.py&lt;/code&gt; PASS 44 项渲染&lt;/li&gt;
&lt;li&gt;真实 llama.cpp direct Jinja + common 路径覆盖旧错误、新合并、单/无 system 逐字一致&lt;/li&gt;
&lt;li&gt;tools 和 history、reasoning options、system image 拒绝均验证通过&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;注意事项&lt;a href=&quot;#注意事项&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;服务器启动时缓存模板&lt;/strong&gt;：改完 chat_template 后必须重启 llama-server/router 才生效。已有进程会缓存旧 preset，用户需重启 launcher 激活。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同一文件被多预设共用&lt;/strong&gt;：occamy-chat_template.jinja 也被 &lt;code&gt;[occamy-1.0]&lt;/code&gt; 双 GPU 预设共用，修改影响所有引用该文件的预设。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;备份习惯&lt;/strong&gt;：修改前先备份原文件（如 &lt;code&gt;occamy-chat_template.jinja.before-sysfix-20260929&lt;/code&gt;），出问题可快速回退。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;证据留存&lt;/strong&gt;：验证日志放在 &lt;code&gt;benchmarks/&lt;/code&gt; 目录下（如 &lt;code&gt;benchmarks/occamy-3050-20260929/sysfix-e2e.log&lt;/code&gt;），方便后续追溯。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;延伸：OpenCode 配置相关经验&lt;a href=&quot;#延伸opencode-配置相关经验&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;同一天还解决了两个 OpenCode 配置问题，简要记录：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DeepSeek Flash 图片输入&lt;/strong&gt;：在 &lt;code&gt;opencode.json&lt;/code&gt; 中添加 &lt;code&gt;provider.deepseek.models.deepseek-flash: {attachment:true, modalities:{input:[text,image],output:[text]}}&lt;/code&gt;，通过本机 &lt;code&gt;/session/:id/message&lt;/code&gt; 接口附 PNG 图验证模型正确识别图中数字。注意 CLI 的 &lt;code&gt;opencode run -f&lt;/code&gt; 会额外加入 tool use 文本，纯色图曾被误判，不能仅凭 &lt;code&gt;-f&lt;/code&gt; 代表 Web 附件路径。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exa MCP schema 冲突&lt;/strong&gt;：OpenCode 接 DeepSeek flash 时报 &lt;code&gt;Invalid schema for function exa_agent_run&lt;/code&gt;。将 &lt;code&gt;mcp.exa.url&lt;/code&gt; 改为 &lt;code&gt;https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa&lt;/code&gt;，明确只暴露搜索和抓取工具，避免 agent_run schema 进入模型请求。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;这些天折腾下来最大的体会：&lt;strong&gt;LLM 本地部署的工具链调试，一半时间在查 template 渲染，另一半时间在确认”改完要重启”&lt;/strong&gt;。希望这篇记录能帮到同样遇到 system 消息 500 错误的朋友。&lt;/p&gt;</content:encoded><category>tag:llama.cpp</category><category>tag:OpenCode</category><category>tag:chat-template</category><category>tag:bugfix</category></item><item><title>如何使用 Kaggle 免费 T4 x 2 显卡部署 llama.cpp</title><link>https://blog.xuejie1.top/post/how-to-use-free-kaggle-t4-gpu-to-use-llamacpp</link><guid isPermaLink="false">how-to-use-free-kaggle-t4-gpu-to-use-llamacpp</guid><description>注册 Kaggle</description><pubDate>Fri, 06 Feb 2026 23:47:11 GMT</pubDate><content:encoded>&lt;h2&gt;注册 Kaggle&lt;a href=&quot;#注册-kaggle&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;</content:encoded><category>tag:AI</category><category>tag:大语言模型</category></item><item><title>在 Android 平板上使用 Termux 和 Visual Studio Code 网页版，实现便携编程（Gemini 润色版）</title><link>https://blog.xuejie1.top/post/how-to-code-with-your-android-tablet-ai</link><guid isPermaLink="false">how-to-code-with-your-android-tablet-ai</guid><description>〇、前言
您是否曾想过，将手中的安卓平板转变为一个功能强大的便携式编程工作站？本教程将引导您通过 Termux 和 proot-distro，在无需 Root 的情况下，安装一个完整的 Linux 发行版（以 Ubuntu 为例），并运行 VS Code Web</description><pubDate>Sat, 01 Nov 2025 06:15:38 GMT</pubDate><content:encoded>&lt;h3&gt;&lt;strong&gt;〇、前言&lt;/strong&gt;&lt;a href=&quot;#〇前言&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;您是否曾想过，将手中的安卓平板转变为一个功能强大的便携式编程工作站？本教程将引导您通过 Termux 和 &lt;code&gt;proot-distro&lt;/code&gt;，在&lt;strong&gt;无需 Root&lt;/strong&gt; 的情况下，安装一个完整的 Linux 发行版（以 Ubuntu 为例），并运行 VS Code Web 服务。最终，您只需一个浏览器，即可随时随地享受桌面级的编码体验。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在开始之前，请确保您：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;具备 Linux 基础：&lt;/strong&gt; 熟悉基本的命令行操作，理解文件系统和用户权限等概念。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;确认设备架构：&lt;/strong&gt; 本教程的操作及软件下载均针对 &lt;strong&gt;Arm64 (aarch64)&lt;/strong&gt; 架构的平板电脑。绝大多数现代安卓设备都符合此条件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;善用 AI 助手：&lt;/strong&gt; 遇到问题时，能够清晰地向 &lt;a href=&quot;https://chat.openai.com&quot;&gt;ChatGPT&lt;/a&gt;、&lt;a href=&quot;https://claude.ai&quot;&gt;Claude&lt;/a&gt; 或 &lt;a href=&quot;https://chat.deepseek.com&quot;&gt;Deepseek&lt;/a&gt; 等 AI 工具描述问题，这将是您强大的后援。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;一、基础环境：安装与配置 Termux&lt;/strong&gt;&lt;a href=&quot;#一基础环境安装与配置-termux&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Termux 是我们通往 Linux 世界的大门。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;1.1 下载并安装 Termux&lt;/strong&gt;&lt;a href=&quot;#11-下载并安装-termux&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;重要提示：&lt;/strong&gt; 请&lt;strong&gt;不要&lt;/strong&gt;从 Google Play 商店下载 Termux，该版本已停止更新且存在诸多问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;请从以下官方渠道获取最新版本：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/termux/termux-app/releases/latest&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/strong&gt; (推荐)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://f-droid.org/packages/com.termux/&quot;&gt;F-Droid&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;strong&gt;1.2 （可选）授予存储权限&lt;/strong&gt;&lt;a href=&quot;#12-可选授予存储权限&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;为了让 Termux 内的程序能够读写平板的内部存储（例如 &lt;code&gt;/storage/emulated/0&lt;/code&gt; 目录），请在 Termux 命令行中执行：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;termux-setup-storage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;系统将弹出授权请求，请点击“允许”。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;1.3 更换为国内镜像源&lt;/strong&gt;&lt;a href=&quot;#13-更换为国内镜像源&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;更换镜像源是确保软件包下载速度的关键一步。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;termux-change-repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;执行后，一个文本用户界面（TUI）将会出现：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;保持默认选中的 “Mirror group” 不动，直接用手指点击屏幕上的 &lt;code&gt;&amp;lt;OK&amp;gt;&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;使用方向键或手指点选 “Mirrors in Chinese Mainland”。&lt;/li&gt;
&lt;li&gt;再次点击 &lt;code&gt;&amp;lt;OK&amp;gt;&lt;/code&gt;，Termux 会自动测试中国大陆各镜像源的速度并选择最优的一个。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完成后，运行以下命令更新并升级所有基础软件包，以验证更换是否成功：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pkg&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; pkg&lt;/span&gt;&lt;span&gt; upgrade&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;二、核心步骤：通过 proot-distro 安装 Ubuntu&lt;/strong&gt;&lt;a href=&quot;#二核心步骤通过-proot-distro-安装-ubuntu&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;proot-distro&lt;/code&gt; 是一个强大的脚本工具，它利用 &lt;code&gt;proot&lt;/code&gt; 技术，让我们可以在 Termux 中轻松地安装和管理一个完整的 Linux 发行版，全程无需 Root 权限。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;网络提醒：&lt;/strong&gt; 下载 Linux 根文件系统较大，此步骤&lt;strong&gt;强烈建议&lt;/strong&gt;在全局代理环境下进行，否则可能会极其缓慢或失败。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;&lt;strong&gt;2.1 安装 proot-distro&lt;/strong&gt;&lt;a href=&quot;#21-安装-proot-distro&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pkg&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; proot-distro&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;&lt;strong&gt;2.2 安装 Ubuntu&lt;/strong&gt;&lt;a href=&quot;#22-安装-ubuntu&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;我们将以 Ubuntu 为例进行安装。&lt;code&gt;pd&lt;/code&gt; 是 &lt;code&gt;proot-distro&lt;/code&gt; 的缩写。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pd&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; ubuntu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;该命令会自动下载 Ubuntu 的根文件系统并进行配置。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;小贴士：&lt;/strong&gt; 您可以通过 &lt;code&gt;pd list&lt;/code&gt; 命令查看所有支持的 Linux 发行版，然后使用 &lt;code&gt;pd install &amp;lt;发行版名称&amp;gt;&lt;/code&gt; 来安装您偏爱的一款。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;&lt;strong&gt;2.3 登录 Ubuntu 环境&lt;/strong&gt;&lt;a href=&quot;#23-登录-ubuntu-环境&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;安装完毕后，执行以下命令即可“登录”到这个全新的 Ubuntu 系统中：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pd&lt;/span&gt;&lt;span&gt; login&lt;/span&gt;&lt;span&gt; ubuntu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;登录成功后，您会看到命令提示符变为 &lt;code&gt;root@localhost:~#&lt;/code&gt;，这表示您已身处 Ubuntu 的 &lt;code&gt;root&lt;/code&gt; 用户环境中。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;三、精细调校：配置 Ubuntu 子系统&lt;/strong&gt;&lt;a href=&quot;#三精细调校配置-ubuntu-子系统&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一个纯净的系统还需要一些基础配置才能顺手使用。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;3.1 创建一个普通用户&lt;/strong&gt;&lt;a href=&quot;#31-创建一个普通用户&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;直接使用 &lt;code&gt;root&lt;/code&gt; 用户操作并非最佳实践。让我们创建一个日常使用的普通用户（假设用户名为 &lt;code&gt;dev&lt;/code&gt;）：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# -m 标志会自动创建用户的家目录 /home/dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;useradd&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;为新用户设置密码：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;passwd&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;按照提示输入两次密码。注意，输入过程中密码是不可见的。&lt;/p&gt;
&lt;h4&gt;3.2 授予 sudo 权限&lt;a href=&quot;#32-授予-sudo-权限&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;为了让 &lt;code&gt;dev&lt;/code&gt; 用户能执行需要管理员权限的操作，我们需要将其加入 &lt;code&gt;sudo&lt;/code&gt; 用户组。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;usermod&lt;/span&gt;&lt;span&gt; -aG&lt;/span&gt;&lt;span&gt; sudo&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;现在，切换到新创建的用户：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;su&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt; dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;您会发现命令提示符从 &lt;code&gt;#&lt;/code&gt; 变成了 &lt;code&gt;$&lt;/code&gt;，表示已成功切换。&lt;/p&gt;
&lt;p&gt;可以通过 &lt;code&gt;sudo whoami&lt;/code&gt; 命令验证 &lt;code&gt;sudo&lt;/code&gt; 是否生效。如果系统提示输入 &lt;code&gt;dev&lt;/code&gt; 用户的密码，并且随后输出了 &lt;code&gt;root&lt;/code&gt;，则表示配置成功。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;3.3 为 Ubuntu 更换国内镜像源&lt;/strong&gt;&lt;a href=&quot;#33-为-ubuntu-更换国内镜像源&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;和配置 Termux 一样，为子系统更换镜像源也至关重要。由于我们是 Arm64 架构，需要使用 &lt;code&gt;ubuntu-ports&lt;/code&gt; 仓库。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;备份原始源文件：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; cp&lt;/span&gt;&lt;span&gt; /etc/apt/sources.list&lt;/span&gt;&lt;span&gt; /etc/apt/sources.list.bak&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;编辑源文件：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; nano&lt;/span&gt;&lt;span&gt; /etc/apt/sources.list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;清空文件内容，并粘贴以下中科大镜像源配置：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;(注：以上配置适用于 Ubuntu 22.04 (Jammy)，请根据您的版本自行调整代号)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;保存并退出&lt;/strong&gt; (在 &lt;code&gt;nano&lt;/code&gt; 中，按 &lt;code&gt;Ctrl+X&lt;/code&gt; -&amp;gt; &lt;code&gt;Y&lt;/code&gt; -&amp;gt; &lt;code&gt;Enter&lt;/code&gt;)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;刷新软件包列表进行验证。此时可以关闭代理，体验国内源的极速。&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; upgrade&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;四、核心应用：安装与运行 VS Code&lt;/strong&gt;&lt;a href=&quot;#四核心应用安装与运行-vs-code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;网络提醒：&lt;/strong&gt; 下载 VS Code 同样建议在代理环境下进行。
以下操作均在 &lt;code&gt;dev&lt;/code&gt; 普通用户下进行。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们提供两种安装方式，&lt;strong&gt;任选其一&lt;/strong&gt;即可。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;方案一：安装 VS Code 命令行版 (推荐，更轻量)&lt;/strong&gt;&lt;a href=&quot;#方案一安装-vs-code-命令行版-推荐更轻量&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;安装依赖：&lt;/strong&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; wget&lt;/span&gt;&lt;span&gt; tar&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下载 VS Code CLI (ARM64 for Linux)：&lt;/strong&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; -O&lt;/span&gt;&lt;span&gt; vscode-cli.tar.gz&lt;/span&gt;&lt;span&gt; &quot;https://code.visualstudio.com/sha/download?build=stable&amp;amp;os=cli-linux-arm64&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解压到家目录：&lt;/strong&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tar&lt;/span&gt;&lt;span&gt; -xzf&lt;/span&gt;&lt;span&gt; vscode-cli.tar.gz&lt;/span&gt;&lt;span&gt; -C&lt;/span&gt;&lt;span&gt; ~/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 重命名为一个更简洁的目录名&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;mv&lt;/span&gt;&lt;span&gt; ~/vscode-cli-linux-arm64&lt;/span&gt;&lt;span&gt; ~/vscode-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将 &lt;code&gt;code&lt;/code&gt; 命令加入环境变量，方便随时调用：&lt;/strong&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# 编辑 .bashrc 文件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;nano&lt;/span&gt;&lt;span&gt; ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
在文件末尾另起一行，添加：
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$PATH&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;$HOME&lt;/span&gt;&lt;span&gt;/vscode-cli&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
保存并退出后，执行以下命令使配置立即生效：
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;&lt;strong&gt;方案二：安装 VS Code 完整版 (.deb)&lt;/strong&gt;&lt;a href=&quot;#方案二安装-vs-code-完整版-deb&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;安装依赖：&lt;/strong&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; wget&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下载 VS Code .deb 包 (ARM64)：&lt;/strong&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; -O&lt;/span&gt;&lt;span&gt; code.deb&lt;/span&gt;&lt;span&gt; &quot;https://code.visualstudio.com/sha/download?build=stable&amp;amp;os=linux-deb-arm64&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;使用 apt 安装 (它会自动处理依赖关系)：&lt;/strong&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; ./code.deb&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;五、见证奇迹：启动并访问 VS Code Web&lt;/strong&gt;&lt;a href=&quot;#五见证奇迹启动并访问-vs-code-web&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;无论您选择哪种安装方式，启动 Web 服务的命令都是相同的。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; serve-web&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;网络提醒：&lt;/strong&gt; 首次运行会下载 VS Code Server，请确保网络通畅。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;成功后，终端会显示类似如下信息：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;* Visual Studio Code Server&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;* By using the software, you agree to the...&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Web UI available at http://127.0.0.1:8000/?tkn=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;复制 &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt; 开始的完整链接&lt;/strong&gt;，打开平板上的 Chrome、Edge 等现代浏览器，粘贴并访问。稍等片刻的加载后，一个功能完整的 VS Code 界面就会呈现在您眼前！&lt;/p&gt;
&lt;p&gt;您现在可以打开终端、安装插件、管理文件、编写代码，享受在平板上无缝衔接的开发乐趣了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;六、已知问题与展望&lt;/strong&gt;&lt;a href=&quot;#六已知问题与展望&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;插件证书验证：&lt;/strong&gt; 在当前 &lt;code&gt;proot&lt;/code&gt; 环境下，部分需要严格证书验证的插件（如官方的 GitHub Copilot）可能无法正常工作。安装普通插件时若遇到证书提示，可以选择忽略并继续安装。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能：&lt;/strong&gt; &lt;code&gt;proot&lt;/code&gt; 环境会有一定的性能损耗，但在现代平板的性能下，用于 Web 开发、脚本编写等任务已绰绰有余。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;恭喜您，您已成功将 Android 平板武装成了一台强大的便携开发利器！&lt;/p&gt;</content:encoded><category>tag:编程</category><category>tag:安卓</category></item><item><title>在 Android 平板上使用 Termux 和 Visual Studio Code 网页版，实现便携编程</title><link>https://blog.xuejie1.top/post/how-to-code-with-your-android-tablet</link><guid isPermaLink="false">how-to-code-with-your-android-tablet</guid><description>前言
此教程假设：

阅读者熟悉 Linux 相关的基本知识，并使用过 Linux 和其命令行一段时间。
阅读者要操作的平板的处理器架构是 Arm64。
阅读者有在官网询问 AI （如 Deepseek, ChatGPT, Claude）技术问题的能力。

下载并安装 Termux
在</description><pubDate>Sat, 01 Nov 2025 01:25:40 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;a href=&quot;#前言&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;此教程假设：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;阅读者熟悉 Linux 相关的基本知识，并使用过 Linux 和其命令行一段时间。&lt;/li&gt;
&lt;li&gt;阅读者要操作的平板的处理器架构是 Arm64。&lt;/li&gt;
&lt;li&gt;阅读者有在官网询问 AI （如 &lt;a href=&quot;https://chat.deepseek.com&quot;&gt;Deepseek&lt;/a&gt;, &lt;a href=&quot;https://chatgpt.com&quot;&gt;ChatGPT&lt;/a&gt;, &lt;a href=&quot;https://claude.ai&quot;&gt;Claude&lt;/a&gt;）技术问题的能力。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;下载并安装 Termux&lt;a href=&quot;#下载并安装-termux&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;a href=&quot;https://github.com/termux/termux-app/releases/latest&quot;&gt;GitHub&lt;/a&gt; 或 &lt;a href=&quot;https://f-droid.org/packages/com.termux/&quot;&gt;F-Droid&lt;/a&gt; 下载 Termux。&lt;/p&gt;
&lt;h2&gt;配置 Termux&lt;a href=&quot;#配置-termux&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;（可选）让 Termux 可以访问内部存储&lt;a href=&quot;#可选让-termux-可以访问内部存储&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 Termux 命令行处键入以下内容并按回车：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;termux-setup-storage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;此时平板会弹出一个授权选项，同意授权即可。&lt;/p&gt;
&lt;h3&gt;更改 Termux 软件源&lt;a href=&quot;#更改-termux-软件源&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 Termux 命令行处键入以下内容并按回车：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;termux-change-repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Termux 的界面会变成TUI。默认选中“Mirror group”，此时可以用手指点击 &amp;lt;OK&amp;gt; 进入下一步。然后 Termux 会让你选择用哪个地区的软件源，点击“Mirrors in Chinese Mainland”后，对应的选项会高亮，然后点 ，Termux 会对中国大陆的软件源测速。完毕后，软件源更换完成。&lt;/p&gt;
&lt;p&gt;执行以下命令更新软件包来验证：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pkg&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; pkg&lt;/span&gt;&lt;span&gt; upgrade&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;安装 proot-distro&lt;a href=&quot;#安装-proot-distro&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;执行以下命令来安装 proot-distro：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pkg install proot -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;使用 proot-distro 安装 Linux，以 Ubuntu 为例&lt;a href=&quot;#使用-proot-distro-安装-linux以-ubuntu-为例&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;proot-distro 是 Termux 的一个命令行工具，借助该工具，用户可以轻松地在手机或平板电脑上创建一个轻量级的、功能齐全的 Linux 环境，而无需对设备进行 root。如果你的平板已经 root,可以使用 chroot 安装 Linux，此教程不提供这种安装方式的教程。&lt;/p&gt;
&lt;p&gt;注意：此步骤需要使用代理等方式，才能以正常速度下载内容。&lt;/p&gt;
&lt;p&gt;执行以下命令安装 proot-distro 下的 Ubuntu：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pd&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; ubuntu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;下载安装完成后，执行以下命令登录 Ubuntu：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pd&lt;/span&gt;&lt;span&gt; login&lt;/span&gt;&lt;span&gt; ubuntu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果你想使用其他发行版，可以使用 &lt;code&gt;pd list&lt;/code&gt; 命令以显示可以安装的 Linux 发行版，再使用 &lt;code&gt;pd install distro-name&lt;/code&gt; 来安装。&lt;/p&gt;
&lt;h2&gt;配置 Linux&lt;a href=&quot;#配置-linux&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;创建普通用户&lt;a href=&quot;#创建普通用户&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用以下命令，假设要创建的用户名是 &lt;code&gt;user&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;useradd&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; user&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;给普通用户创建密码：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;passwd&lt;/span&gt;&lt;span&gt; user&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注：输入密码时，密码不会显示。需要输入两次密码，每次输入完成后，按回车。&lt;/p&gt;
&lt;h3&gt;给普通用户授权 sudo 权限&lt;a href=&quot;#给普通用户授权-sudo-权限&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;此处用的是添加到 sudo 用户组的方式，也可以用编辑 sudoer 配置文件的方式。
执行以下命令：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;usermod&lt;/span&gt;&lt;span&gt; -aG&lt;/span&gt;&lt;span&gt; sudo&lt;/span&gt;&lt;span&gt; user&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;切换到普通用户：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;su&lt;/span&gt;&lt;span&gt; user&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;此时会发现，命令行左侧由&lt;code&gt;#&lt;/code&gt;变成了&lt;code&gt;$&lt;/code&gt;。
验证是否授权成功：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; -i&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果提示输入密码，那么就授权成功了。&lt;/p&gt;
&lt;h3&gt;为 Ubuntu 更换镜像源&lt;a href=&quot;#为-ubuntu-更换镜像源&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;此处以中国科学技术大学提供的源和教程为例。&lt;/p&gt;
&lt;p&gt;备份原镜像源文件：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; cp&lt;/span&gt;&lt;span&gt; /etc/apt/sources.list&lt;/span&gt;&lt;span&gt; /etc/apt/sources.list.bak&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;替换镜像源为中科大源：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; sed&lt;/span&gt;&lt;span&gt; -i&lt;/span&gt;&lt;span&gt; -e&lt;/span&gt;&lt;span&gt; &apos;s@//ports.ubuntu.com/\? @//ports.ubuntu.com/ubuntu-ports @g&apos;&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            -e&lt;/span&gt;&lt;span&gt; &apos;s@//ports.ubuntu.com@//mirrors.ustc.edu.cn@g&apos;&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            /etc/apt/sources.list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;更新一下软件包来测试，此时可以关掉代理：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; upgrade&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;在 proot 容器中安装并配置 Visual Studio Code&lt;a href=&quot;#在-proot-容器中安装并配置-visual-studio-code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;注意：此步骤可能需要使用代理等方式，才能以正常速度下载内容。进行以下操作的用户是刚才创建的普通用户，而不是 root。
有两种方式，第一种是安装 VSCode 完整版，第二种是只安装命令行版，二选一即可。&lt;/p&gt;
&lt;h3&gt;安装完整版&lt;a href=&quot;#安装完整版&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;安装 wget：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo apt install wget tar -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 wget 下载 Visual Studio Code 完整版（复制以下内容后，长按命令行界面，再点 Paste 粘贴）：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; -O&lt;/span&gt;&lt;span&gt; code.deb&lt;/span&gt;&lt;span&gt; &quot;https://code.visualstudio.com/sha/download?build=stable&amp;amp;os=linux-deb-arm64&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; apt&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; ./code.deb&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;安装命令行版&lt;a href=&quot;#安装命令行版&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;安装 wget, tar：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;sudo apt install wget tar -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 wget 下载 Visual Studio Code 命令行版：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; -O&lt;/span&gt;&lt;span&gt; code.tar.gz&lt;/span&gt;&lt;span&gt; &quot;https://code.visualstudio.com/sha/download?build=stable&amp;amp;os=cli-alpine-arm64&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;解压缩：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tar&lt;/span&gt;&lt;span&gt; zxvf&lt;/span&gt;&lt;span&gt; ./code.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;# 以防万一，添加可执行权限&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; +x&lt;/span&gt;&lt;span&gt; ./code/code&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;假设 code 二进制文件的位置在&lt;code&gt;/home/user/code/code&lt;/code&gt;，现在把&lt;code&gt;/home/user/code&lt;/code&gt;加入 PATH 环境变量中：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;vi&lt;/span&gt;&lt;span&gt; /home/user/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;键入&lt;code&gt;Shift + G&lt;/code&gt;跳到最后，按&lt;code&gt;o&lt;/code&gt;键另起一行，复制以下内容后，长按命令行界面，再点 Paste 粘贴：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$PATH:/home/user/code&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;按&lt;code&gt;Esc&lt;/code&gt;（注意是 Termux 界面下方左上角的 &lt;code&gt;Esc&lt;/code&gt;），&lt;code&gt;:wq&lt;/code&gt;和回车保存并退出。&lt;/p&gt;
&lt;p&gt;执行以下命令生效：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;运行 Visual Studio Code 并开始使用&lt;a href=&quot;#运行-visual-studio-code-并开始使用&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;注意：此步骤可能需要使用代理等方式，才能以正常速度下载内容。&lt;/p&gt;
&lt;p&gt;执行以下命令以运行 Visual Studio Code 服务器：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; serve-web&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果没有问题，命令行会输出类似以下的内容：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;* Visual Studio Code Server&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;* By using the software, you agree to&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Web UI available at http://127.0.0.1:8000?tkn=***&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;复制最后的链接，到 Chrome, Edge 等 Chromium 浏览器粘贴，稍等片刻就可使用了。&lt;/p&gt;
&lt;h2&gt;已知的问题&lt;a href=&quot;#已知的问题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装插件时，会提示无法验证证书，可以选择忽略并继续安装。&lt;/p&gt;
&lt;p&gt;无法使用 Copilot，原因也是无法验证证书。&lt;/p&gt;</content:encoded><category>tag:编程</category><category>tag:安卓</category></item><item><title>CS61C FA20 资源</title><link>https://blog.xuejie1.top/post/fa20-cs61c-resources</link><guid isPermaLink="false">fa20-cs61c-resources</guid><description>Lectures and Discussions 课程和讨论
Homepage (cannot access unless you have a CalNet ID) 主页（需要CalNet ID）
Homepage Archive (Wayback Machine) 主页存档（网站时光机）</description><pubDate>Tue, 23 Jul 2024 02:05:51 GMT</pubDate><content:encoded>&lt;h2&gt;Lectures and Discussions 课程和讨论&lt;a href=&quot;#lectures-and-discussions-课程和讨论&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://inst.eecs.berkeley.edu/~cs61c/fa20/&quot;&gt;Homepage (cannot access unless you have a CalNet ID) 主页（需要CalNet ID）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20201219200930/https://cs61c.org/fa20/&quot;&gt;Homepage Archive (Wayback Machine) 主页存档（网站时光机）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PL0j-r-omG7i0-mnsxN5T4UcVS1Di0isqf&quot;&gt;YouTube Playlist    YouTube 播放列表&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/SMS-Derfflinger/self-learning/tree/master/CS61C/fa20/slide&quot;&gt;slides (GitHub Repository)    幻灯片（GitHub 仓库）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://wla.berkeley.edu/~cs61c/fa20/pdfs/&quot;&gt;slides and discussions    幻灯片和讨论&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Labs and Projects 实验和项目&lt;a href=&quot;#labs-and-projects-实验和项目&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can fork from the repositories of &lt;a href=&quot;https://github.com/61c-teach&quot;&gt;61c-teach&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;你可以从&lt;a href=&quot;https://github.com/61c-teach&quot;&gt;61c-teach&lt;/a&gt;的仓库复刻。&lt;/p&gt;
&lt;div&gt;
  &lt;a href=&quot;https://github.com/61c-teach/fa20-lab-starter&quot; target=&quot;_blank&quot;&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;div&gt;
          &lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
          &lt;span&gt;github.com&lt;/span&gt;
        &lt;/div&gt;
        &lt;div&gt;GitHub - 61c-teach/fa20-lab-starter&lt;/div&gt;
        &lt;p&gt;Contribute to 61c-teach/fa20-lab-starter development by creating an account on GitHub.&lt;/p&gt;
        &lt;div&gt;
          &lt;span&gt;https://github.com/61c-teach/fa20-lab-starter&lt;/span&gt;
           
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/97515b2bc8fc671dcb3e51f6753b505a12417a2dc47a13b4ac751bfc3d948b69/61c-teach/fa20-lab-starter&quot; alt=&quot;GitHub - 61c-teach/fa20-lab-starter&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;The repository names of all projects follow the format of &lt;code&gt;fa20-projN-starter&lt;/code&gt;. You can search for &lt;code&gt;fa20-proj&lt;/code&gt; on &lt;a href=&quot;https://github.com/61c-teach&quot;&gt;61c-teach’s GitHub homepage&lt;/a&gt; to find all project repositories.&lt;/p&gt;
&lt;p&gt;项目的仓库名都遵守&lt;code&gt;fa20-projN-starter&lt;/code&gt;的格式，在&lt;a href=&quot;https://github.com/61c-teach&quot;&gt;61c-teach的 GitHub 主页&lt;/a&gt;搜索&lt;code&gt;fa20-proj&lt;/code&gt;即可搜到所有项目仓库。&lt;/p&gt;</content:encoded><category>tag:UCBerkeley</category><category>tag:体系结构</category><category>tag:cs61c</category></item><item><title>数据结构部分知识点</title><link>https://blog.xuejie1.top/post/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E9%83%A8%E5%88%86%E7%9F%A5%E8%AF%86%E7%82%B9</link><guid isPermaLink="false">数据结构部分知识点</guid><description>线性表
对于顺序存储的线性表，设其长度为n，在任何位置上插入/删除都是等概率的，那么：
插入一个元素平均要移动n2\frac{n}{2}2n​个元素;
删除一个元素平均要移动n−12\frac{n-1}{2}2n−1​个元素。
带头结点的循环链表L为空的条件是
答：L-&amp;gt;next == L</description><pubDate>Thu, 04 Apr 2024 21:43:28 GMT</pubDate><content:encoded>&lt;h2&gt;线性表&lt;a href=&quot;#线性表&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;对于顺序存储的线性表，设其长度为&lt;code&gt;n&lt;/code&gt;，在任何位置上插入/删除都是等概率的，那么：
插入一个元素平均要移动&lt;span&gt;&lt;span&gt;n2\frac{n}{2}&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;个元素;
删除一个元素平均要移动&lt;span&gt;&lt;span&gt;n−12\frac{n-1}{2}&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;个元素。&lt;/p&gt;
&lt;p&gt;带头结点的循环链表&lt;code&gt;L&lt;/code&gt;为空的条件是
答：&lt;code&gt;L-&amp;gt;next == L&lt;/code&gt;&lt;/p&gt;</content:encoded><category>tag:数据结构</category></item><item><title>电工学/电路 - 结点电压法</title><link>https://blog.xuejie1.top/post/node-method</link><guid isPermaLink="false">node-method</guid><description>节点电压法 (文章) | 直流电路分析 | 可汗学院 (khanacademy.org)
MITx 的做法：

选取接地点
用eke_kek​标出除接地点外的结点电位
对每个结点列KCL方程
求解方程并求其他量

例题
Pasted image 20231105095411.png
选取接地点</description><pubDate>Mon, 18 Dec 2023 20:46:56 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://zh.khanacademy.org/science/electrical-engineering/ee-circuit-analysis-topic/ee-dc-circuit-analysis/a/ee-node-voltage-method&quot;&gt;节点电压法 (文章) | 直流电路分析 | 可汗学院 (khanacademy.org)&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;MITx 的做法：&lt;a href=&quot;#mitx-的做法&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;选取接地点&lt;/li&gt;
&lt;li&gt;用&lt;span&gt;&lt;span&gt;eke_k&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;标出除接地点外的结点电位&lt;/li&gt;
&lt;li&gt;对每个结点列KCL方程&lt;/li&gt;
&lt;li&gt;求解方程并求其他量&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;例题&lt;a href=&quot;#例题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;figure&gt;&lt;img src=&quot;/images/posts/node-method/20231105095411.png&quot; alt=&quot;Pasted image 20231105095411.png&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Pasted image 20231105095411.png&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h3&gt;选取接地点&lt;a href=&quot;#选取接地点&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;选择连接元件最多的那个结点或&lt;strong&gt;连接电压源负极&lt;/strong&gt;的结点
此处为
&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/posts/node-method/20231105095758.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;用&lt;span&gt;&lt;span&gt;eke_k&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;标出除接地点外的结点电位&lt;a href=&quot;#用e_k标出除接地点外的结点电位&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/posts/node-method/20231105095900.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/figure&gt;
图中最上面的结点的电位可以不用标出，因为它和地之间有一个电压源，所以它的电位大小为&lt;span&gt;&lt;span&gt;V0V_0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
可直接记作&lt;span&gt;&lt;span&gt;V0V_0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;对每个结点列KCL方程&lt;a href=&quot;#对每个结点列kcl方程&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;对&lt;span&gt;&lt;span&gt;e1e_1&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;列KCL：
首先设经过&lt;span&gt;&lt;span&gt;e1e_1&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;的电流都是向外的，画出图来：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/posts/node-method/20231105100350.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;看从&lt;span&gt;&lt;span&gt;e1e_1&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;到&lt;span&gt;&lt;span&gt;V0V_0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;的电流，由于沿着电流的方向电压减小，而&lt;span&gt;&lt;span&gt;I=UR=UGI=\frac{U}{R}=UG&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;I&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;R&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;U&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;U&lt;/span&gt;&lt;span&gt;G&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，所以可以这样表示&lt;span&gt;&lt;span&gt;II&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;I&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：
&lt;span&gt;&lt;span&gt;(e1−V0)G1(e_1-V_0)G_1&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。
同理，其他两个电流：
&lt;span&gt;&lt;span&gt;(e1−e2)G3(e_1-e_2)G_3&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;(e1−0)G2(e_1-0)G_2&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
根据KCL，流入结点的电流等于流出的，流入的为0，流出的已经表示出来了，所以可得：
&lt;span&gt;&lt;span&gt;(e1−V0)G1+(e1−e2)G3+(e1−0)G2=0(e_1-V_0)G_1+(e_1-e_2)G_3+(e_1-0)G_2=0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
同理可得&lt;span&gt;&lt;span&gt;e2e_2&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;的KCL方程：
&lt;span&gt;&lt;span&gt;(e2−e1)G3+(e2−V0)G4+(e2)G5=I1(e_2-e_1)G_3+(e_2-V_0)G_4+(e_2)G_5=I_1&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;I&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;strong&gt;流出的 = 流入的&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;求解方程&lt;a href=&quot;#求解方程&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;两个方程，&lt;span&gt;&lt;span&gt;e1e_1&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;和&lt;span&gt;&lt;span&gt;e2e_2&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;是未知数，所以得把两个未知数提出来，常量写到右边（写成&lt;span&gt;&lt;span&gt;ax1+bx2=cax_1+bx_2=c&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;）：
&lt;span&gt;&lt;span&gt;(G1+G2+G3)e1−G3e2=V0G1(G_1+G_2+G_3)e_1-G_3e_2=V_0G_1&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;−G3e1+(G3+G4+G5)e2=I1+V0G4-G_3e_1+(G_3+G_4+G_5)e_2=I_1+V_0G_4&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;I&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;G&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
写成矩阵形式：&lt;/p&gt;
&lt;span&gt; G_1+G_2+G_3 &amp;amp; -G_3\\
 -G_3 &amp;amp;G_3+G_4+G_5
\end{bmatrix}\begin{bmatrix}
 e_1 \\
e_2
\end{bmatrix}=\begin{bmatrix}
 V_0G_1\\
I_1+V_0G_4
\end{bmatrix}$$
对于本阶段的题目，直接按**中学**的求解多元一次方程组的方式求解即可，没有必要使用矩阵的方式求解（1. 求电导矩阵的逆矩阵$A^{-1}=\frac{1}{|A|}A^*$ 2.逆矩阵和电流矩阵相乘得到结果）。
# 常用的方式
观察上面整理后的方程，可以得出：
$$与结点直接相连的电导\times e-与相邻结点相连的电导\times e_{相邻}=流入电流$$
所以第3步对每个结点列KCL方程可以直接这么列。
上面的未标出的$e_3$已知，为$V_0$，一般把 $e_3=V_0$ 叫做 **增补方程**。
其他步骤和上面相同。
注意：当**有电压源和电阻串联**时，如例题中的$e_1$，那么就可以**求出这个支路的电流**为$V_0G_1$，方向为电压降低的方向，写在等号右边即可。
当**有受控源**时，将受控源当成独立源一样对待，即按前面的独立电压源和电流源的方法求解，并添加增补方程：将受控源的控制量用结点电压表示。&lt;/span&gt;</content:encoded><category>tag:电路</category><category>tag:电工学</category><category>tag:学习</category></item><item><title>《离散数学》左孝凌版部分内容疑问</title><link>https://blog.xuejie1.top/post/discrete-mathematics-errata</link><guid isPermaLink="false">discrete-mathematics-errata</guid><description>前言
河北科技大学软件工程2022届使用的离散数学教材就是这本《离散数学》左孝凌版的，上海科学技术文献出版社于1982年出版，距今已有41年了。我的这本的CIP数据页的版次写着：“1982年9月第一版</description><pubDate>Mon, 23 Oct 2023 00:03:22 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;a href=&quot;#前言&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;河北科技大学软件工程2022届使用的离散数学教材就是这本《离散数学》左孝凌版的，上海科学技术文献出版社于1982年出版，距今已有41年了。我的这本的CIP数据页的版次写着：“1982年9月第一版  2019年1月第74次印刷”，印刷了74次，过去了41年，仍然没有改进后再出一版，也没有让它就此湮没在历史的尘烟里，仍然要在现在给今天的大学生一点小小的老古董震撼。（这主要还是怪选用这个课本的学校）&lt;/p&gt;
&lt;p&gt;课本老可以，内容没错就行。我刚开学拿到课本时还有这样侥幸的想法，但事实证明我错了。因为开始学第一个概念，就把我整蒙圈了。原因在正文。&lt;/p&gt;
&lt;p&gt;如果一个课本开头的第一个概念都有问题，那么这个课本应该也就没有什么读下去的必要了。&lt;/p&gt;
&lt;p&gt;本人水平十分有限，没有系统的学过数理逻辑、数学分析等较深的数学专业课，仅通过网络搜集的资料加上自己的浅薄的理解，如有错误，还请指出。&lt;/p&gt;
&lt;h2&gt;1. 命题的概念&lt;a href=&quot;#1-命题的概念&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;原文&lt;a href=&quot;#原文&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;在数理逻辑中，为了表达概念，陈述理论和规则，常常需要应用语言讲行描述，但是日常使用的自然语言，往往叙述时不够确切，也易产生二义性，因此就需要引入一种目标语言，这种目标语言和一些公式符号，就形成了数理逻辑的形式符号体系。所谓目标语言就是表达判断的一些语言的汇集，而判断就是对事物有肯定或否定的一种思维形式，因此能表达判断的语言是陈述句，它称作命题。一个命题，总是具有一个“值”，称为真值。真值只有“真”和“假”两种，记作True(真)和False(假)，分别用符号T和F表示。&lt;strong&gt;只有具有确定真值的陈述句才是命题&lt;/strong&gt;，一切没有判断内容的句子，无所谓是非的句子，如感叹句、疑问句、祈使句等都不能作为命题。命题有两种类型：第一种类型是不能分解为更简单的陈述语句，称作原子命题；第二种类型是由联结词，标点符号和原子命题复合构成的命题，称作复合命题。有这些命题，都应具有确定的真值。下面给出实例，说明命题的概念。
(1)中国人民是伟大的。
(2)雪是黑的。
(3)&lt;span&gt;&lt;span&gt;1+101=1101+101=110&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;101&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;110&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
(4)别的星球上有生物。
(5)全体立正！
(6)明天是否开大会？
(7)天气多好啊！
(8)我正在说谎。
(9)我学英语，或者我学日语。
(10)如果天气好，那么我去散步。
在上面这些例子中，(1)，(2)，(4)，(9)，(10)是命题。其中(9)(10)是复合命题，(4)在目前可能无法决定真值，但从事物的本质而论，它本身是有真假可言的，所以我们承认这也是一个命题。(5),(6),(7)都不是命题。(8)是悖论。&lt;strong&gt;(3)在二进制中为真，在十进制中为假，故需根据上下文才能确定真值。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;问题&lt;a href=&quot;#问题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;2013年，一位使用这个课本的网友在 Mathematics Stack Exchange 上提了&lt;a href=&quot;https://math.stackexchange.com/questions/323728/is-1101-110-a-proposition&quot;&gt;一个问题&lt;/a&gt;，是关于上面例1中(3)小问的。&lt;/p&gt;
&lt;p&gt;以下是翻译：
一楼 Freewind:
书中有一个问题：1+101=110是一个命题吗？&lt;/p&gt;
&lt;p&gt;作者说这不是一个命题，因为如果是二进制，它就是真的，如果是十进制，它就是假的。所以我们无法确定它是真还是假，因此它不是一个命题。&lt;/p&gt;
&lt;p&gt;但在《离散数学及其应用》(Discrete Mathematics and Its Applications)一书中，它说1+1=2是一个命题。&lt;/p&gt;
&lt;p&gt;如果1+101=110不是一个命题，那么1+101=102也不应该是一个命题，同样，1+1=2也不应该是一个命题。&lt;/p&gt;
&lt;p&gt;对于这个问题和答案，我感到困惑，如何正确理解它呢？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更新&lt;/strong&gt;
我尝试把原文翻译成英语，我英语不好，抱歉。（原文省略，&lt;a href=&quot;#%E5%8E%9F%E6%96%87&quot;&gt;见上&lt;/a&gt;）&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;对一楼的回复：
Tony:
不确定，但在十进制中，1 + 1 = 2，而在二进制中，1 + 1 = 10，但在两种情况下，结果都是2，无论如何表示，结果都是相同的。然而，对于101 + 1，结果是102或110，这不是相同数字的不同表示。&lt;/p&gt;
&lt;p&gt;Ryan Budney:
说1+101=110不是一个命题可能有点过于极端。通常的假设是，存在明确的沟通方式，即你知道某人在使用哪种语言。如果有人写下一串数字，你会期望能找到一些关于如何解释这些数字的说明。如果没有这样的说明，一般人们会做出假设，并将其视为一个命题。如果我们对一切都毫不假设，那么命题的概念将不复存在，因为当人们将事物写下时，我们无法确切知道他们的意图，我们无法洞悉他人的思维。&lt;/p&gt;
&lt;p&gt;Neal:
如果我不懂中文，“wo shi zhongguoren” 就不是一个命题。如果我懂中文，它就是一个命题。&lt;/p&gt;
&lt;p&gt;Andreas Blass:
我认为任何人如果因为含糊地认为示例(3)不是一个命题，也应该含糊地认为示例(1)不是一个命题。中国人究竟是指那些居住在中国的人，还是指那些在中国出生但居住在其他地方的人？那些只有一个中国父母的人呢？祖父母有一个在中国呢？这个陈述是在说中国人集体伟大，还是每个中国人（个体）都伟大？练习：以类似的方式质疑陈述(4)。&lt;/p&gt;
&lt;p&gt;Cameron Buie:
除了Andreas提到的含糊之外，我敢说示例1是一个涉及观点的问题，因此其真值会因人而异。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;三楼&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 4个赞成 Cameron Buie：
&lt;span&gt;&lt;span&gt;1+101=1021+101=102&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;101&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;102&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;和&lt;span&gt;&lt;span&gt;1+1=21+1=2&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;在任何可用的二进制中都是真的，而且在二进制中甚至没有意义（因此在这种情况下也不是假的）。因此，它们在其真值方面是与上下文无关的（除了它们携带的上下文）。&lt;/p&gt;
&lt;p&gt;相比之下，&lt;span&gt;&lt;span&gt;1+101=1101+101=110&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;101&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;110&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;在所有进制中都是有意义的，但只在二进制中为真，在其他进制中为假。在这里，上下文是关键，而且没有被陈述明确指定。&lt;/p&gt;
&lt;p&gt;我怀疑这是不是所谓的“命题”与“非命题”之间的区别。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;二楼 5个赞成 Trevor Wilson：&lt;/p&gt;
&lt;p&gt;我猜测，正如Cameron所说，这本书的意思是，一个命题是一个陈述句，&lt;strong&gt;其真假不依赖于其被评估的上下文&lt;/strong&gt;。这是一个&lt;strong&gt;相当模糊的&lt;/strong&gt;对于“命题”的定义，人们可以争论这本书是否正确地应用了这个定义。例如：&lt;/p&gt;
&lt;p&gt;句子“华盛顿特区是美利坚合众国的首都”的真实性取决于其被评估的时间。美国在其历史上&lt;a href=&quot;https://wapbaike.baidu.com/tashuo/browse/content?id=08b8cb850861cf63d33764d0&quot;&gt;有过几个首都&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;句子“雪是黑色的”的真实性取决于是否是夜晚，以及附近是否有冒烟的工厂。&lt;/p&gt;
&lt;p&gt;我认为说我们迟早会知道其他星球上是否存在生命并不合理；而且，即使我们找到了一些东西，它可能处于我们所考虑的“生命”的边界之上。&lt;/p&gt;
&lt;p&gt;句子“我会学英语或日语”取决于说话者是谁，以及在发言时不可用的信息。&lt;/p&gt;
&lt;p&gt;无论如何， &lt;strong&gt;这个对于“命题”的定义不够精确，不能被认为是数学上的定义。&lt;/strong&gt; 我不知道任何&lt;em&gt;在自然语言句子上适用&lt;/em&gt;的&lt;em&gt;数学&lt;/em&gt;上&lt;em&gt;精确&lt;/em&gt;的“命题”的定义。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;四楼 0个赞成 user213378:&lt;/p&gt;
&lt;p&gt;命题是一种思想。语言是传达思想所必需的工具。如果两方未达成共识的语言，那么他们无法进行有效的沟通。因此，命题需要一种已经达成共识的语言来进行传达。&lt;/p&gt;
&lt;p&gt;就“1 + 101 = 110”的情况而言，除非定义了一种用于传达这个思想的语言，否则这无法被视为命题。一旦定义了一种语言，它就会成为一个命题。&lt;/p&gt;
&lt;h2&gt;2. 蕴含式的概念&lt;a href=&quot;#2-蕴含式的概念&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;原文&lt;a href=&quot;#原文-1&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;定义1-2.4&lt;/strong&gt;
给定两个命题&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;和&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;,其&lt;strong&gt;条件命题&lt;/strong&gt;是一个复合命题，记作&lt;span&gt;&lt;span&gt;P→QP\rightarrow Q&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;→&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;,读作“如果&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;,那末&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;”或“若&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;则&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;”。当且仅当&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;的真值为&lt;span&gt;&lt;span&gt;TT&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;,&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;的真值为&lt;span&gt;&lt;span&gt;FF&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;时，&lt;span&gt;&lt;span&gt;P→QP\rightarrow Q&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;→&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;的真值为&lt;span&gt;&lt;span&gt;FF&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;,否则&lt;span&gt;&lt;span&gt;P→QP\rightarrow Q&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;→&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;的真值为&lt;span&gt;&lt;span&gt;TT&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。我们称&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;为前件，&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;为后件。
（……）
在数学上和有些逻辑学的书籍中，“若&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;则&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;”亦可叫作&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;蕴含&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;,而本书在条件命题中将避免使用“蕴含”一词，因为在以后将另外定义“蕴含”这个概念。
（……）
&lt;strong&gt;定义1-5.3&lt;/strong&gt;
当且仅当&lt;span&gt;&lt;span&gt;P→QP\rightarrow Q&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;→&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;是一个重言式时，我们称“&lt;span&gt;&lt;span&gt;PP&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;蕴含&lt;span&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;”,并记作&lt;span&gt;&lt;span&gt;P  ⟹  QP\implies Q&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;⟹&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;h3&gt;问题&lt;a href=&quot;#问题-1&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;此书对蕴含的定义与大多数其他文献下对蕴含的定义不同。
此书的“条件”相当于其他文献的“蕴含”，是一个联结词。此书的“蕴含式”相当于其他文献的“重言蕴含”，是一种用来描述（条件/蕴含）命题的性质。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;Footnotes&lt;a href=&quot;#footnote-label&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;这个论坛是根据赞同数排名的，而不是发布时间，我在这里按发布时间重新排序，楼层数仍然按照赞同数排名。 &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><category>tag:数学</category><category>tag:离散数学</category><category>tag:勘误</category></item><item><title>安装 PostmarketOS 后提示存储空间不足（low disk space）的解决方法</title><link>https://blog.xuejie1.top/post/redmi2-low-disk-space</link><guid isPermaLink="false">redmi2-low-disk-space</guid><description>第一次写教程，有哪里不对的还请指出。
问题
我在红米 2 安装 PostmarketOS 后通知栏提示存储空间不足。
命令行执行df -h输出如下：
xiaomi-wt88047:~$ df -h
Filesystem                Size      Used Available</description><pubDate>Tue, 10 Oct 2023 01:06:49 GMT</pubDate><content:encoded>&lt;p&gt;第一次写教程，有哪里不对的还请指出。&lt;/p&gt;
&lt;h1&gt;问题&lt;a href=&quot;#问题&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;我在红米 2 安装 PostmarketOS 后通知栏提示存储空间不足。&lt;/p&gt;
&lt;p&gt;命令行执行&lt;code&gt;df -h&lt;/code&gt;输出如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;xiaomi-wt88047:~$&lt;/span&gt;&lt;span&gt; df&lt;/span&gt;&lt;span&gt; -h&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Filesystem&lt;/span&gt;&lt;span&gt;                Size&lt;/span&gt;&lt;span&gt;      Used&lt;/span&gt;&lt;span&gt; Available&lt;/span&gt;&lt;span&gt; Use%&lt;/span&gt;&lt;span&gt; Mounted&lt;/span&gt;&lt;span&gt; on&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/dm-1&lt;/span&gt;&lt;span&gt;                 2.0G&lt;/span&gt;&lt;span&gt;      1.8G&lt;/span&gt;&lt;span&gt;     77.0M&lt;/span&gt;&lt;span&gt;  96%&lt;/span&gt;&lt;span&gt; /&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/dm-0&lt;/span&gt;&lt;span&gt;               225.7M&lt;/span&gt;&lt;span&gt;     48.1M&lt;/span&gt;&lt;span&gt;    165.5M&lt;/span&gt;&lt;span&gt;  23%&lt;/span&gt;&lt;span&gt; /boot&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tmpfs&lt;/span&gt;&lt;span&gt;                   378.6M&lt;/span&gt;&lt;span&gt;      1.7M&lt;/span&gt;&lt;span&gt;    376.8M&lt;/span&gt;&lt;span&gt;   0%&lt;/span&gt;&lt;span&gt; /run&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt;                      10.0M&lt;/span&gt;&lt;span&gt;         0&lt;/span&gt;&lt;span&gt;     10.0M&lt;/span&gt;&lt;span&gt;   0%&lt;/span&gt;&lt;span&gt; /dev&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;shm&lt;/span&gt;&lt;span&gt;                     946.4M&lt;/span&gt;&lt;span&gt;    284.0K&lt;/span&gt;&lt;span&gt;    946.1M&lt;/span&gt;&lt;span&gt;   0%&lt;/span&gt;&lt;span&gt; /dev/shm&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;                    946.4M&lt;/span&gt;&lt;span&gt;         0&lt;/span&gt;&lt;span&gt;    946.4M&lt;/span&gt;&lt;span&gt;   0%&lt;/span&gt;&lt;span&gt; /lib/firmware/msm-firmware-loader&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/mmcblk0p1&lt;/span&gt;&lt;span&gt;           64.0M&lt;/span&gt;&lt;span&gt;     49.3M&lt;/span&gt;&lt;span&gt;     14.6M&lt;/span&gt;&lt;span&gt;  77%&lt;/span&gt;&lt;span&gt; /lib/firmware/msm-firmware-loader/mnt/modem&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/mmcblk0p25&lt;/span&gt;&lt;span&gt;          27.5M&lt;/span&gt;&lt;span&gt;    156.0K&lt;/span&gt;&lt;span&gt;     26.7M&lt;/span&gt;&lt;span&gt;   1%&lt;/span&gt;&lt;span&gt; /lib/firmware/msm-firmware-loader/mnt/persist&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tmpfs&lt;/span&gt;&lt;span&gt;                     4.0M&lt;/span&gt;&lt;span&gt;         0&lt;/span&gt;&lt;span&gt;      4.0M&lt;/span&gt;&lt;span&gt;   0%&lt;/span&gt;&lt;span&gt; /sys/fs/cgroup&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tmpfs&lt;/span&gt;&lt;span&gt;                   189.3M&lt;/span&gt;&lt;span&gt;     16.0K&lt;/span&gt;&lt;span&gt;    189.3M&lt;/span&gt;&lt;span&gt;   0%&lt;/span&gt;&lt;span&gt; /run/user/10000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/mmcblk1p1&lt;/span&gt;&lt;span&gt;           14.8G&lt;/span&gt;&lt;span&gt;      1.5G&lt;/span&gt;&lt;span&gt;     13.4G&lt;/span&gt;&lt;span&gt;  10%&lt;/span&gt;&lt;span&gt; /run/media/user/6339-6537&lt;/span&gt;&lt;span&gt;   //&lt;/span&gt;&lt;span&gt; 这是SD卡&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;可以看到第一行，根分区只分配了2G，并且已经满了。&lt;/p&gt;
&lt;h1&gt;解决方法&lt;a href=&quot;#解决方法&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;来自 &lt;a href=&quot;https://gitlab.com/postmarketOS/pmaports/-/issues/2235&quot;&gt;https://gitlab.com/postmarketOS/pmaports/-/issues/2235&lt;/a&gt;
Adam Thiede @adamthiede 的回答&lt;/p&gt;
&lt;h2&gt;准备工作&lt;a href=&quot;#准备工作&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;推荐：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一台电脑&lt;/li&gt;
&lt;li&gt;一个能够连接手机和电脑的USB线&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果实在没有也可以用手机里自带的 Console。&lt;/p&gt;
&lt;h2&gt;0. 有电脑，用SSH连接手机&lt;a href=&quot;#0-有电脑用ssh连接手机&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;没电脑可跳过此步，直接用手机自带的命令行 Console 从步骤 1. 开始。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开手机的 Console&lt;/li&gt;
&lt;li&gt;执行&lt;code&gt;sudo service sshd start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果要每次开机都启动，执行&lt;code&gt;sudo rc-update add sshd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用USB连接电脑&lt;/li&gt;
&lt;li&gt;打开电脑命令行（如果是 Windows 系统，可使用 cmd 或 PowerShell； Linux 可使用自带的控制台，快捷键一般是&lt;code&gt;Ctrl + Alt + T&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;电脑命令行输入 &lt;code&gt;ssh user@172.16.42.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提示输入密码，默认是&lt;code&gt;147147&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果控制台最后一行显示类似于&lt;code&gt;xiaomi-wt88047:~$&lt;/code&gt;，则连接成功。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;1. 使用&lt;code&gt;lsblk&lt;/code&gt;列出块设备信息&lt;a href=&quot;#1-使用lsblk列出块设备信息&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;命令行输入&lt;code&gt;lsblk&lt;/code&gt;，得到以下结果：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;xiaomi-wt88047:~$&lt;/span&gt;&lt;span&gt; lsblk&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;NAME&lt;/span&gt;&lt;span&gt;         MAJ:MIN&lt;/span&gt;&lt;span&gt; RM&lt;/span&gt;&lt;span&gt;  SIZE&lt;/span&gt;&lt;span&gt; RO&lt;/span&gt;&lt;span&gt; TYPE&lt;/span&gt;&lt;span&gt; MOUNTPOINTS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;mmcblk1&lt;/span&gt;&lt;span&gt;      179:0&lt;/span&gt;&lt;span&gt;    0&lt;/span&gt;&lt;span&gt; 14.8G&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; disk&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;└─mmcblk1p1&lt;/span&gt;&lt;span&gt;  179:1&lt;/span&gt;&lt;span&gt;    0&lt;/span&gt;&lt;span&gt; 14.8G&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;span&gt; /run/media/user/6339-6537&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;mmcblk0&lt;/span&gt;&lt;span&gt;      179:32&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt; 14.7G&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; disk&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p1&lt;/span&gt;&lt;span&gt;  179:33&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   64M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;span&gt; /lib/firmware/msm-firmware-loader/mnt/modem&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p2&lt;/span&gt;&lt;span&gt;  179:34&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p3&lt;/span&gt;&lt;span&gt;  179:35&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p4&lt;/span&gt;&lt;span&gt;  179:36&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    1M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p5&lt;/span&gt;&lt;span&gt;  179:37&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    1M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p6&lt;/span&gt;&lt;span&gt;  179:38&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p7&lt;/span&gt;&lt;span&gt;  179:39&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p8&lt;/span&gt;&lt;span&gt;  179:40&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p9&lt;/span&gt;&lt;span&gt;  179:41&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p10&lt;/span&gt;&lt;span&gt; 179:42&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p11&lt;/span&gt;&lt;span&gt; 179:43&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p12&lt;/span&gt;&lt;span&gt; 179:44&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    1M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p13&lt;/span&gt;&lt;span&gt; 179:45&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  1.5M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p14&lt;/span&gt;&lt;span&gt; 179:46&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  1.5M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p15&lt;/span&gt;&lt;span&gt; 179:47&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    1M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p16&lt;/span&gt;&lt;span&gt; 179:48&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    1K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p17&lt;/span&gt;&lt;span&gt; 179:49&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    8K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p18&lt;/span&gt;&lt;span&gt; 179:50&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   10M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p19&lt;/span&gt;&lt;span&gt; 179:51&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   32K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p20&lt;/span&gt;&lt;span&gt; 179:52&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  1.5M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p21&lt;/span&gt;&lt;span&gt; 179:53&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   16K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p22&lt;/span&gt;&lt;span&gt; 179:54&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   32M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p23&lt;/span&gt;&lt;span&gt; 179:55&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    1G&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p24&lt;/span&gt;&lt;span&gt; 179:56&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  320M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p25&lt;/span&gt;&lt;span&gt; 179:57&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   32M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;span&gt; /lib/firmware/msm-firmware-loader/mnt/persist&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p26&lt;/span&gt;&lt;span&gt; 179:58&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   32M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p27&lt;/span&gt;&lt;span&gt; 179:59&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;  512K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p28&lt;/span&gt;&lt;span&gt; 179:60&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   32K&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;├─mmcblk0p29&lt;/span&gt;&lt;span&gt; 179:61&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;   64M&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;└─mmcblk0p30&lt;/span&gt;&lt;span&gt; 179:62&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt; 12.9G&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; part&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;mmcblk0boot0&lt;/span&gt;&lt;span&gt; 179:64&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    4M&lt;/span&gt;&lt;span&gt;  1&lt;/span&gt;&lt;span&gt; disk&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;mmcblk0boot1&lt;/span&gt;&lt;span&gt; 179:96&lt;/span&gt;&lt;span&gt;   0&lt;/span&gt;&lt;span&gt;    4M&lt;/span&gt;&lt;span&gt;  1&lt;/span&gt;&lt;span&gt; disk&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;zram0&lt;/span&gt;&lt;span&gt;        253:0&lt;/span&gt;&lt;span&gt;    0&lt;/span&gt;&lt;span&gt;  1.4G&lt;/span&gt;&lt;span&gt;  0&lt;/span&gt;&lt;span&gt; disk&lt;/span&gt;&lt;span&gt; [SWAP]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上述 &lt;code&gt;mmcblk1&lt;/code&gt; 是SD卡， &lt;code&gt;mmcblk0&lt;/code&gt; 是手机，手机里的 &lt;code&gt;mmcblk0p30&lt;/code&gt; 很大，有12.9G，是我们接下来要操作的对象。&lt;/p&gt;
&lt;p&gt;注：其他手机如一加6，输入&lt;code&gt;lsblk&lt;/code&gt;会显示类似于&lt;code&gt;sdkxx&lt;/code&gt;而不是&lt;code&gt;mmcblk0pxx&lt;/code&gt;，对操作没有影响，找很大的那个分区就对了。&lt;/p&gt;
&lt;h2&gt;2. 使用&lt;code&gt;fdisk&lt;/code&gt;重新分区&lt;a href=&quot;#2-使用fdisk重新分区&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;进入&lt;code&gt;fdisk&lt;/code&gt;&lt;a href=&quot;#进入fdisk&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;控制台输入：&lt;code&gt;sudo fdisk /dev/（此处填很大的分区）&lt;/code&gt;，对于我的手机来说就是 &lt;code&gt;sudo fdisk /dev/mmcblk0p30&lt;/code&gt;
输入后就进入了fdisk分区工具，输出如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;xiaomi-wt88047:~$&lt;/span&gt;&lt;span&gt; sudo&lt;/span&gt;&lt;span&gt; fdisk&lt;/span&gt;&lt;span&gt; /dev/mmcblk0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Welcome&lt;/span&gt;&lt;span&gt; to&lt;/span&gt;&lt;span&gt; fdisk&lt;/span&gt;&lt;span&gt; (util-linux &lt;/span&gt;&lt;span&gt;2.38.1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Changes&lt;/span&gt;&lt;span&gt; will&lt;/span&gt;&lt;span&gt; remain&lt;/span&gt;&lt;span&gt; in&lt;/span&gt;&lt;span&gt; memory&lt;/span&gt;&lt;span&gt; only,&lt;/span&gt;&lt;span&gt; until&lt;/span&gt;&lt;span&gt; you&lt;/span&gt;&lt;span&gt; decide&lt;/span&gt;&lt;span&gt; to&lt;/span&gt;&lt;span&gt; write&lt;/span&gt;&lt;span&gt; them.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Be&lt;/span&gt;&lt;span&gt; careful&lt;/span&gt;&lt;span&gt; before&lt;/span&gt;&lt;span&gt; using&lt;/span&gt;&lt;span&gt; the&lt;/span&gt;&lt;span&gt; write&lt;/span&gt;&lt;span&gt; command.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;This&lt;/span&gt;&lt;span&gt; disk&lt;/span&gt;&lt;span&gt; is&lt;/span&gt;&lt;span&gt; currently&lt;/span&gt;&lt;span&gt; in&lt;/span&gt;&lt;span&gt; use&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt; repartitioning&lt;/span&gt;&lt;span&gt; is&lt;/span&gt;&lt;span&gt; probably&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt; bad&lt;/span&gt;&lt;span&gt; idea.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;It&lt;/span&gt;&lt;span&gt;&apos;s recommended to umount all file systems, and swapoff all swap&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;partitions on this disk.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Command (m for help):&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;查看分区情况&lt;a href=&quot;#查看分区情况&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入&lt;code&gt;p&lt;/code&gt;查看分区情况，输出如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Command&lt;/span&gt;&lt;span&gt; (m &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; help&lt;/span&gt;&lt;span&gt;): p&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Disk&lt;/span&gt;&lt;span&gt; /dev/mmcblk0p30:&lt;/span&gt;&lt;span&gt; 12.93&lt;/span&gt;&lt;span&gt; GiB,&lt;/span&gt;&lt;span&gt; 13878935040&lt;/span&gt;&lt;span&gt; bytes,&lt;/span&gt;&lt;span&gt; 27107295&lt;/span&gt;&lt;span&gt; sectors&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Units:&lt;/span&gt;&lt;span&gt; sectors&lt;/span&gt;&lt;span&gt; of&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; *&lt;/span&gt;&lt;span&gt; 512&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; 512&lt;/span&gt;&lt;span&gt; bytes&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Sector&lt;/span&gt;&lt;span&gt; size&lt;/span&gt;&lt;span&gt; (logical/physical): 512 bytes / 512 bytes&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;I/O&lt;/span&gt;&lt;span&gt; size&lt;/span&gt;&lt;span&gt; (minimum/optimal): 512 bytes / 512 bytes&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Disklabel&lt;/span&gt;&lt;span&gt; type:&lt;/span&gt;&lt;span&gt; dos&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Disk&lt;/span&gt;&lt;span&gt; identifier:&lt;/span&gt;&lt;span&gt; 0xdab5b7a3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Device&lt;/span&gt;&lt;span&gt;            Boot&lt;/span&gt;&lt;span&gt;  Start&lt;/span&gt;&lt;span&gt;     End&lt;/span&gt;&lt;span&gt; Sectors&lt;/span&gt;&lt;span&gt;  Size&lt;/span&gt;&lt;span&gt; Id&lt;/span&gt;&lt;span&gt; Type&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/mmcblk0p30p1&lt;/span&gt;&lt;span&gt; *&lt;/span&gt;&lt;span&gt;      2048&lt;/span&gt;&lt;span&gt;  499711&lt;/span&gt;&lt;span&gt;  497664&lt;/span&gt;&lt;span&gt;  243M&lt;/span&gt;&lt;span&gt; 83&lt;/span&gt;&lt;span&gt; Linux&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/mmcblk0p30p2&lt;/span&gt;&lt;span&gt;      499712&lt;/span&gt;&lt;span&gt; 4923391&lt;/span&gt;&lt;span&gt; 4423680&lt;/span&gt;&lt;span&gt;  2.1G&lt;/span&gt;&lt;span&gt; 83&lt;/span&gt;&lt;span&gt; Linux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;记住第二个分区的&lt;code&gt;Start&lt;/code&gt;的数值，这里是&lt;code&gt;499712&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;删除分区&lt;a href=&quot;#删除分区&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入&lt;code&gt;d&lt;/code&gt;以进入删除分区的功能，输出如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Command&lt;/span&gt;&lt;span&gt; (m &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; help&lt;/span&gt;&lt;span&gt;): d&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Partition&lt;/span&gt;&lt;span&gt; number&lt;/span&gt;&lt;span&gt; (1,2, &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;它会提示我们输入要删除的分区号，我要删除第二个分区，输入2，输出如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Partition&lt;/span&gt;&lt;span&gt; number&lt;/span&gt;&lt;span&gt; (1,2, &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt;): 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Partition&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt; has&lt;/span&gt;&lt;span&gt; been&lt;/span&gt;&lt;span&gt; deleted.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;删除成功。&lt;/p&gt;
&lt;h3&gt;新建分区&lt;a href=&quot;#新建分区&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入&lt;code&gt;n&lt;/code&gt;以进入新建分区的功能，输出如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Command&lt;/span&gt;&lt;span&gt; (m &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; help&lt;/span&gt;&lt;span&gt;): n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Partition&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   p&lt;/span&gt;&lt;span&gt;   primary&lt;/span&gt;&lt;span&gt; (1 &lt;/span&gt;&lt;span&gt;primary,&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; extended,&lt;/span&gt;&lt;span&gt; 3&lt;/span&gt;&lt;span&gt; free&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   e&lt;/span&gt;&lt;span&gt;   extended&lt;/span&gt;&lt;span&gt; (container &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; logical&lt;/span&gt;&lt;span&gt; partitions&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Select&lt;/span&gt;&lt;span&gt; (default &lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;它提示我们要新建分区的类型，这里输入&lt;code&gt;p&lt;/code&gt;，即主分区(primary)。
接下来需要分别输入分区号、扇区起始位置、扇区终止位置，其中扇区起始位置是上面&lt;a href=&quot;#%E6%9F%A5%E7%9C%8B%E5%88%86%E5%8C%BA%E6%83%85%E5%86%B5&quot;&gt;查看分区情况&lt;/a&gt;记下的&lt;code&gt;Start&lt;/code&gt;数值，为&lt;code&gt;499712&lt;/code&gt;。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Partition&lt;/span&gt;&lt;span&gt; number&lt;/span&gt;&lt;span&gt; (2-4, &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;First&lt;/span&gt;&lt;span&gt; sector&lt;/span&gt;&lt;span&gt; (499712-27107294, &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; 499712&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Last&lt;/span&gt;&lt;span&gt; sector,&lt;/span&gt;&lt;span&gt; +/-sectors&lt;/span&gt;&lt;span&gt; or&lt;/span&gt;&lt;span&gt; +/-size{K,M,G,T,P}&lt;/span&gt;&lt;span&gt; (499712-27107294, &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; 27107294&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;输入完成后输出：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Created&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; partition&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt; of&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt; &apos;Linux&apos;&lt;/span&gt;&lt;span&gt; and&lt;/span&gt;&lt;span&gt; of&lt;/span&gt;&lt;span&gt; size&lt;/span&gt;&lt;span&gt; 12.7&lt;/span&gt;&lt;span&gt; GiB.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Partition&lt;/span&gt;&lt;span&gt; #2 contains a ext4 signature.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Do&lt;/span&gt;&lt;span&gt; you&lt;/span&gt;&lt;span&gt; want&lt;/span&gt;&lt;span&gt; to&lt;/span&gt;&lt;span&gt; remove&lt;/span&gt;&lt;span&gt; the&lt;/span&gt;&lt;span&gt; signature?&lt;/span&gt;&lt;span&gt; [Y]es/&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;N&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;o:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;此处输入&lt;code&gt;Y&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;写入分区信息并退出&lt;a href=&quot;#写入分区信息并退出&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入&lt;code&gt;w&lt;/code&gt;以写入分区信息并退出。&lt;/p&gt;
&lt;h2&gt;3. 重启并同步更改到内核&lt;a href=&quot;#3-重启并同步更改到内核&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;重启&lt;a href=&quot;#重启&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;控制台输入&lt;code&gt;sudo reboot&lt;/code&gt;以重启。&lt;/p&gt;
&lt;h3&gt;同步更改到内核&lt;a href=&quot;#同步更改到内核&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;重启后再次&lt;a href=&quot;#0-%E6%9C%89%E7%94%B5%E8%84%91%E7%94%A8ssh%E8%BF%9E%E6%8E%A5%E6%89%8B%E6%9C%BA&quot;&gt;使用SSH连接到电脑&lt;/a&gt;
控制台输入&lt;code&gt;resize2fs /dev/dm-1&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;查看效果&lt;a href=&quot;#查看效果&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;控制台输入&lt;code&gt;df -h&lt;/code&gt;
输出：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;xiaomi-wt88047:~$&lt;/span&gt;&lt;span&gt; df&lt;/span&gt;&lt;span&gt; -h&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Filesystem&lt;/span&gt;&lt;span&gt;                Size&lt;/span&gt;&lt;span&gt;      Used&lt;/span&gt;&lt;span&gt; Available&lt;/span&gt;&lt;span&gt; Use%&lt;/span&gt;&lt;span&gt; Mounted&lt;/span&gt;&lt;span&gt; on&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;/dev/dm-1&lt;/span&gt;&lt;span&gt;                12.5G&lt;/span&gt;&lt;span&gt;      1.8G&lt;/span&gt;&lt;span&gt;     10.1G&lt;/span&gt;&lt;span&gt;  15%&lt;/span&gt;&lt;span&gt; /&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;（略）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;成功。&lt;/p&gt;</content:encoded><category>tag:Linux</category><category>tag:PostmarketOS</category><category>tag:Redmi</category></item><item><title>生源地助学贷款的申请流程和利息计算</title><link>https://blog.xuejie1.top/post/%E5%8A%A9%E5%AD%A6%E8%B4%B7%E6%AC%BE</link><guid isPermaLink="false">助学贷款</guid><description>前言
分类
助学贷款按照受理机构可分为生源地助学贷款和高校助学贷款（校园地助学贷款）。
生源地助学贷款办理条件和还款要求相对宽松，所以推荐办理生源地贷款。1
此处只介绍生源地贷款的申请流程和相关计算。
申请条件
参见此处。
国家开发银行生源地助学贷款
流程

注册并登录</description><pubDate>Mon, 21 Aug 2023 00:37:59 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;a href=&quot;#前言&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2&gt;分类&lt;a href=&quot;#分类&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;助学贷款按照受理机构可分为&lt;em&gt;生源地助学贷款&lt;/em&gt;和&lt;em&gt;高校助学贷款（校园地助学贷款）&lt;/em&gt;。
生源地助学贷款办理条件和还款要求相对宽松，所以推荐办理生源地贷款。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
此处只介绍生源地贷款的申请流程和相关计算。&lt;/p&gt;
&lt;h2&gt;申请条件&lt;a href=&quot;#申请条件&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参见&lt;a href=&quot;http://www.moe.gov.cn/jyb_xwfb/xw_zt/moe_357/jyzt_2015nztzl/2015_zt06/15zt06_gxzzzc/gxzz_bzks/201508/t20150810_199211.html&quot;&gt;此处&lt;/a&gt;。&lt;/p&gt;
&lt;h1&gt;国家开发银行生源地助学贷款&lt;a href=&quot;#国家开发银行生源地助学贷款&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2&gt;流程&lt;a href=&quot;#流程&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;注册并登录 &lt;a href=&quot;https://www.csls.cdb.com.cn/&quot;&gt;国家开发银行生源地助学贷款学生在线系统&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;在网站完善基本资料。&lt;/li&gt;
&lt;li&gt;在首页点击“贷款申请”，并填写个人基本信息（如贷款金额、贷款年限等）。个人账户信息系统已帮你填好，不用更改。&lt;/li&gt;
&lt;li&gt;填写共同贷款人信息。&lt;/li&gt;
&lt;li&gt;在网站填写申请表后导出（为.doc文件）并打印。&lt;/li&gt;
&lt;li&gt;在网站导出“家庭经济困难学生认定申请表”（为.doc文件）并打印，填写打印出来的表。&lt;/li&gt;
&lt;li&gt;拿着：填写好的&lt;strong&gt;申请表原件&lt;/strong&gt;、&lt;strong&gt;家庭经济困难学生认定申请表原件&lt;/strong&gt;、&lt;strong&gt;本人&lt;/strong&gt;和&lt;strong&gt;共同借款人&lt;/strong&gt;的&lt;strong&gt;身份证原件&lt;/strong&gt;、本人的&lt;strong&gt;录取通知书&lt;/strong&gt;或&lt;strong&gt;学生证原件&lt;/strong&gt;，去当地教育局里的资助中心进行办理。（资助中心位置可通过在线系统首页的“本人所属资助中心联系方式”查询）&lt;/li&gt;
&lt;li&gt;如果本人和共同借款人不在同一户口簿上，还要拿双方的户口簿&lt;strong&gt;原件&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;年利率计算[&lt;sup&gt;2][&lt;/sup&gt;3]&lt;a href=&quot;#年利率计算23&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;还款计划可通过在线系统查询，如果你还未申请贷款又想算利息和还款计划，请阅读本章节和“还款规则”章节。&lt;/p&gt;
&lt;p&gt;此章节的内容参考&lt;a href=&quot;http://www.wenjiang.gov.cn/wjzzw/c132590/2022-05/19/ca84925a5762444a9cca854c7dfba62b/files/8da84a80b45048648de4995f68b4d7d3.pdf&quot;&gt;国家开发银行生源地信用助学贷款还款指南&lt;/a&gt;和&lt;a href=&quot;https://www.gov.cn/zhengce/zhengceku/2020-07/21/content_5528653.htm&quot;&gt;教育部 财政部 中国人民银行 银保监会关于调整完善国家助学贷款有关政策的通知&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;年利率为：
&lt;span&gt;&lt;span&gt;LPR5Y−0.3%LPR5Y - 0.3\% &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;L&lt;/span&gt;&lt;span&gt;PR&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;Y&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;−&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;0.3%&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;年利率在每年的 12 月 21 日根据同期 LPR5Y 调整一次。&lt;/p&gt;
&lt;p&gt;LPR是贷款市场报价利率，可以通过&lt;a href=&quot;https://www.boc.cn/fimarkets/lilv/fd32/201310/t20131031_2591219.html&quot;&gt;贷款市场报价利率（LPR）（中国银行官网）&lt;/a&gt;查询。5Y 指 5 年期以上。&lt;/p&gt;
&lt;p&gt;如果你要算今年的助学贷款年利率，就可以查上面网站所给的&lt;strong&gt;去年 12 月 21 日&lt;/strong&gt;（或 20 日）的 &lt;strong&gt;5 年期以上&lt;/strong&gt;一栏的利率数，再将这个数&lt;strong&gt;减去 0.3%&lt;/strong&gt; 就是今年的助学贷款年利率。&lt;/p&gt;
&lt;p&gt;比如，要算 2023 年的助学贷款年利率，那么查去年（2022年）12 月 20 日的 5 年期以上的利率数，为 4.30% 。再把这个数字减去 0.3% ，得出 4.0% 就是 2023 年助学贷款的年利率。&lt;/p&gt;
&lt;h2&gt;还款规则[&lt;sup&gt;2][&lt;/sup&gt;3]&lt;a href=&quot;#还款规则23&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;在校期间&lt;a href=&quot;#在校期间&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在校期间产生的利息&lt;strong&gt;由国家代付&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;宽限期&lt;a href=&quot;#宽限期&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;从毕业开始的五年内为&lt;strong&gt;宽限期&lt;/strong&gt;。（毕业当年为第一年）&lt;/p&gt;
&lt;p&gt;宽限期内的每年的12月20日&lt;strong&gt;仅偿还当年产生的利息&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;毕业当年的 12 月 20 日偿还自本年 9 月 1 日至 12 月 20 日产生的利息。&lt;/p&gt;
&lt;p&gt;之后的四年，每年的 12 月 20 日偿还从去年 12 月 21 日到今年的 12 月 20 日产生的利息。&lt;/p&gt;
&lt;h3&gt;正式还款&lt;a href=&quot;#正式还款&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;自毕业后的第六年起&lt;strong&gt;开始偿还本金和利息&lt;/strong&gt;。（毕业当年为第一年）&lt;/p&gt;
&lt;p&gt;每年的 12 月 20 日（最后一年为 9 月 20 日）偿还本年产生的利息和一年的本金。&lt;/p&gt;
&lt;h3&gt;提前还款&lt;a href=&quot;#提前还款&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;毕业年的 &lt;strong&gt;8 月 15 日前&lt;/strong&gt;可以申请一次性还款免息，一次把本金还清，&lt;strong&gt;不计利息&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;逾期还款&lt;a href=&quot;#逾期还款&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;逾期还款的罚息为 30%。&lt;/p&gt;
&lt;h2&gt;举例&lt;a href=&quot;#举例&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;比如小明在 2023 年大二升大三的暑假时申请了 8000 元的助学贷款，10 年内还清。&lt;/p&gt;





























































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;时期&lt;/th&gt;&lt;th&gt;年份&lt;/th&gt;&lt;th&gt;剩余本金（还款后）&lt;/th&gt;&lt;th&gt;应还本金&lt;/th&gt;&lt;th&gt;利息&lt;/th&gt;&lt;th&gt;应还&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;在校&lt;/td&gt;&lt;td&gt;2023&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2024&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;至2025年9月1日&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;宽限期&lt;/td&gt;&lt;td&gt;至2025年12月20日&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥106.67&lt;/td&gt;&lt;td&gt;¥106.67&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2026&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2027&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2028&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2029&lt;/td&gt;&lt;td&gt;¥8,000.00&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;正式还款&lt;/td&gt;&lt;td&gt;2030&lt;/td&gt;&lt;td&gt;¥6,000.00&lt;/td&gt;&lt;td&gt;¥2,000.00&lt;/td&gt;&lt;td&gt;¥320.00&lt;/td&gt;&lt;td&gt;¥2,320.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2031&lt;/td&gt;&lt;td&gt;¥4,000.00&lt;/td&gt;&lt;td&gt;¥2,000.00&lt;/td&gt;&lt;td&gt;¥240.00&lt;/td&gt;&lt;td&gt;¥2,240.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2032&lt;/td&gt;&lt;td&gt;¥2,000.00&lt;/td&gt;&lt;td&gt;¥2,000.00&lt;/td&gt;&lt;td&gt;¥160.00&lt;/td&gt;&lt;td&gt;¥2,160.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2033&lt;/td&gt;&lt;td&gt;¥0.00&lt;/td&gt;&lt;td&gt;¥2,000.00&lt;/td&gt;&lt;td&gt;¥80.00&lt;/td&gt;&lt;td&gt;¥2,080.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;共计利息：&lt;/td&gt;&lt;td&gt;¥2,186.67&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;共需还款：&lt;/td&gt;&lt;td&gt;¥10,186.67&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
    
&lt;/div&gt;
&lt;section&gt;&lt;h2&gt;Footnotes&lt;a href=&quot;#footnote-label&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;生源地助学贷款和国家高校助学贷款哪个更合适？ - CTGU罗同学的回答 - 知乎
&lt;a href=&quot;https://www.zhihu.com/question/278652840/answer/2749685168&quot;&gt;https://www.zhihu.com/question/278652840/answer/2749685168&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><category>tag:学生</category><category>tag:借贷</category><category>tag:学校</category><category>tag:文章时效性提示</category></item></channel></rss>