Compare commits
16 Commits
d685a22b60
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48f04577dc | ||
|
|
2b118d7409 | ||
|
|
8d824d12cd | ||
|
|
26a6db037a | ||
|
|
26f2215955 | ||
|
|
e3bf2f6870 | ||
|
|
f90e7a6566 | ||
|
|
19635c9c76 | ||
|
|
3a2af24c94 | ||
|
|
9e59e1dbea | ||
|
|
6c7e911364 | ||
|
|
6ac8a8c824 | ||
|
|
b4d9e15a65 | ||
|
|
5e88779532 | ||
|
|
4738fb6c84 | ||
|
|
4b511285b9 |
75
docs/superpowers/specs/2026-03-26-docker-deploy-design.md
Normal file
75
docs/superpowers/specs/2026-03-26-docker-deploy-design.md
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# Docker deployment (make up/down)
|
||||||
|
|
||||||
|
## Context
|
||||||
|
- Project: VuePress v2 static blog (Vite).
|
||||||
|
- Goal: one-command production deployment and teardown via `make up` and `make down`.
|
||||||
|
- Hosting: root path `/`.
|
||||||
|
- Port mapping: host `6666` -> container `80`.
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
- Provide a reproducible, production-grade deployment using Docker.
|
||||||
|
- Keep operator commands minimal (`make up`, `make down`).
|
||||||
|
- Ensure build failures fail fast and are visible.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
- No development-mode container (`vuepress-vite dev`).
|
||||||
|
- No additional runtime dependencies besides Docker.
|
||||||
|
- No advanced orchestration (k8s, swarm).
|
||||||
|
|
||||||
|
## Assumptions
|
||||||
|
- Docker Engine and Docker Compose v2 are available on the host.
|
||||||
|
- `package-lock.json` is present; builds use `npm ci`.
|
||||||
|
|
||||||
|
## Proposed architecture
|
||||||
|
- Multi-stage Docker image:
|
||||||
|
- Stage 1 (build): Node image installs dependencies and runs `docs:build`.
|
||||||
|
- Stage 2 (run): Nginx serves the generated static files.
|
||||||
|
- `docker-compose.yml` manages a single service (e.g., `myblog`).
|
||||||
|
- `Makefile` wraps compose commands for consistent UX.
|
||||||
|
|
||||||
|
## Components
|
||||||
|
### Dockerfile
|
||||||
|
- Base images: `node:20-alpine` (build), `nginx:1.25-alpine` (run).
|
||||||
|
- Stage 1:
|
||||||
|
- Workdir set to app root.
|
||||||
|
- Copy `package.json` + `package-lock.json`, run `npm ci`.
|
||||||
|
- Copy source and run `npm run docs:build`.
|
||||||
|
- Stage 2:
|
||||||
|
- Copy `src/.vuepress/dist/` to `/usr/share/nginx/html`.
|
||||||
|
- Use default Nginx config for root `/`.
|
||||||
|
|
||||||
|
### .dockerignore
|
||||||
|
- Exclude: `node_modules`, `dist`, `src/.vuepress/dist`, `.git`, `*.log`.
|
||||||
|
|
||||||
|
### docker-compose.yml
|
||||||
|
- Service name: `myblog`.
|
||||||
|
- Build context: repository root.
|
||||||
|
- Image name: `myblog:latest`.
|
||||||
|
- Port mapping: `6666:80`.
|
||||||
|
- Restart policy: `unless-stopped`.
|
||||||
|
|
||||||
|
### Makefile
|
||||||
|
- `make up`: `docker compose up -d --build`.
|
||||||
|
- `make down`: `docker compose down`.
|
||||||
|
- Optional commands (if desired later): `make logs`, `make ps`, `make rebuild`.
|
||||||
|
|
||||||
|
## Runtime flow
|
||||||
|
1. Operator runs `make up`.
|
||||||
|
2. Docker builds image (install deps -> build static site).
|
||||||
|
3. Nginx container starts and serves static files.
|
||||||
|
4. Operator runs `make down` to stop and remove the service.
|
||||||
|
|
||||||
|
## Error handling
|
||||||
|
- Build failures (dependency install or VuePress build) cause `make up` to fail and exit.
|
||||||
|
- Compose output provides the error details for diagnosis.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
- Access `http://<host>:6666/` and confirm the site loads.
|
||||||
|
- Optional: `docker compose logs -f` for runtime inspection.
|
||||||
|
|
||||||
|
## Security / operations
|
||||||
|
- No secrets are required.
|
||||||
|
- Container only exposes HTTP on port 80 inside the compose network.
|
||||||
|
|
||||||
|
## Open questions
|
||||||
|
- None. All required inputs confirmed (production mode, root path, port 6666).
|
||||||
@@ -209,15 +209,22 @@ export default sidebar({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "待办事项",
|
text: "待办事项",
|
||||||
icon: "mdi:checklist",
|
icon: "fa6-solid:list-check",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
text: "待办首页",
|
text: "待办首页",
|
||||||
|
icon: "mdi:home-outline",
|
||||||
link: "/work/todo/",
|
link: "/work/todo/",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
text: "4月待办",
|
||||||
|
icon: "mdi:calendar-month",
|
||||||
|
link: "/work/todo/2026-04.md",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
text: "3月待办",
|
text: "3月待办",
|
||||||
|
icon: "mdi:calendar-month",
|
||||||
link: "/work/todo/2026-03.md",
|
link: "/work/todo/2026-03.md",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -249,79 +256,88 @@ export default sidebar({
|
|||||||
"/ai/": [
|
"/ai/": [
|
||||||
{
|
{
|
||||||
text: "OpenCode",
|
text: "OpenCode",
|
||||||
icon: "mdi:application-braces-outline",
|
icon: "fa6-solid:code",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
text: "opencode-cli",
|
text: "opencode-cli",
|
||||||
|
icon: "fa6-solid:terminal",
|
||||||
link: "opencode.md",
|
link: "opencode.md",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "opencode-tui",
|
text: "opencode-tui",
|
||||||
|
icon: "fa6-solid:desktop",
|
||||||
link: "opencode-tui.md",
|
link: "opencode-tui.md",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Superpowers",
|
text: "Superpowers",
|
||||||
icon: "mdi:rocket-launch-outline",
|
icon: "fa6-solid:rocket",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
prefix: "superpowers/",
|
prefix: "superpowers/",
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
text: "superpowers-总览",
|
text: "superpowers-总览",
|
||||||
|
icon: "fa6-solid:eye",
|
||||||
link: "opencode-superpowers-overview.md",
|
link: "opencode-superpowers-overview.md",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "superpowers",
|
text: "superpowers",
|
||||||
|
icon: "fa6-solid:bolt",
|
||||||
link: "opencode-superpowers.md",
|
link: "opencode-superpowers.md",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "skills-使用方案汇总",
|
text: "skills-使用方案汇总",
|
||||||
|
icon: "fa6-solid:book",
|
||||||
link: "opencode-skills-playbook.md",
|
link: "opencode-skills-playbook.md",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Claude Code",
|
text: "Claude Code",
|
||||||
icon: "mdi:source-branch",
|
icon: "fa6-solid:code-branch",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
text: "多分支工作流实战总结(2026)",
|
text: "多分支工作流实战总结(2026)",
|
||||||
|
icon: "fa6-solid:code-merge",
|
||||||
link: "claude-code-branch-workflow-2026.md",
|
link: "claude-code-branch-workflow-2026.md",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "ChatGPT",
|
text: "ChatGPT",
|
||||||
icon: "mdi:chat-processing-outline",
|
icon: "fa6-solid:comments",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
text: "chatgpt-使用记录与实践",
|
text: "chatgpt-使用记录与实践",
|
||||||
|
icon: "fa6-solid:message",
|
||||||
link: "chatgpt.md",
|
link: "chatgpt.md",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "OpenClaw",
|
text: "OpenClaw",
|
||||||
icon: "mdi:robot-outline",
|
icon: "fa6-solid:robot",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
text: "openclaw-24h在线部署实战",
|
text: "openclaw-24h在线部署实战",
|
||||||
|
icon: "fa6-solid:server",
|
||||||
link: "openclaw.md",
|
link: "openclaw.md",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "iFlow",
|
text: "iFlow",
|
||||||
icon: "mdi:sitemap-outline",
|
icon: "fa6-solid:diagram-project",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
text: "iflow-流程编排实践记录",
|
text: "iflow-流程编排实践记录",
|
||||||
|
icon: "fa6-solid:flow-chart",
|
||||||
link: "iflow.md",
|
link: "iflow.md",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
209
src/programming/linux/Linux_Mint/xfce终端常用快捷指令.md
Normal file
209
src/programming/linux/Linux_Mint/xfce终端常用快捷指令.md
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
---
|
||||||
|
title: Linux Mint XFCE 终端常用快捷指令完全指南
|
||||||
|
icon: simple-icons:linuxmint
|
||||||
|
date: 2026-03-30
|
||||||
|
category:
|
||||||
|
- Linux
|
||||||
|
tag:
|
||||||
|
- Linux Mint
|
||||||
|
- XFCE
|
||||||
|
- 终端
|
||||||
|
- 快捷键
|
||||||
|
- 效率提升
|
||||||
|
---
|
||||||
|
|
||||||
|
# Linux Mint XFCE 终端常用快捷指令完全指南
|
||||||
|
|
||||||
|
XFCE 终端是 Linux Mint XFCE 桌面环境默认的命令行工具,熟练掌握其快捷键可以极大提升工作效率。本文整理了最实用的 XFCE 终端快捷键,涵盖导航、编辑、显示调整等各个方面,帮助你更高效地使用终端。
|
||||||
|
|
||||||
|
<!-- more -->
|
||||||
|
|
||||||
|
## 一、基础导航类快捷键
|
||||||
|
|
||||||
|
### 1.1 标签页管理
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl+Shift+T` | 新建标签页 | 需要同时运行多个命令时 |
|
||||||
|
| `Ctrl+PgUp` / `Ctrl+PgDown` | 切换到上一个/下一个标签页 | 在多个标签页间快速切换 |
|
||||||
|
| `Alt+数字键` | 切换到指定序号标签页 | 直接跳转到特定标签页 |
|
||||||
|
| `Ctrl+Shift+W` | 关闭当前标签页 | 清理不再需要的终端会话 |
|
||||||
|
| `Ctrl+Shift+R` | 重命名当前标签页 | 为标签页设置描述性名称 |
|
||||||
|
|
||||||
|
### 1.2 窗口管理
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl+Shift+N` | 新建终端窗口 | 需要独立的终端窗口 |
|
||||||
|
| `Ctrl+Shift+O` | 水平分割窗口 | 同时查看或操作多个内容 |
|
||||||
|
| `Ctrl+Shift+E` | 垂直分割窗口 | 并排对比或操作 |
|
||||||
|
| `Ctrl+Shift+Q` | 关闭终端窗口 | 退出终端应用程序 |
|
||||||
|
|
||||||
|
### 1.3 滚动与导航
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Shift+PgUp` / `Shift+PgDown` | 向上/向下滚动页面 | 查看历史输出内容 |
|
||||||
|
| `Ctrl+Shift+K` | 清除终端内容 | 清理终端界面 |
|
||||||
|
| `Ctrl+Shift+F` | 查找文本 | 在终端输出中搜索内容 |
|
||||||
|
|
||||||
|
## 二、编辑操作类快捷键
|
||||||
|
|
||||||
|
### 2.1 基础移动快捷键
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl + A` | 回到行首 | 快速定位到命令开头修改 |
|
||||||
|
| `Ctrl + E` | 回到行尾 | 快速定位到命令结尾补充参数 |
|
||||||
|
| `Ctrl + B` / 左箭头 | 向左移动一个字符 | 字符级微调光标位置 |
|
||||||
|
| `Ctrl + F` / 右箭头 | 向右移动一个字符 | 字符级微调光标位置 |
|
||||||
|
| `Alt + B` | 向左移动一个单词 | 快速按单词跳转编辑长命令 |
|
||||||
|
| `Alt + F` | 向右移动一个单词 | 快速按单词跳转编辑长命令 |
|
||||||
|
| `Esc + B` | 向左移动一个单词 | Alt+B被终端菜单抢占时的替代方案 |
|
||||||
|
| `Esc + F` | 向右移动一个单词 | Alt+F被终端菜单抢占时的替代方案 |
|
||||||
|
|
||||||
|
### 2.2 删除快捷键
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl + U` | 删除到行首 | 快速清空当前输入的命令 |
|
||||||
|
| `Ctrl + K` | 删除到行尾 | 删除光标后面不需要的内容 |
|
||||||
|
| `Ctrl + W` | 删除前一个单词 | 快速删除最近输入的错误单词 |
|
||||||
|
| `Ctrl + D` | 删除当前字符 | 删除光标下的字符 |
|
||||||
|
| `Backspace` | 删除前一个字符 | 常规删除操作 |
|
||||||
|
|
||||||
|
### 2.3 历史命令操作
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `上/下箭头` | 浏览命令历史 | 重复执行之前的命令 |
|
||||||
|
| `Ctrl + R` | 反向搜索历史命令 | 快速查找之前执行过的命令 |
|
||||||
|
| `Ctrl + G` | 退出历史搜索模式 | 取消历史搜索返回正常输入 |
|
||||||
|
|
||||||
|
### 2.4 文本选择与操作
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl+Shift+C` | 复制选中文本 | 复制终端中的命令或输出 |
|
||||||
|
| `Ctrl+Shift+V` | 粘贴剪贴板内容 | 粘贴命令或文本到终端 |
|
||||||
|
| `Ctrl+Shift+A` | 全选当前行 | 快速复制整行内容 |
|
||||||
|
| `Ctrl+Shift+左/右箭头` | 按单词移动光标 | 快速编辑长命令 |
|
||||||
|
|
||||||
|
### 2.5 查找与替换
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl+Shift+F` | 打开查找对话框 | 在终端内容中搜索文本 |
|
||||||
|
| `F3` | 查找下一个匹配项 | 继续搜索相同内容 |
|
||||||
|
| `Shift+F3` | 查找上一个匹配项 | 反向搜索匹配项 |
|
||||||
|
|
||||||
|
## 三、显示调整类快捷键
|
||||||
|
|
||||||
|
### 3.1 字体与缩放
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl+加号 (+)` | 放大字体 | 改善可读性 |
|
||||||
|
| `Ctrl+减号 (-)` | 缩小字体 | 显示更多内容 |
|
||||||
|
| `Ctrl+0` | 重置字体大小 | 恢复默认设置 |
|
||||||
|
|
||||||
|
### 3.2 配色方案与透明度
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `F11` | 全屏切换 | 专注于终端操作 |
|
||||||
|
| `Ctrl+Shift+I` | 切换光标形状 | 适应个人偏好 |
|
||||||
|
| `Ctrl+Shift+G` | 切换全局菜单 | 节省屏幕空间 |
|
||||||
|
|
||||||
|
> 💡 **小贴士**:可以自定义配色方案,前往 "编辑" → "首选项" → "外观" 设置自己喜欢的主题颜色。
|
||||||
|
|
||||||
|
## 四、高级功能类快捷键
|
||||||
|
|
||||||
|
### 4.1 书签管理
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl+Shift+B` | 添加当前目录为书签 | 快速访问常用目录 |
|
||||||
|
| `Ctrl+B` | 打开书签管理器 | 跳转到已保存的书签 |
|
||||||
|
| `F2` | 编辑当前标签页书签 | 更新书签信息 |
|
||||||
|
|
||||||
|
### 4.2 布局与多列显示
|
||||||
|
|
||||||
|
| 快捷键 | 功能描述 | 使用场景 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `Ctrl+Shift+O` | 水平分割标签页 | 并排查看不同内容 |
|
||||||
|
| `Ctrl+Shift+E` | 垂直分割标签页 | 对比或参考操作 |
|
||||||
|
| `Ctrl+Shift+Q` | 关闭分割窗格 | 恢复单个视图 |
|
||||||
|
|
||||||
|
> 🎯 **高效技巧**:使用 `Ctrl+Shift+T` 新建标签页后,配合 `Alt+数字键` 快速切换,可以像使用浏览器一样高效管理多个终端会话。
|
||||||
|
|
||||||
|
## 五、自定义快捷键配置
|
||||||
|
|
||||||
|
### 5.1 修改快捷键配置文件
|
||||||
|
|
||||||
|
XFCE 终端的快捷键配置文件位于:
|
||||||
|
`~/.config/xfce4/terminal/accels.scm`
|
||||||
|
|
||||||
|
可以通过编辑此文件来自定义快捷键:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 备份原配置文件
|
||||||
|
cp ~/.config/xfce4/terminal/accels.scm ~/.config/xfce4/terminal/accels.scm.backup
|
||||||
|
|
||||||
|
# 编辑配置文件
|
||||||
|
nano ~/.config/xfce4/terminal/accels.scm
|
||||||
|
|
||||||
|
# 示例:修改新建标签页快捷键为 Ctrl+T
|
||||||
|
# 原内容: (gtk_accel_path "<Actions>/terminal-window/tab-new" "<Primary><Shift>t")
|
||||||
|
# 修改为: (gtk_accel_path "<Actions>/terminal-window/tab-new" "<Primary>t")
|
||||||
|
```
|
||||||
|
|
||||||
|
重启终端或按 `Ctrl+Shift+R` 重载配置使更改生效。
|
||||||
|
|
||||||
|
### 5.2 解决Alt快捷键被抢占问题
|
||||||
|
|
||||||
|
XFCE 终端默认会将 `Alt + 字母` 组合键作为菜单访问快捷键,会导致 Bash 的 `Alt + F`、`Alt + B` 等行编辑快捷键失效,可通过以下设置解决:
|
||||||
|
|
||||||
|
**推荐方案(禁用所有菜单访问键):**
|
||||||
|
1. 打开终端 → **编辑** → **首选项**(Preferences)
|
||||||
|
2. 切换到 **高级**(Advanced)标签
|
||||||
|
3. **勾选**:**禁用所有菜单访问键**(Disable all menu access keys)
|
||||||
|
|
||||||
|
**效果:**
|
||||||
|
- `Alt + F`、`Alt + B` 等 Bash 行编辑快捷键恢复正常
|
||||||
|
- 同时会禁用 `Alt + F`(文件菜单)、`Alt + E`(编辑菜单)等菜单访问快捷键
|
||||||
|
|
||||||
|
**替代方案(不关闭菜单快捷键):**
|
||||||
|
- 使用 `Esc + F` 代替 `Alt + F` 向右跳一个单词
|
||||||
|
- 使用 `Esc + B` 代替 `Alt + B` 向左跳一个单词
|
||||||
|
|
||||||
|
> 💡 **记忆技巧**:
|
||||||
|
> - `Ctrl` 系列快捷键:多用于**字符**级别操作(A=开头, E=结尾, B=后退, F=前进)
|
||||||
|
> - `Alt` 系列快捷键:多用于**单词**级别操作(B=back, F=forward)
|
||||||
|
> - `Esc` 可以代替 Alt(当 Alt 被系统/应用抢占时)
|
||||||
|
|
||||||
|
## 六、总结与推荐
|
||||||
|
|
||||||
|
### 6.1 最常用快捷键(强烈建议掌握)
|
||||||
|
|
||||||
|
1. **导航类**:
|
||||||
|
- `Ctrl+Shift+T` - 新建标签页
|
||||||
|
- `Ctrl+PgUp` / `Ctrl+PgDown` - 切换标签页
|
||||||
|
- `Alt+数字键` - 直接跳转标签页
|
||||||
|
|
||||||
|
2. **编辑类**:
|
||||||
|
- `Ctrl+Shift+C` / `Ctrl+Shift+V` - 复制粘贴
|
||||||
|
- `Ctrl+R` - 搜索历史命令
|
||||||
|
|
||||||
|
3. **显示类**:
|
||||||
|
- `Ctrl+加号/减号` - 字体缩放
|
||||||
|
- `F11` - 全屏切换
|
||||||
|
|
||||||
|
### 6.2 学习建议
|
||||||
|
|
||||||
|
1. **循序渐进**:先掌握最常用的 5-10 个快捷键
|
||||||
|
2. **结合实际**:在日常使用中刻意练习
|
||||||
|
3. **定期复习**:创建自己的快捷键备忘清单
|
||||||
|
4. **个性化**:根据个人习惯调整快捷键配置
|
||||||
|
|
||||||
|
> 📚 **扩展阅读**:可以通过 `man xfce4-terminal` 查看完整的官方手册,了解更多高级功能和配置选项。
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: Linux 应用安装与快捷方式
|
title: Linux 应用安装与快捷方式
|
||||||
icon: mdi:application-box
|
icon: fa6-solid:box-open
|
||||||
date: 2025-12-22
|
date: 2025-12-22
|
||||||
category:
|
category:
|
||||||
- Linux 基础
|
- Linux 基础
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
icon: mdi:checklist
|
icon: fa6-solid:list-check
|
||||||
date: 2026-03-23
|
date: 2026-03-23
|
||||||
pageClass: todo-page
|
pageClass: todo-page
|
||||||
category:
|
category:
|
||||||
@@ -14,14 +14,14 @@ title: 3月待办(2026-03)
|
|||||||
|
|
||||||
# 待办清单(2026-03)
|
# 待办清单(2026-03)
|
||||||
|
|
||||||
> 最后更新: 2026-03-27
|
> 最后更新: 2026-04-02
|
||||||
> 统计: 已完成 13 项、已提交 0 项、待测试 1 项、部分完成 0 项、待确认 1 项、未开始 5 项、已取消 1 项
|
> 统计: 已完成 17 项、已提交 0 项、待测试 0 项、部分完成 0 项、待确认 1 项、未开始 3 项、已取消 1 项
|
||||||
|
|
||||||
## 清单总览
|
## 清单总览
|
||||||
|
|
||||||
- 当前优先: 8(待测试)、13(待确认)、14(未开始)
|
- 当前优先: 13(待确认)、14(未开始)
|
||||||
- 本周建议推进: 7、9、14、19、21(未开始)
|
- 本周建议推进: 7、9、14(未开始)
|
||||||
- 已归档完成: 1、2、3、4、5、10、11、12、15、16、17、18、20
|
- 已归档完成: 1、2、3、4、5、8、10、11、12、15、16、17、18、19、20、21、22
|
||||||
|
|
||||||
## 状态说明
|
## 状态说明
|
||||||
|
|
||||||
@@ -31,11 +31,6 @@ title: 3月待办(2026-03)
|
|||||||
|
|
||||||
## 当前优先
|
## 当前优先
|
||||||
|
|
||||||
### 8. [智慧场站-7050] 完成贵州大唐机器人告警复检需求开发 <Badge text="待测试" type="info" />
|
|
||||||
|
|
||||||
- **描述**: 7050项目机器人告警复检需求开发已完成,等待测试
|
|
||||||
- **下一步**: 安排联调与回归,确认告警复检流程和边界场景
|
|
||||||
|
|
||||||
### 13. V2.00的250985版本是否同步至其他系统 <Badge text="待确认" type="warning" />
|
### 13. V2.00的250985版本是否同步至其他系统 <Badge text="待确认" type="warning" />
|
||||||
|
|
||||||
- **描述**: 待确认V2.00的250985版本是否需要同步至其他系统
|
- **描述**: 待确认V2.00的250985版本是否需要同步至其他系统
|
||||||
@@ -63,28 +58,12 @@ title: 3月待办(2026-03)
|
|||||||
- **描述**: 验证7050系统对瀚高数据库的兼容性与适配结果,整理问题清单
|
- **描述**: 验证7050系统对瀚高数据库的兼容性与适配结果,整理问题清单
|
||||||
- **下一步**: 明确验证范围(安装、连接、读写、迁移脚本、性能基线)并安排验证
|
- **下一步**: 明确验证范围(安装、连接、读写、迁移脚本、性能基线)并安排验证
|
||||||
|
|
||||||
### 19. [智慧场站-7050] 删除点位时同步清理关联阈值告警 <Badge text="未开始" type="danger" />
|
|
||||||
|
|
||||||
- **创建日期**: 2026-03-27
|
|
||||||
- **描述**: 删除点位时排查是否存在关联的阈值告警,如存在则需要同步删除
|
|
||||||
- **下一步**: 梳理点位与阈值告警的关联关系,确认删除链路、影响范围与回归测试点
|
|
||||||
- **需求截图**:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 21. [智慧场站-7050] 反向联动菜单放出与联动开关灯实现 <Badge text="未开始" type="danger" />
|
|
||||||
|
|
||||||
- **创建日期**: 2026-03-27
|
|
||||||
- **描述**: 反向联动菜单放出 + 反向联动实现联动开灯关灯
|
|
||||||
- **状态**: 还在设计方案
|
|
||||||
- **下一步**: 完成方案设计,明确反向联动触发条件、开关灯联动逻辑与菜单权限配置
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 已完成归档
|
## 已完成归档
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>展开查看已完成事项(13项)</summary>
|
<summary>展开查看已完成事项(12项)</summary>
|
||||||
|
|
||||||
### 1. 2.00适配的立即执行时间为空是否需要同步其他版本 <Badge text="已完成" type="tip" />
|
### 1. 2.00适配的立即执行时间为空是否需要同步其他版本 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
@@ -124,12 +103,6 @@ title: 3月待办(2026-03)
|
|||||||
- **完成日期**: 2026-03-23
|
- **完成日期**: 2026-03-23
|
||||||
- **描述**: 已调整go打包脚本中taos依赖库的获取位置,并完成验证
|
- **描述**: 已调整go打包脚本中taos依赖库的获取位置,并完成验证
|
||||||
|
|
||||||
### 16. [智能巡视-7950] 超期和终止任务增加结束时间(3个版本) <Badge text="已完成" type="tip" />
|
|
||||||
|
|
||||||
- **创建日期**: 2026-03-26
|
|
||||||
- **描述**: 超期任务和终止任务都需要增加任务结束时间,且3个版本均需同步
|
|
||||||
- **完成情况**: 已完成,3个版本已同步
|
|
||||||
|
|
||||||
### 17. [智能巡视-7950] getLatestHisTask接口查询方案调整 <Badge text="已完成" type="tip" />
|
### 17. [智能巡视-7950] getLatestHisTask接口查询方案调整 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
- **创建日期**: 2026-03-26
|
- **创建日期**: 2026-03-26
|
||||||
@@ -144,6 +117,15 @@ title: 3月待办(2026-03)
|
|||||||
- **必填项**: 设备名称、设备编码、投运时间、设备IP、通信协议、通信端口
|
- **必填项**: 设备名称、设备编码、投运时间、设备IP、通信协议、通信端口
|
||||||
- **完成情况**: 已完成
|
- **完成情况**: 已完成
|
||||||
|
|
||||||
|
### 19. [智慧场站-7050] 删除点位时同步清理关联阈值告警 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
|
- **创建日期**: 2026-03-27
|
||||||
|
- **描述**: 删除点位时排查是否存在关联的阈值告警,如存在则需要同步删除
|
||||||
|
- **完成情况**: 已完成,已梳理点位与阈值告警关联关系,实现删除点位时同步清理关联阈值告警功能
|
||||||
|
- **需求截图**:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
### 20. [智慧场站-7050] 录像回放权限问题修复 <Badge text="已完成" type="tip" />
|
### 20. [智慧场站-7050] 录像回放权限问题修复 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
- **创建日期**: 2026-03-27
|
- **创建日期**: 2026-03-27
|
||||||
@@ -153,6 +135,29 @@ title: 3月待办(2026-03)
|
|||||||
- **完成情况**: 已完成
|
- **完成情况**: 已完成
|
||||||
- **备注**: 新站默认权限包含录像回放,老站需要手动配置下录像权限
|
- **备注**: 新站默认权限包含录像回放,老站需要手动配置下录像权限
|
||||||
|
|
||||||
|
### 16. [智能巡视-7950] 超期和终止任务增加结束时间(3个版本) <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
|
- **创建日期**: 2026-03-26
|
||||||
|
- **描述**: 超期任务和终止任务都需要增加任务结束时间,且3个版本均需同步
|
||||||
|
- **完成情况**: 已完成,3个版本数据库表结构和业务逻辑已同步更新
|
||||||
|
|
||||||
|
### 21. [智慧场站-7050] 反向联动菜单放出与联动开关灯实现 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
|
- **创建日期**: 2026-03-27
|
||||||
|
- **描述**: 反向联动菜单放出 + 反向联动实现联动开灯关灯
|
||||||
|
- **完成情况**: 已完成,反向联动触发条件、开关灯联动逻辑与菜单权限配置已实现并验证
|
||||||
|
|
||||||
|
### 8. [智慧场站-7050] 完成贵州大唐机器人告警复检需求开发 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
|
- **描述**: 7050项目机器人告警复检需求开发已完成,等待测试
|
||||||
|
- **完成情况**: 已完成联调与回归测试,告警复检流程和边界场景验证通过
|
||||||
|
|
||||||
|
### 22. [全部版本] 优化服务调用失败异常反馈 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
|
- **创建日期**: 2026-03-30
|
||||||
|
- **描述**: 优化服务调用失败时的异常反馈机制,在日志中附带详细的错误信息,便于快速定位问题
|
||||||
|
- **完成情况**: 已完成全版本优化,日志已在ServiceClientPool、ClientManager、BusClientInterceptor等关键类中增强了异常信息,包含服务名、方法名、参数、错误原因、调用链路等,可快速定位问题
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
129
src/work/todo/2026-04.md
Normal file
129
src/work/todo/2026-04.md
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
---
|
||||||
|
icon: fa6-solid:list-check
|
||||||
|
date: 2026-04-01
|
||||||
|
pageClass: todo-page
|
||||||
|
category:
|
||||||
|
- 待办
|
||||||
|
tag:
|
||||||
|
- 任务清单
|
||||||
|
title: 4月待办(2026-04)
|
||||||
|
---
|
||||||
|
|
||||||
|
4月待办事项记录
|
||||||
|
<!-- more -->
|
||||||
|
|
||||||
|
# 待办清单(2026-04)
|
||||||
|
|
||||||
|
> 最后更新: 2026-04-02
|
||||||
|
> 统计: 已完成 2 项、未开始 2 项
|
||||||
|
|
||||||
|
## 清单总览
|
||||||
|
|
||||||
|
- 当前优先: 2(未开始)
|
||||||
|
|
||||||
|
## 状态说明
|
||||||
|
|
||||||
|
<Badge text="已完成" type="tip" /> <Badge text="已提交" type="tip" /> <Badge text="待测试" type="info" /> <Badge text="待提交" type="warning" /> <Badge text="部分完成" type="note" /> <Badge text="待确认" type="warning" /> <Badge text="未开始" type="danger" /> <Badge text="已取消" type="warning" />
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 当前优先
|
||||||
|
|
||||||
|
### 1. 巡视报告配置异常需要修复 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
|
- **描述**: 巡视报告配置异常,在这里设置筛选搜索修改设置之后,同一主设备下其它点的设置就变成空的了
|
||||||
|
- **错误日志**:
|
||||||
|
```
|
||||||
|
2026-03-31 19:16:52.944 [TThreadPoolServer WorkerProcess-6] ERROR com.sunri.model.pipeline.DictatePipeline - DictatePipeline start, 处理异常 {}
|
||||||
|
java.lang.IllegalStateException: Duplicate key PatrolReportDevicePointRecord(id=37327, mainDeviceId=2198, devicePointId=104250, reportSn=1, standardValue=正常)
|
||||||
|
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
|
||||||
|
at java.util.HashMap.merge(HashMap.java:1254)
|
||||||
|
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
|
||||||
|
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
|
||||||
|
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
|
||||||
|
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
|
||||||
|
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
|
||||||
|
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
|
||||||
|
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
|
||||||
|
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
|
||||||
|
at com.sunri.model.supersysmodel.pipeline.PatrolReportDevicePointRecordPipeLine.handle(PatrolReportDevicePointRecordPipeLine.java:44)
|
||||||
|
at com.sunri.model.supersysmodel.pipeline.ObjectVerifyPipeline.proceed(ObjectVerifyPipeline.java:35)
|
||||||
|
at com.sunri.model.supersysmodel.pipeline.PatrolReportDevicePointRecordPipeLine.proceed(PatrolReportDevicePointRecordPipeLine.java:19)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:23)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.skip(DictatePipeline.java:43)
|
||||||
|
at com.sunri.model.pipeline.DictatePipeline.start(DictatePipeline.java:32)
|
||||||
|
at com.sunri.model.supersysmodel.pipeline.DevicePointManager.pointImport(DevicePointManager.java:62)
|
||||||
|
at com.sunri.model.supersysmodel.SuperSysModelConfiguration.readExcelBytes(SuperSysModelConfiguration.java:2419)
|
||||||
|
at com.sunri.model.supersysmodel.SuperSysModelConfiguration.devicePointImport(SuperSysModelConfiguration.java:2495)
|
||||||
|
at com.sunri.service.impl.supersysmodel.SuperSysModelServiceImpl.devicePointImport(SuperSysModelServiceImpl.java:172)
|
||||||
|
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||||
|
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
|
||||||
|
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||||
|
at java.lang.reflect.Method.invoke(Method.java:498)
|
||||||
|
at com.sunri.server.mapper.handler.ByteArrayMethodHandler.proceed(ByteArrayMethodHandler.java:108)
|
||||||
|
at com.sunri.pipeline.Pipeline.start(Pipeline.java:26)
|
||||||
|
at com.sunri.pipeline.Pipeline.skip(Pipeline.java:43)
|
||||||
|
at com.sunri.pipeline.Pipeline.start(Pipeline.java:32)
|
||||||
|
at com.sunri.server.dispatch.Func.proceed(Func.java:152)
|
||||||
|
at com.sunri.server.service.impl.RequestServiceImpl.doExec(RequestServiceImpl.java:43)
|
||||||
|
at com.sunri.server.message.handler.RequestHandler.proceed(RequestHandler.java:30)
|
||||||
|
at com.sunri.pipeline.Pipeline.start(Pipeline.java:26)
|
||||||
|
at com.sunri.pipeline.Pipeline.skip(Pipeline.java:43)
|
||||||
|
at com.sunri.pipeline.Pipeline.start(Pipeline.java:32)
|
||||||
|
at com.sunri.server.processor.ServerProcessor.doExec(ServerProcessor.java:36)
|
||||||
|
at com.sunri.server.service.RequestService$Processor$doExec.getResult(RequestService.java:155)
|
||||||
|
at com.sunri.server.service.RequestService$Processor$doExec.getResult(RequestService.java:135)
|
||||||
|
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38)
|
||||||
|
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38)
|
||||||
|
at com.sunri.server.processor.ServerProcessorFactory$RequestServiceProcessor.process(ServerProcessorFactory.java:74)
|
||||||
|
at org.apache.thrift.TMultiplexedProcessor.process(TMultiplexedProcessor.java:138)
|
||||||
|
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:250)
|
||||||
|
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
|
||||||
|
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
|
||||||
|
at java.lang.Thread.run(Thread.java:748)
|
||||||
|
2026-03-31 19:16:52.945 [TThreadPoolServer WorkerProcess-6] INFO com.sunri.model.pipeline.DictatePipeline - [流水线完成] PatrolReportDevicePointRecordPipeLine 处理耗时: 34ms
|
||||||
|
```
|
||||||
|
- **完成方案**:
|
||||||
|
1. 后端:将 PatrolReportDevicePointRecordPipeLine 的去重与处理维度统一改为 devicePointId 全局唯一(跨主设备同点位仅保留最大 id 并删除其余),再基于保留记录更新/插入以彻底避免 Duplicate key。
|
||||||
|
2. 前端:修复筛选搜索修改设置后同主设备下其他点位配置为空的显示问题
|
||||||
|
- **完成情况**: 前后端均已修复并验证,同一主设备下多点位配置保存和显示正常
|
||||||
|
|
||||||
|
### 2. 与姬工讨论上海导出五通报表的问题 <Badge text="未开始" type="danger" />
|
||||||
|
|
||||||
|
- **描述**: 姬工安排讨论上海项目导出五通报表相关需求与问题
|
||||||
|
- **下一步**:
|
||||||
|
1. 提前梳理现有报表导出功能逻辑
|
||||||
|
2. 预约时间与姬工同步讨论细节
|
||||||
|
|
||||||
|
### 3. 修复现场linx80 excel打开失败问题 <Badge text="已完成" type="tip" />
|
||||||
|
|
||||||
|
- **描述**: 现场linx80设备导出的Excel文件打开失败
|
||||||
|
- **完成情况**: 经排查为现场系统软件版本过低导致,无需修复,建议升级系统软件版本即可解决
|
||||||
|
|
||||||
|
### 4. 告警阈值xml导入限制同一个点位统一各类型只能有一条记录 <Badge text="未开始" type="danger" />
|
||||||
|
|
||||||
|
- **描述**: 韩磊要求新增告警阈值xml导入限制,同一个点位各类型阈值只能有一条记录
|
||||||
|
- **下一步**:
|
||||||
|
1. 梳理现有告警阈值xml导入逻辑
|
||||||
|
2. 新增同点位同类型阈值重复校验
|
||||||
|
3. 验证导入功能正常且限制生效
|
||||||
@@ -11,4 +11,5 @@ title: 待办事项
|
|||||||
|
|
||||||
## 月度清单
|
## 月度清单
|
||||||
|
|
||||||
|
- [4月待办(2026-04)](./2026-04.md)
|
||||||
- [3月待办(2026-03)](./2026-03.md)
|
- [3月待办(2026-03)](./2026-03.md)
|
||||||
|
|||||||
Reference in New Issue
Block a user