-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path18.html
More file actions
276 lines (276 loc) · 28 KB
/
Copy path18.html
File metadata and controls
276 lines (276 loc) · 28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="CodeClub - OpenCode 权限配置" />
<meta name="author" content="Jackson" />
<title>OpenCode 权限配置 - CodeClub</title>
<link rel="icon" type="image/x-icon" href="../../img/logo.png" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
crossorigin="anonymous"
referrerpolicy="no-referrer"
/>
<link rel="stylesheet" href="../../css/main.css" />
<link rel="stylesheet" href="../../css/dark-mode.css" />
<link rel="stylesheet" href="../../css/mobile-optimizations.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/12.0.0/marked.min.js"></script>
<style>
.tutorial-page {
max-width: 1200px;
margin: 70px auto 40px;
padding: 0 20px;
display: flex;
gap: 20px;
}
.tutorial-sidebar {
width: 240px;
flex-shrink: 0;
position: sticky;
top: 70px;
max-height: calc(100vh - 90px);
overflow-y: auto;
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-sidebar h3 {
font-size: 15px;
margin: 0 0 12px;
color: var(--text-primary, #1a1a2e);
padding-bottom: 8px;
border-bottom: 2px solid var(--primary, #3b82f6);
}
.tutorial-sidebar a {
display: block;
padding: 5px 8px;
color: var(--text-secondary, #666);
text-decoration: none;
font-size: 13px;
border-radius: 4px;
line-height: 1.4;
}
.tutorial-sidebar a:hover {
background: var(--primary, #3b82f6);
color: #fff;
}
.tutorial-sidebar a.active {
background: var(--primary, #3b82f6);
color: #fff;
font-weight: 600;
}
.tutorial-main {
flex: 1;
min-width: 0;
}
.tutorial-article {
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 32px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-article h1 {
font-size: 26px;
margin-bottom: 16px;
color: var(--text-primary, #1a1a2e);
border-bottom: 2px solid var(--primary, #3b82f6);
padding-bottom: 12px;
}
.markdown-body {
font-size: 15px;
line-height: 1.8;
color: var(--text-secondary, #333);
}
.markdown-body h1 {
font-size: 24px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 8px;
}
.markdown-body h2 {
font-size: 20px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 6px;
}
.markdown-body h3 {
font-size: 17px;
}
.markdown-body pre {
background: #1e1e2e;
color: #cdd6f4;
padding: 16px;
border-radius: 8px;
overflow-x: auto;
}
.markdown-body code {
font-family: 'Fira Code', 'Cascadia Code', monospace;
font-size: 14px;
}
.markdown-body p code {
background: #f1f5f9;
padding: 2px 6px;
border-radius: 4px;
color: #e83e8c;
}
.markdown-body blockquote {
border-left: 4px solid var(--primary, #3b82f6);
padding: 12px 20px;
margin: 16px 0;
background: #f8fafc;
border-radius: 0 8px 8px 0;
}
.markdown-body img {
max-width: 100%;
border-radius: 8px;
}
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 16px 0;
}
.markdown-body table th,
.markdown-body table td {
border: 1px solid var(--border, #e5e7eb);
padding: 8px 12px;
text-align: left;
}
.markdown-body table th {
background: var(--bg-primary, #f8fafc);
font-weight: 600;
}
.markdown-body table tr:nth-child(2n) {
background: var(--bg-primary, #f8fafc);
}
.markdown-body ul,
.markdown-body ol {
padding-left: 24px;
margin: 12px 0;
}
.markdown-body li {
margin: 4px 0;
}
.markdown-body hr {
border: none;
border-top: 1px solid var(--border, #e5e7eb);
margin: 24px 0;
}
.markdown-body a {
color: var(--primary, #3b82f6);
text-decoration: none;
}
.markdown-body a:hover {
text-decoration: underline;
}
.page-navigation {
display: flex;
justify-content: space-between;
margin-top: 24px;
padding-top: 16px;
border-top: 1px solid var(--border, #e5e7eb);
}
.page-nav-link {
color: var(--primary, #3b82f6);
text-decoration: none;
font-weight: 500;
font-size: 14px;
}
.page-nav-link:hover {
text-decoration: underline;
}
.source-link {
margin-top: 16px;
font-size: 13px;
color: var(--text-secondary, #999);
}
.source-link a {
color: var(--primary, #3b82f6);
}
@media (max-width: 768px) {
.tutorial-page {
flex-direction: column;
}
.tutorial-sidebar {
width: 100%;
position: static;
max-height: 200px;
}
}
</style>
</head>
<body>
<nav class="navbar">
<div class="navbar-container">
<a class="navbar-brand" href="../../index.html">
<img src="../../img/logo.png" alt="CodeClub" width="32" height="32" />
<span>CodeClub</span>
</a>
<button class="mobile-menu-toggle" aria-label="切换导航菜单"><span></span><span></span><span></span></button>
<ul class="navbar-nav">
<li><a class="nav-link" href="../../index.html">首页</a></li>
<li><a class="nav-link" href="../../nav.html">网址导航</a></li>
<li><a class="nav-link" href="../../blog/">博客</a></li>
<li><a class="nav-link" href="../../wiki/index.html" target="_blank">WiKi</a></li>
<li><a class="nav-link active" href="../index.html">教程</a></li>
<li><a class="nav-link" href="../../book.html">图书</a></li>
<li><a class="nav-link" href="../../contact.html">联系我</a></li>
<li><a class="nav-link" href="../../about.html">关于我</a></li>
</ul>
</div>
</nav>
<div class="tutorial-page">
<div class="tutorial-sidebar">
<h3>📖 OpenCode</h3>
<a href="0.html">OpenCode 教程</a>
<a href="1.html">OpenCode 简介</a>
<a href="2.html">OpenCode 安装</a>
<a href="3.html">OpenCode 配置</a>
<a href="4.html">OpenCode 第一次使用</a>
<a href="5.html">OpenCode VSCode</a>
<a href="6.html">OpenCode 终端界面</a>
<a href="7.html">OpenCode CLI 使用</a>
<a href="8.html">OpenCode Web 使用</a>
<a href="9.html">OpenCode GitHub</a>
<a href="10.html">OpenCode GitLab</a>
<a href="11.html">OpenCode 工具</a>
<a href="12.html">OpenCode 规则</a>
<a href="13.html">OpenCode 代理</a>
<a href="14.html">OpenCode 主题</a>
<a href="15.html">OpenCode 快捷键</a>
<a href="16.html">OpenCode 自定义命令</a>
<a href="17.html">OpenCode 格式化工具</a>
<a href="18.html" class="active">OpenCode 权限配置</a>
<a href="19.html">OpenCode LSP 服务器配置</a>
<a href="20.html">OpenCode MCP 服务器配置</a>
<a href="21.html">OpenCode Skills</a>
<a href="22.html">OpenCode 自定义工具</a>
</div>
<div class="tutorial-main">
<div class="tutorial-article">
<div class="markdown-body" id="md-content"></div>
<div class="page-navigation">
<a href="17.html" class="page-nav-link">← OpenCode 格式化工具</a>
<a href="19.html" class="page-nav-link">OpenCode LSP 服务器配置 →</a>
</div>
<div class="source-link">原文来源:<a href="https://www.runoob.com" target="_blank">菜鸟教程</a></div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer-content"><p>© 2024 CodeClub. All rights reserved.</p></div>
</footer>
<script src="../../js/dark-mode.js"></script>
<script src="../../js/mobile-menu.js"></script>
<script>
const md = `# OpenCode 权限配置\n\n\nOpenCode 的权限系统用于控制哪些操作可以自动运行、哪些需要你手动审批、哪些会被直接阻止。合理配置权限,既能让 AI 高效完成任务,又能防止误操作破坏代码或泄露敏感文件。\n\n\n\n从 v1.1.1 开始,旧版 \`tools\` 布尔配置已被弃用,并已合并到 \`permission\` 中。旧版配置仍然支持,以保持向后兼容,但建议迁移到新的 \`permission\` 写法。\n\n\n\n\n---\n\n\n## 三种权限动作\n\n\n每条权限规则最终会解析为以下三种动作之一:\n\n\n\n\n \n \n 动作\n 效果\n 适用场景\n \n \n \n \n \`"allow"\`\n 无需审批,直接自动运行\n 低风险、高频操作,如读取文件、运行测试\n \n \n \`"ask"\`\n 弹出审批提示,由你决定是否允许\n 有一定风险的操作,如写入文件、执行脚本\n \n \n \`"deny"\`\n 直接阻止,不会执行也不会提示\n 明确不允许的危险操作,如删除文件、推送代码\n \n \n\n\n\n---\n\n\n## 基础配置\n\n\n权限配置写在仓库根目录(或用户配置目录)下的 \`opencode.json\` 文件中,使用 \`permission\` 字段进行配置。\n\n\n\n\n### 1、全局设置所有权限\n\n\n最简单的写法:用一个字符串一次性设置所有操作的权限。适合快速开始或临时调试:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": "allow" // 所有操作都自动运行,不弹任何提示(适合本地开发、充分信任 AI 时使用)\n\n}\n\n\n\n\n### 2、按工具名称配置\n\n\n使用对象写法,可以对不同工具分别指定权限。\`"*"\` 是通配符,表示匹配所有操作,通常作为兜底默认值:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n "*": "ask", // 兜底规则:所有未单独配置的工具,默认都弹出提示\n\n "bash": "allow", // bash(执行 Shell 命令):直接允许,不提示\n\n "edit": "deny" // edit(修改文件):直接阻止\n\n }\n\n}\n\n\n\n\n---\n\n\n## 细粒度规则(对象语法)\n\n\n对于大多数权限,除了设置统一动作,还可以用**对象语法**根据工具的具体输入内容来应用不同规则。例如,对 \`bash\` 工具,可以区分哪些命令允许、哪些需要审批、哪些直接拒绝:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n "bash": {\n\n "*": "ask", // 兜底:所有 bash 命令默认需要审批\n\n "git *": "allow", // git 开头的命令(如 git status、git log)直接允许\n\n "npm *": "allow", // npm 开头的命令(如 npm install、npm run build)直接允许\n\n "grep *": "allow", // grep 搜索命令直接允许\n\n "rm *": "deny" // rm 删除命令直接阻止(防止误删文件)\n\n },\n\n "edit": {\n\n "*": "deny", // 默认阻止所有文件编辑\n\n "packages/web/src/content/docs/*.mdx": "allow" // 只允许编辑文档目录下的 .mdx 文件\n\n }\n\n }\n\n}\n\n\n\n**规则匹配顺序:最后匹配的规则优先。** 建议将通配的 \`"*"\` 规则放在最前面作为默认值,更具体的规则放在后面来覆盖它。这样越具体的规则优先级越高,逻辑清晰不易出错。\n\n\n\n\n---\n\n\n## 通配符规则\n\n\n权限模式支持简单的通配符匹配,规则如下:\n\n\n\n\n \n \n 通配符\n 含义\n 示例\n \n \n \n \n \`*\`\n 匹配零个或多个任意字符(不跨目录)\n \`git *\` 匹配 \`git status\`、\`git log --oneline\` 等\n \n \n \`**\`\n 匹配跨目录的任意路径\n \`~/projects/**\` 匹配 projects 下所有文件和子目录\n \n \n \`?\`\n 精确匹配一个任意字符\n \`file?.txt\` 匹配 \`file1.txt\`、\`fileA.txt\`\n \n \n 其他字符\n 按字面值精确匹配\n \`git status\` 只匹配 \`git status\`,不匹配带参数的变体\n \n \n\n\n**注意:**对带参数的命令一定要在末尾加 \`*\`。例如 \`"grep *"\` 能匹配 \`grep pattern file.txt\`,而单独写 \`"grep"\` 只匹配没有任何参数的裸命令,实际执行时几乎不会命中。\n\n\n\n\n### 主目录展开\n\n\n在模式开头可以使用 \`~\` 或 \`$HOME\` 来引用当前用户的主目录,OpenCode 会自动将其展开为完整路径:\n\n\n\n\n## 实例\n\n// 以下三种写法效果相同,都会展开为 /Users/username/projects/*(路径因系统而异)\n\n"~/projects/*"\n\n"$HOME/projects/*"\n\n"/Users/username/projects/*" // 直接写绝对路径也可以,但不推荐(不够通用)\n\n\n\n\n---\n\n\n## 外部目录权限(external_directory)\n\n\n默认情况下,OpenCode 只允许工具访问**启动时所在的工作目录**及其子目录。如果需要访问项目目录之外的路径(例如另一个项目或共享配置目录),必须通过 \`external_directory\` 显式授权。\n\n\n\n主目录展开(\`~/...\`)只是一种路径**书写简化方式**,并不会自动授权访问该路径。工作目录之外的路径仍然必须通过 \`external_directory\` 来允许。\n\n\n\n\n### 1、允许访问外部目录\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n "external_directory": {\n\n "~/projects/personal/**": "allow" // 允许访问 ~/projects/personal/ 下的所有文件和子目录\n\n // ** 匹配任意层级的子路径\n\n }\n\n }\n\n}\n\n\n\n\n### 2、允许读取但禁止编辑\n\n\n被 \`external_directory\` 授权的目录会继承当前工作空间的默认权限。由于 \`read\` 默认为 \`"allow"\`,授权后该目录下的文件可以被读取。如果需要进一步限制某项操作(例如允许读取但禁止编辑),可以叠加额外规则:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n "external_directory": {\n\n "~/projects/personal/**": "allow" // 第一步:授权访问该外部目录\n\n },\n\n "edit": {\n\n "~/projects/personal/**": "deny" // 第二步:在此目录上叠加规则,允许读取但禁止编辑\n\n }\n\n }\n\n}\n\n\n\n\n---\n\n\n## 所有可用权限项\n\n\nOpenCode 的权限以工具名称为键,涵盖文件操作、命令执行、网络访问等所有类型:\n\n\n\n\n \n \n 权限项\n 控制的操作\n 模式匹配内容\n 默认值\n \n \n \n \n \`read\`\n 读取文件内容\n 文件路径(如 \`src/index.js\`)\n \`allow\`(\`.env\` 文件除外)\n \n \n \`edit\`\n 所有文件修改,涵盖 edit、write、patch、multiedit\n 文件路径\n \`allow\`\n \n \n \`glob\`\n 文件通配查找(如查找所有 \`.ts\` 文件)\n 通配模式(如 \`**/*.ts\`)\n \`allow\`\n \n \n \`grep\`\n 在文件内容中搜索文本\n 正则表达式模式\n \`allow\`\n \n \n \`list\`\n 列出目录中的文件\n 目录路径\n \`allow\`\n \n \n \`bash\`\n 运行 Shell 命令\n 解析后的完整命令(如 \`git status --porcelain\`)\n \`allow\`\n \n \n \`task\`\n 启动子代理\n 子代理类型名称\n \`allow\`\n \n \n \`skill\`\n 加载技能\n 技能名称\n \`allow\`\n \n \n \`lsp\`\n 运行 LSP 语言服务查询\n 当前不支持细粒度配置\n \`allow\`\n \n \n \`webfetch\`\n 获取网络 URL 内容\n 完整 URL(如 \`https://example.com/api\`)\n \`allow\`\n \n \n \`websearch\`\n 网页搜索\n 搜索查询字符串\n \`allow\`\n \n \n \`codesearch\`\n 代码搜索\n 搜索查询字符串\n \`allow\`\n \n \n \`external_directory\`\n 访问工作目录之外的路径\n 外部目录路径\n \`ask\`\n \n \n \`doom_loop\`\n 同一工具以相同输入重复调用 3 次时触发(防止 AI 卡死循环)\n —\n \`ask\`\n \n \n\n\n\n---\n\n\n## 默认权限说明\n\n\n如果你没有配置任何权限,OpenCode 会使用以下内置默认值:\n\n\n\n\n\n\n- 大多数工具权限默认为 \`"allow"\`,即自动运行不提示\n\n- \`doom_loop\` 和 \`external_directory\` 默认为 \`"ask"\`,需要手动审批\n\n- \`read\` 默认允许读取所有文件,但对 \`.env\` 相关文件有内置保护:\n\n\n\n\n## 实例\n\n// OpenCode 内置的 read 默认规则(无需手动配置,仅供参考)\n\n{\n\n "permission": {\n\n "read": {\n\n "*": "allow", // 默认允许读取所有文件\n\n "*.env": "deny", // 阻止读取 .env 文件(防止泄露数据库密码、API 密钥等)\n\n "*.env.*": "deny", // 阻止读取 .env.local、.env.production 等变体\n\n "*.env.example": "allow" // 允许读取 .env.example(示例文件,不含真实密钥)\n\n }\n\n }\n\n}\n\n\n\n\n---\n\n\n## 审批提示的三个选项\n\n\n当某个操作的权限为 \`"ask"\` 时,OpenCode 会弹出审批提示,提供以下三种选择:\n\n\n\n\n \n \n 选项\n 效果\n 适用场景\n \n \n \n \n **once(仅此一次)**\n 仅批准本次请求,下次相同操作仍会弹出提示\n 临时允许某个操作,不想永久放开\n \n \n **always(始终允许)**\n 将此操作的匹配模式加入白名单,当前会话剩余时间内不再提示\n 确认某类操作安全,希望本次会话中自动通过\n \n \n **reject(拒绝)**\n 拒绝本次请求,操作不会执行\n 发现操作有风险,明确不希望执行\n \n \n\n\n选择 **always** 后,OpenCode 会由工具自动提供建议的白名单模式(例如,批准 \`git status\` 后通常会将 \`git status*\` 加入白名单)。**白名单仅在当前会话中有效,重启 OpenCode 后会重置。**\n\n\n\n\n---\n\n\n## 为代理单独配置权限\n\n\n如果你的工作流中使用了多个代理(agent),可以为每个代理单独覆盖权限配置。代理权限会与全局配置合并,且**代理规则的优先级高于全局规则**。\n\n\n\n\n### 1、在 opencode.json 中配置代理权限\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n // 全局权限:git 操作允许,但禁止 commit 和 push\n\n "bash": {\n\n "*": "ask",\n\n "git *": "allow",\n\n "git commit *": "deny",\n\n "git push *": "deny",\n\n "grep *": "allow"\n\n }\n\n },\n\n "agent": {\n\n "build": { // 名为 build 的代理\n\n "permission": {\n\n "bash": {\n\n "*": "ask",\n\n "git *": "allow",\n\n "git commit *": "ask", // 覆盖全局:build 代理允许 commit,但需要审批\n\n "git push *": "deny", // 继承全局:依然禁止 push\n\n "grep *": "allow"\n\n }\n\n }\n\n }\n\n }\n\n}\n\n\n\n\n### 2、在 Markdown 文件中配置代理权限\n\n\n代理也可以通过 Markdown 文件进行配置,权限写在文件顶部的 YAML Front Matter 中(\`---\` 之间的部分):\n\n\n\n\n## 实例\n\n# 文件路径:~/.config/opencode/agents/review.md\n\n---\n\ndescription: 代码审查代理(只分析代码,不做任何修改)\n\nmode: subagent\n\npermission:\n\n edit: deny # 禁止所有文件编辑\n\n bash: ask # bash 命令需要审批\n\n webfetch: deny # 禁止访问外部 URL\n\n---\n\nOnly analyze code and suggest changes.\n\n# 以下是代理的系统提示词,描述该代理的职责和行为规范\n\n\n\n\n---\n\n\n## 实用配置示例\n\n\n\n### 示例一:保守模式(所有操作都需审批)\n\n\n适合初次接触 OpenCode 或在重要项目上工作时使用,所有操作都需要手动确认:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n "*": "ask" // 所有工具的所有操作都弹出审批提示\n\n }\n\n}\n\n\n\n\n### 示例二:开发常用配置(读操作放开,写操作审批)\n\n\n适合日常开发:允许 AI 自由读取和搜索代码,但修改文件和执行命令时需要确认:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n "*": "ask", // 兜底:未单独配置的工具默认需要审批\n\n "read": "allow", // 读取文件:直接允许\n\n "glob": "allow", // 文件通配查找:直接允许\n\n "grep": "allow", // 内容搜索:直接允许\n\n "list": "allow", // 列出目录:直接允许\n\n "bash": {\n\n "*": "ask", // bash 命令默认需要审批\n\n "git status *": "allow", // 查看 git 状态:允许\n\n "git log *": "allow", // 查看 git 日志:允许\n\n "git diff *": "allow", // 查看 git 差异:允许\n\n "npm run *": "allow", // 运行 npm 脚本:允许\n\n "npm test *": "allow", // 运行测试:允许\n\n "rm *": "deny" // 删除文件:直接阻止\n\n }\n\n }\n\n}\n\n\n\n\n### 示例三:允许访问多个项目目录\n\n\n当 AI 需要跨多个项目目录工作时,授权外部目录访问权限:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "permission": {\n\n "external_directory": {\n\n "~/projects/personal/**": "allow", // 允许访问个人项目目录\n\n "~/projects/work/**": "allow", // 允许访问工作项目目录\n\n "~/dotfiles/**": "allow" // 允许访问配置文件目录\n\n },\n\n "edit": {\n\n "~/dotfiles/**": "deny" // 即使允许访问 dotfiles,也禁止编辑(只读)\n\n }\n\n }\n\n}\n\n \n \n \n \n \n\n \n \n [ OpenCode LSP 服务器配置](http://www.runoob.com/opencode/opencode-lsp.html)\n \n\n \n \n \n \n \n\n\n\n\n \n \n \n### 点我分享笔记\n\n \n \n \n \n \n \n [取消](https://www.runoob.comjavascript:;)\n\n\n \n \n \n \n \n \n\n\n 分享笔记\n \n \n \n \n \n \n\n 昵称昵称 (必填)\n 邮箱邮箱 (必填)\n 引用地址引用地址\n \n\n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n 在线实例\n\n\n ·[HTML 实例](https://www.runoob.com/html/html-examples.html)\n\n\n ·[CSS 实例](https://www.runoob.com/css/css-examples.html)\n\n\n ·[JavaScript 实例](https://www.runoob.com/js/js-examples.html)\n\n\n ·[Ajax 实例](https://www.runoob.com/ajx/ajax-examples.html)\n\n\n ·[jQuery 实例](https://www.runoob.com/jquery/jquery-examples.html)\n\n\n ·[XML 实例](https://www.runoob.com/xml/xml-examples.html)\n\n\n ·[Java 实例](https://www.runoob.com/java/java-examples.html)\n\n\n\n\n\n 字符集&工具\n\n\n · [HTML 字符集设置](https://www.runoob.com/charsets/html-charsets.html)\n\n\n · [HTML ASCII 字符集](https://www.runoob.com/tags/html-ascii.html)\n\n\n · [JS 混淆/加密](https://www.jyshare.com/front-end/6939/)\n\n\n · [PNG/JPEG 图片压缩](https://www.jyshare.com/front-end/6232/)\n\n\n · [HTML 拾色器](https://www.runoob.com/tags/html-colorpicker.html)\n\n\n · [JSON 格式化工具](https://www.jyshare.com/front-end/53)\n\n\n · [随机数生成器](https://www.jyshare.com/front-end/6680/)\n\n\n\n\n 最新更新\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-custom-tools.html)\n\n\n ·\n [\n OpenCode Skills ](http://www.runoob.com/opencode/opencode-skills.html)\n\n\n ·\n [\n OpenCode MCP 服... ](http://www.runoob.com/opencode/opencode-mcp.html)\n\n\n ·\n [\n OpenCode LSP 服... ](http://www.runoob.com/opencode/opencode-lsp.html)\n\n\n ·\n [\n OpenCode 权限配置 ](http://www.runoob.com/opencode/opencode-permissions.html)\n\n\n ·\n [\n OpenCode 格式化... ](http://www.runoob.com/opencode/opencode-formatter.html)\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-commands.html)\n\n\n\n\n 站点信息\n\n\n ·\n [意见反馈](https://www.runoob.commailto:admin@runoob.com)\n\n\n ·\n [免责声明](https://www.runoob.com/disclaimer)\n\n\n ·\n [关于我们](https://www.runoob.com/aboutus)\n\n\n ·\n [文章归档](https://www.runoob.com/archives)\n\n\n\n\n\n\n\n **关注微信**\n\n\n\n \n\n\n\n\n\n\n Copyright © 2013-2026 **[菜鸟教程](https://www.runoob.com//www.runoob.com/)** \n **[runoob.com](https://www.runoob.com//www.runoob.com/)** All Rights Reserved. 备案号:[闽ICP备15012807号-1](https://beian.miit.gov.cn/)\n\n\n\n [ ](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n\n\n\n#### 微信关注\n\n `;
document.getElementById('md-content').innerHTML = marked.parse(md);
</script>
</body>
</html>