<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <title>Oikiou&#39;s Blog</title>
        <link>https://www.oikiou.top</link>
        <description>Blog</description>
        <language>zh-CN</language>
        <pubDate>Thu, 03 Jul 2025 20:42:16 +0800</pubDate>
        <lastBuildDate>Thu, 03 Jul 2025 20:42:16 +0800</lastBuildDate>
        <category>c++</category>
        <category>c/c++</category>
        <category>c</category>
        <category>ms-dos</category>
        <category>windows</category>
        <category>cmd</category>
        <category>pid</category>
        <category>micropython</category>
        <category>python</category>
        <category>embedded</category>
        <category>qt</category>
        <category>pyqt</category>
        <category>css</category>
        <category>html</category>
        <category>web</category>
        <category>js</category>
        <category>数据结构</category>
        <category>堆栈</category>
        <category>队列</category>
        <category>链表</category>
        <category>树</category>
        <category>二叉树</category>
        <category>正则表达式</category>
        <category>aes</category>
        <category>autosar</category>
        <category>cc2530</category>
        <category>zigbee</category>
        <category>hp</category>
        <category>chrome</category>
        <category>sscanf</category>
        <category>flash</category>
        <category>hex</category>
        <category>jpeg</category>
        <category>webp</category>
        <category>jpeg2000</category>
        <category>image</category>
        <category>ssl</category>
        <category>https</category>
        <category>license</category>
        <category>md5</category>
        <category>major</category>
        <category>markdown</category>
        <category>note</category>
        <category>osi</category>
        <category>RustDesk</category>
        <category>iap</category>
        <category>bootloader</category>
        <category>stm32</category>
        <category>tags</category>
        <category>label</category>
        <category>category</category>
        <category>typora</category>
        <category>usart</category>
        <category>rts</category>
        <category>cts</category>
        <category>dtr</category>
        <category>dsr</category>
        <category>ws2812</category>
        <category>spi</category>
        <category>dma</category>
        <category>makefile</category>
        <category>xip</category>
        <category>nor</category>
        <category>nand</category>
        <category>android</category>
        <category>mtp</category>
        <category>pc</category>
        <category>driver</category>
        <category>ip</category>
        <category>location</category>
        <category>api</category>
        <category>zip</category>
        <category>gzip</category>
        <category>bzip</category>
        <category>tar</category>
        <category>character encoding</category>
        <category>gb2312</category>
        <category>utf-8</category>
        <category>zsh</category>
        <category>shell</category>
        <category>linux</category>
        <category>words</category>
        <category>cortexm3</category>
        <category>DS_Store</category>
        <category>rtf</category>
        <category>后缀</category>
        <category>机智云</category>
        <category>kms</category>
        <category>office</category>
        <category>volume</category>
        <category>apk</category>
        <category>java</category>
        <category>蓝桥杯</category>
        <category>国赛</category>
        <category>ct117e</category>
        <category>超声波</category>
        <category>ct117e-ex</category>
        <category>github</category>
        <category>hosts</category>
        <category>audio</category>
        <category>video</category>
        <category>esp32</category>
        <category>idf</category>
        <category>usb</category>
        <category>cat_drive</category>
        <category>cad</category>
        <category>switch</category>
        <category>nintendo</category>
        <category>game</category>
        <category>hardware</category>
        <category>lenovo</category>
        <category>disk</category>
        <category>pve</category>
        <category>virtual</category>
        <category>摄影</category>
        <category>software</category>
        <category>dslogic</category>
        <category>逻辑分析仪</category>
        <category>pyhton</category>
        <category>decoder</category>
        <category>synology</category>
        <category>cmake</category>
        <category>docker</category>
        <category>dockerfile</category>
        <category>namespace</category>
        <category>cgroup</category>
        <category>dockerhub</category>
        <category>frp</category>
        <category>hyperv</category>
        <category>git</category>
        <category>j-link</category>
        <category>rtt</category>
        <category>serial</category>
        <category>debug</category>
        <category>jlink</category>
        <category>obsidian</category>
        <category>ps</category>
        <category>powershell</category>
        <category>rdpwrap</category>
        <category>rdp</category>
        <category>sourceinsigh</category>
        <category>si</category>
        <category>ide</category>
        <category>spacedesk</category>
        <category>投屏</category>
        <category>vscode</category>
        <category>j-tag</category>
        <category>commenttranslate</category>
        <category>wsl</category>
        <category>wordpress</category>
        <category>mysql</category>
        <category>nginx</category>
        <category>speedtest</category>
        <category>tools</category>
        <category>tmux</category>
        <category>unit</category>
        <category>m</category>
        <category>cm</category>
        <category>mm</category>
        <category>s</category>
        <category>us</category>
        <category>cortex-a7</category>
        <category>cortex-m3</category>
        <category>hexo</category>
        <category>jekyll</category>
        <category>fluid</category>
        <category>cusdis</category>
        <category>twikoo</category>
        <category>blog</category>
        <category>gravatar</category>
        <category>cravatar</category>
        <category>rtos</category>
        <category>rt-thread</category>
        <category>rtx</category>
        <category>keil</category>
        <category>raspberry</category>
        <category>wiringpi</category>
        <category>pwm</category>
        <category>ucos</category>
        <category>ap</category>
        <category>wifi</category>
        <category>bluetooth</category>
        <category>蓝牙</category>
        <category>v2ray</category>
        <category>linuxapp</category>
        <category>zlib</category>
        <category>minizip</category>
        <category>modbus</category>
        <category>curl</category>
        <category>libcurl</category>
        <category>alpha_mini</category>
        <category>正点原子</category>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2025/87426b16/</guid>
            <title>ESP32 Develop</title>
            <link>https://www.oikiou.top/2025/87426b16/</link>
            <category>embedded</category>
            <category>esp32</category>
            <category>idf</category>
            <pubDate>Thu, 03 Jul 2025 20:42:16 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;ESP32&#34;&gt;&lt;a href=&#34;#ESP32&#34; class=&#34;headerlink&#34; title=&#34;ESP32&#34;&gt;&lt;/a&gt;ESP32&lt;/h1&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;idf.py set-target esp32c3&lt;br&gt;&lt;br&gt;idf.py menuconfig&lt;br&gt;&lt;br&gt;idf.py build&lt;br&gt;&lt;br&gt;idf.py -p COM12 flash moniter&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;





&lt;h1 id=&#34;IDF&#34;&gt;&lt;a href=&#34;#IDF&#34; class=&#34;headerlink&#34; title=&#34;IDF&#34;&gt;&lt;/a&gt;IDF&lt;/h1&gt;&lt;h2 id=&#34;组件管理器-The-ESP-Component-Registry&#34;&gt;&lt;a href=&#34;#组件管理器-The-ESP-Component-Registry&#34; class=&#34;headerlink&#34; title=&#34;组件管理器 The ESP Component Registry&#34;&gt;&lt;/a&gt;组件管理器 The ESP Component Registry&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://components.espressif.com/&#34;&gt;https://components.espressif.com/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;create-manifest&#34;&gt;&lt;a href=&#34;#create-manifest&#34; class=&#34;headerlink&#34; title=&#34;create-manifest&#34;&gt;&lt;/a&gt;create-manifest&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;idf.py create-manifest&lt;/code&gt; 为 main 组件创建清单文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;idf.py create-manifest --component=my_component&lt;/code&gt; 在 &lt;code&gt;components&lt;/code&gt; 目录下，为组件 &lt;strong&gt;my_component&lt;/strong&gt; 创建清单文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;idf.py create-manifest --path=&amp;quot;../../my_component&amp;quot;&lt;/code&gt; 在 &lt;code&gt;my_component&lt;/code&gt; 目录下，为组件 &lt;strong&gt;my_component&lt;/strong&gt; 创建清单文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在向项目的某个组件添加新的清单时，必须先运行 &lt;code&gt;idf.py reconfigure&lt;/code&gt;，手动重新配置项目。&lt;/p&gt;
&lt;h3 id=&#34;add-dependency&#34;&gt;&lt;a href=&#34;#add-dependency&#34; class=&#34;headerlink&#34; title=&#34;add-dependency&#34;&gt;&lt;/a&gt;add-dependency&lt;/h3&gt;&lt;p&gt;要为 ESP-IDF 项目中的组件（如 &lt;code&gt;my_component&lt;/code&gt;）添加依赖项，可以运行命令 &lt;code&gt;idf.py add-dependency DEPENDENCY&lt;/code&gt;。&lt;br&gt;&lt;code&gt;DEPENDENCY&lt;/code&gt; 参数代表一个由 IDF 组件管理器管理的额外组件，而 &lt;code&gt;my_component&lt;/code&gt; 也依赖于这个组件。&lt;code&gt;DEPENDENCY&lt;/code&gt; 参数的格式为 &lt;code&gt;namespace/name=1.0.0&lt;/code&gt;，namespace&amp;#x2F;name 代表组件名称，&amp;#x3D;1.0.0 是组件的版本范围，详情请参阅 &lt;a href=&#34;https://docs.espressif.com/projects/idf-component-manager/en/latest/reference/versioning.html&#34;&gt;版本文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;直接编辑&#34;&gt;&lt;a href=&#34;#直接编辑&#34; class=&#34;headerlink&#34; title=&#34;直接编辑&#34;&gt;&lt;/a&gt;直接编辑&lt;/h3&gt;&lt;p&gt;通过在文本编辑器直接编辑，你可以轻松定义清单文件 &lt;code&gt;idf_component.yml&lt;/code&gt; 中的依赖项。&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2025/60641507/</guid>
            <title>Docker Compose</title>
            <link>https://www.oikiou.top/2025/60641507/</link>
            <category>docker</category>
            <category>dockerfile</category>
            <category>namespace</category>
            <category>cgroup</category>
            <category>dockerhub</category>
            <pubDate>Tue, 13 May 2025 13:23:05 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;Docker-Compose&#34;&gt;&lt;a href=&#34;#Docker-Compose&#34; class=&#34;headerlink&#34; title=&#34;Docker Compose&#34;&gt;&lt;/a&gt;Docker Compose&lt;/h1&gt;&lt;h1 id=&#34;Docker-Compose是什么&#34;&gt;&lt;a href=&#34;#Docker-Compose是什么&#34; class=&#34;headerlink&#34; title=&#34;Docker Compose是什么&#34;&gt;&lt;/a&gt;Docker Compose是什么&lt;/h1&gt;&lt;p&gt;Docker Compose 是一个用于&lt;strong&gt;定义和运行多容器 Docker 应用&lt;/strong&gt;的工具。通过一个 YAML 格式的配置文件（&lt;code&gt;docker-compose.yml&lt;/code&gt;），您可以统一管理多个容器的配置（如服务依赖、网络、存储卷等），并通过简单命令一键启动或停止整个应用栈。&lt;/p&gt;
&lt;h4 id=&#34;核心功能：&#34;&gt;&lt;a href=&#34;#核心功能：&#34; class=&#34;headerlink&#34; title=&#34;核心功能：&#34;&gt;&lt;/a&gt;&lt;strong&gt;核心功能：&lt;/strong&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;单文件配置&lt;/strong&gt;：用 YAML 文件定义所有服务、网络、卷。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;一键启停&lt;/strong&gt;：通过一条命令启动或销毁整个应用环境。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;服务依赖管理&lt;/strong&gt;：自动处理容器启动顺序（如先启动数据库再启动 Web 服务）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;环境隔离&lt;/strong&gt;：支持开发、测试、生产环境的不同配置。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;h1 id=&#34;注意&#34;&gt;&lt;a href=&#34;#注意&#34; class=&#34;headerlink&#34; title=&#34;注意&#34;&gt;&lt;/a&gt;注意&lt;/h1&gt;&lt;p&gt;由于 Docker 官方已将 Compose 集成到 CLI 中，推荐使用 &lt;code&gt;docker compose&lt;/code&gt; 替代旧的 &lt;code&gt;docker-compose&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1 id=&#34;Docker-Compose-配置文件&#34;&gt;&lt;a href=&#34;#Docker-Compose-配置文件&#34; class=&#34;headerlink&#34; title=&#34;Docker Compose 配置文件&#34;&gt;&lt;/a&gt;Docker Compose 配置文件&lt;/h1&gt;&lt;h2 id=&#34;基础结构示例&#34;&gt;&lt;a href=&#34;#基础结构示例&#34; class=&#34;headerlink&#34; title=&#34;基础结构示例&#34;&gt;&lt;/a&gt;基础结构示例&lt;/h2&gt;&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs yaml&#34;&gt;&lt;span class=&#34;hljs-attr&#34;&gt;version:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;3.9&amp;quot;&lt;/span&gt;  &lt;span class=&#34;hljs-comment&#34;&gt;# 指定 Compose 版本（需与 Docker 引擎兼容）&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;services:&lt;/span&gt;        &lt;span class=&#34;hljs-comment&#34;&gt;# 定义所有服务容器&lt;/span&gt;&lt;br&gt;  &lt;span class=&#34;hljs-attr&#34;&gt;web:&lt;/span&gt;           &lt;span class=&#34;hljs-comment&#34;&gt;# 服务名称（自定义）&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;image:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;nginx:latest&lt;/span&gt;  &lt;span class=&#34;hljs-comment&#34;&gt;# 使用的镜像vim &lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;ports:&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-bullet&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;80:80&amp;quot;&lt;/span&gt;          &lt;span class=&#34;hljs-comment&#34;&gt;# 端口映射（宿主机:容器）&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;volumes:&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-bullet&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;./html:/usr/share/nginx/html&lt;/span&gt;  &lt;span class=&#34;hljs-comment&#34;&gt;# 挂载宿主机目录到容器&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;depends_on:&lt;/span&gt;          &lt;span class=&#34;hljs-comment&#34;&gt;# 依赖的服务&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-bullet&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;db&lt;/span&gt;&lt;br&gt;&lt;br&gt;  &lt;span class=&#34;hljs-attr&#34;&gt;db:&lt;/span&gt;                    &lt;span class=&#34;hljs-comment&#34;&gt;# 第二个服务（数据库）&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;image:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;mysql:8.0&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;environment:&lt;/span&gt;         &lt;span class=&#34;hljs-comment&#34;&gt;# 环境变量&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-attr&#34;&gt;MYSQL_ROOT_PASSWORD:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;example&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;volumes:&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-bullet&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;mysql_data:/var/lib/mysql&lt;/span&gt;  &lt;span class=&#34;hljs-comment&#34;&gt;# 使用命名卷持久化数据&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;volumes:&lt;/span&gt;                 &lt;span class=&#34;hljs-comment&#34;&gt;# 定义命名卷&lt;/span&gt;&lt;br&gt;  &lt;span class=&#34;hljs-attr&#34;&gt;mysql_data:&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h2 id=&#34;关键配置项说明&#34;&gt;&lt;a href=&#34;#关键配置项说明&#34; class=&#34;headerlink&#34; title=&#34;关键配置项说明&#34;&gt;&lt;/a&gt;关键配置项说明&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;code&gt;version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定 Compose 文件格式版本（常用 3.x）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义所有需要运行的容器服务，每个服务需配置镜像、端口、卷等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定容器使用的镜像（如 &lt;code&gt;nginx:latest&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ports&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;映射宿主机端口到容器端口（格式：&lt;code&gt;&amp;quot;宿主机端口:容器端口&amp;quot;&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;volumes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;挂载宿主机目录或命名卷到容器路径（如 &lt;code&gt;./data:/app/data&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;environment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设置容器内的环境变量（支持键值对或列表）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;depends_on&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义服务启动顺序（例如 Web 服务依赖数据库服务先启动）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;networks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;自定义容器网络（默认所有服务加入同一网络，可通过服务名互相通信）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id=&#34;常用命令&#34;&gt;&lt;a href=&#34;#常用命令&#34; class=&#34;headerlink&#34; title=&#34;常用命令&#34;&gt;&lt;/a&gt;常用命令&lt;/h1&gt;&lt;h3 id=&#34;1-启动服务&#34;&gt;&lt;a href=&#34;#1-启动服务&#34; class=&#34;headerlink&#34; title=&#34;1. 启动服务&#34;&gt;&lt;/a&gt;1. 启动服务&lt;/h3&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 前台启动（调试用，Ctrl+C 停止）&lt;/span&gt;&lt;br&gt;docker-compose up&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 后台启动（-d 表示 detached 模式）&lt;/span&gt;&lt;br&gt;docker-compose up -d&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 启动时强制重新构建镜像（如果 Dockerfile 有更新）&lt;/span&gt;&lt;br&gt;docker-compose up -d --build&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;2-停止并清理&#34;&gt;&lt;a href=&#34;#2-停止并清理&#34; class=&#34;headerlink&#34; title=&#34;2. 停止并清理&#34;&gt;&lt;/a&gt;2. 停止并清理&lt;/h3&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 停止并删除容器、网络（保留卷和数据）&lt;/span&gt;&lt;br&gt;docker-compose down&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 彻底清理（删除容器、网络、镜像、未使用的卷）&lt;/span&gt;&lt;br&gt;docker-compose down --rmi all --volumes&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;重启&#34;&gt;&lt;a href=&#34;#重启&#34; class=&#34;headerlink&#34; title=&#34;重启&#34;&gt;&lt;/a&gt;重启&lt;/h3&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;docker compose restart&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;3-查看服务状态&#34;&gt;&lt;a href=&#34;#3-查看服务状态&#34; class=&#34;headerlink&#34; title=&#34;3. 查看服务状态&#34;&gt;&lt;/a&gt;3. 查看服务状态&lt;/h3&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 查看运行中的服务&lt;/span&gt;&lt;br&gt;docker-compose ps&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 查看服务日志（-f 持续跟踪日志）&lt;/span&gt;&lt;br&gt;docker-compose logs -f web&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;4-管理单个服务&#34;&gt;&lt;a href=&#34;#4-管理单个服务&#34; class=&#34;headerlink&#34; title=&#34;4. 管理单个服务&#34;&gt;&lt;/a&gt;4. 管理单个服务&lt;/h3&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 启动/停止/重启指定服务&lt;/span&gt;&lt;br&gt;docker-compose start web&lt;br&gt;docker-compose stop web&lt;br&gt;docker-compose restart web&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 进入容器执行命令（例如启动 Bash）&lt;/span&gt;&lt;br&gt;docker-compose &lt;span class=&#34;hljs-built_in&#34;&gt;exec&lt;/span&gt; web bash&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;5-扩展服务实例&#34;&gt;&lt;a href=&#34;#5-扩展服务实例&#34; class=&#34;headerlink&#34; title=&#34;5. 扩展服务实例&#34;&gt;&lt;/a&gt;5. 扩展服务实例&lt;/h3&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 启动多个 Web 服务实例（需服务支持水平扩展）&lt;/span&gt;&lt;br&gt;docker-compose up -d --scale web=3&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;hr&gt;
&lt;h1 id=&#34;高级技巧&#34;&gt;&lt;a href=&#34;#高级技巧&#34; class=&#34;headerlink&#34; title=&#34;高级技巧&#34;&gt;&lt;/a&gt;高级技巧&lt;/h1&gt;&lt;h3 id=&#34;1-多环境配置&#34;&gt;&lt;a href=&#34;#1-多环境配置&#34; class=&#34;headerlink&#34; title=&#34;1. 多环境配置&#34;&gt;&lt;/a&gt;1. 多环境配置&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;使用多个 Compose 文件（如 &lt;code&gt;docker-compose.prod.yml&lt;/code&gt;）覆盖默认配置：&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-变量替换&#34;&gt;&lt;a href=&#34;#2-变量替换&#34; class=&#34;headerlink&#34; title=&#34;2. 变量替换&#34;&gt;&lt;/a&gt;2. 变量替换&lt;/h3&gt;&lt;p&gt;在 Compose 文件中使用环境变量：&lt;/p&gt;
&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs yaml&#34;&gt;&lt;span class=&#34;hljs-attr&#34;&gt;services:&lt;/span&gt;&lt;br&gt;  &lt;span class=&#34;hljs-attr&#34;&gt;web:&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;image:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;nginx:$&amp;#123;NGINX_VERSION:-latest&amp;#125;&lt;/span&gt;  &lt;span class=&#34;hljs-comment&#34;&gt;# 默认使用 latest，可覆盖&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;3-健康检查&#34;&gt;&lt;a href=&#34;#3-健康检查&#34; class=&#34;headerlink&#34; title=&#34;3. 健康检查&#34;&gt;&lt;/a&gt;3. 健康检查&lt;/h3&gt;&lt;p&gt;定义服务健康检查策略：&lt;/p&gt;
&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs yaml&#34;&gt;&lt;span class=&#34;hljs-attr&#34;&gt;services:&lt;/span&gt;&lt;br&gt;  &lt;span class=&#34;hljs-attr&#34;&gt;db:&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;image:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;mysql:8.0&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-attr&#34;&gt;healthcheck:&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-attr&#34;&gt;test:&lt;/span&gt; [&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;CMD&amp;quot;&lt;/span&gt;, &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;mysqladmin&amp;quot;&lt;/span&gt;, &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;ping&amp;quot;&lt;/span&gt;, &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;-h&amp;quot;&lt;/span&gt;, &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt;]&lt;br&gt;      &lt;span class=&#34;hljs-attr&#34;&gt;interval:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;10s&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-attr&#34;&gt;timeout:&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;5s&lt;/span&gt;&lt;br&gt;      &lt;span class=&#34;hljs-attr&#34;&gt;retries:&lt;/span&gt; &lt;span class=&#34;hljs-number&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;hr&gt;
&lt;h1 id=&#34;Note&#34;&gt;&lt;a href=&#34;#Note&#34; class=&#34;headerlink&#34; title=&#34;Note&#34;&gt;&lt;/a&gt;Note&lt;/h1&gt;&lt;h3 id=&#34;更新容器&#34;&gt;&lt;a href=&#34;#更新容器&#34; class=&#34;headerlink&#34; title=&#34;更新容器&#34;&gt;&lt;/a&gt;更新容器&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;修改 &lt;code&gt;docker-compose.yml&lt;/code&gt; 后，运行：&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;docker-compose up -d --build&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;数据持久化失败？&#34;&gt;&lt;a href=&#34;#数据持久化失败？&#34; class=&#34;headerlink&#34; title=&#34;数据持久化失败？&#34;&gt;&lt;/a&gt;数据持久化失败？&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;确保使用命名卷（如 &lt;code&gt;mysql_data:/var/lib/mysql&lt;/code&gt;）或正确挂载宿主机路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;服务间通信问题？&#34;&gt;&lt;a href=&#34;#服务间通信问题？&#34; class=&#34;headerlink&#34; title=&#34;服务间通信问题？&#34;&gt;&lt;/a&gt;服务间通信问题？&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;使用服务名（如 &lt;code&gt;db&lt;/code&gt;）代替 IP 地址，Compose 会自动解析服务名到容器 IP。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/9bf1668d/</guid>
            <title>一些优秀的开源项目</title>
            <link>https://www.oikiou.top/2024/9bf1668d/</link>
            <category>embedded</category>
            <pubDate>Thu, 01 Aug 2024 18:12:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;OS&#34;&gt;&lt;a href=&#34;#OS&#34; class=&#34;headerlink&#34; title=&#34;OS&#34;&gt;&lt;/a&gt;OS&lt;/h1&gt;&lt;h1 id=&#34;Net&#34;&gt;&lt;a href=&#34;#Net&#34; class=&#34;headerlink&#34; title=&#34;Net&#34;&gt;&lt;/a&gt;Net&lt;/h1&gt;&lt;h3 id=&#34;Tinyhttpd（示例代码）&#34;&gt;&lt;a href=&#34;#Tinyhttpd（示例代码）&#34; class=&#34;headerlink&#34; title=&#34;Tinyhttpd（示例代码）&#34;&gt;&lt;/a&gt;Tinyhttpd（示例代码）&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;tinyhttpd&lt;/strong&gt;是一个超轻量型Http Server，使用C语言开发，全部代码只有 502 行（包括注释），附带一个简单的 Client 可以通过阅读这段代码理解一个 Http Server 的本质。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;tinyhttpd 是我为学校项目编写的一个相对简单的网络服务器。虽然非常简单，但 tinyhttpd 是线程化的，可以处理基本的 CGI 脚本！这是一个用于演示 http 背后概念的教育工具。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;http://sourceforge.net/projects/tinyhttpd/&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;


&lt;h2 id=&#34;MQTT&#34;&gt;&lt;a href=&#34;#MQTT&#34; class=&#34;headerlink&#34; title=&#34;MQTT&#34;&gt;&lt;/a&gt;MQTT&lt;/h2&gt;&lt;h1 id=&#34;Tools&#34;&gt;&lt;a href=&#34;#Tools&#34; class=&#34;headerlink&#34; title=&#34;Tools&#34;&gt;&lt;/a&gt;Tools&lt;/h1&gt;&lt;h2 id=&#34;CRC&#34;&gt;&lt;a href=&#34;#CRC&#34; class=&#34;headerlink&#34; title=&#34;CRC&#34;&gt;&lt;/a&gt;CRC&lt;/h2&gt;&lt;h3 id=&#34;libcrc&#34;&gt;&lt;a href=&#34;#libcrc&#34; class=&#34;headerlink&#34; title=&#34;libcrc&#34;&gt;&lt;/a&gt;libcrc&lt;/h3&gt;&lt;p&gt;Libcrc - C 语言多平台 MIT 许可 CRC 库&lt;br&gt;&lt;a href=&#34;https://github.com/lammertb/libcrc&#34;&gt;https://github.com/lammertb/libcrc&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;cJSON&#34;&gt;&lt;a href=&#34;#cJSON&#34; class=&#34;headerlink&#34; title=&#34;cJSON&#34;&gt;&lt;/a&gt;cJSON&lt;/h2&gt;&lt;p&gt;Ultralightweight JSON parser in ANSI C.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/DaveGamble/cJSON&#34;&gt;https://github.com/DaveGamble/cJSON&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;单元测试&#34;&gt;&lt;a href=&#34;#单元测试&#34; class=&#34;headerlink&#34; title=&#34;单元测试&#34;&gt;&lt;/a&gt;单元测试&lt;/h2&gt;&lt;h3 id=&#34;Cmockery-单元测试框架&#34;&gt;&lt;a href=&#34;#Cmockery-单元测试框架&#34; class=&#34;headerlink&#34; title=&#34;Cmockery 单元测试框架&#34;&gt;&lt;/a&gt;Cmockery 单元测试框架&lt;/h3&gt;&lt;p&gt;Cmockery 是一个轻量级库，用于编写 C 单元测试。google 开发。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/google/cmockery&#34;&gt;https://github.com/google/cmockery&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;libev&#34;&gt;&lt;a href=&#34;#libev&#34; class=&#34;headerlink&#34; title=&#34;libev&#34;&gt;&lt;/a&gt;libev&lt;/h3&gt;&lt;p&gt;libev是一个全功能和高性能的事件循环库，libev 参考并模仿了libevent和perl模块Event。它用于GNU虚拟专用以太网、rxvt-unicode、auditd、Deliantra MORPG服务器和客户端以及许多其他程序。node.js曾经嵌入了libev，现在更换为了libuv。&lt;/p&gt;
&lt;p&gt;其以高效出名，它可以将 IO 事件、定时器、和信号统一起来，统一放在事件处理这一套框架下处理。&lt;/p&gt;
&lt;p&gt;基于 Reactor 模式，效率较高，并且代码精简（4.15 版本 8000 多行），是学习事件驱动编程的很好的资源。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://libev.schmorp.de/&#34;&gt;http://libev.schmorp.de/&lt;/a&gt;&lt;br&gt;&lt;a href=&#34;https://github.com/enki/libev&#34;&gt;https://github.com/enki/libev&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;QR-Code&#34;&gt;&lt;a href=&#34;#QR-Code&#34; class=&#34;headerlink&#34; title=&#34;QR Code&#34;&gt;&lt;/a&gt;QR Code&lt;/h2&gt;&lt;h3 id=&#34;QR-Code-generator-library&#34;&gt;&lt;a href=&#34;#QR-Code-generator-library&#34; class=&#34;headerlink&#34; title=&#34;QR Code generator library&#34;&gt;&lt;/a&gt;QR Code generator library&lt;/h3&gt;&lt;p&gt;该项目旨在成为多种语言中最好、最清晰的二维码生成器库。主要目标是灵活的选项和绝对的正确性。次要目标是紧凑的实现大小和良好的文档注释。&lt;br&gt;&lt;a href=&#34;https://github.com/nayuki/QR-Code-generator&#34;&gt;https://github.com/nayuki/QR-Code-generator&lt;/a&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/2f262a28/</guid>
            <title>音视频编解码</title>
            <link>https://www.oikiou.top/2024/2f262a28/</link>
            <category>audio</category>
            <category>video</category>
            <pubDate>Sun, 21 Jul 2024 16:23:05 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;视频显示原理&#34;&gt;&lt;a href=&#34;#视频显示原理&#34; class=&#34;headerlink&#34; title=&#34;视频显示原理&#34;&gt;&lt;/a&gt;视频显示原理&lt;/h1&gt;&lt;p&gt;视频是利用人眼视觉暂留的原理，通过播放一系列的图片，使人眼产生运动的感觉。单纯传输视频画面，视频量非常大，对现有的网络和存储来说是不可接受的。为了能够使视频便于传输和存储，人们发现视频有大量重复的信息，如果将重复信息在发送端去掉，在接收端恢复出来，这样就大大减少了视频数据的文件，因此有了各种视频压缩标准。&lt;/p&gt;
&lt;h1 id=&#34;视频编码&#34;&gt;&lt;a href=&#34;#视频编码&#34; class=&#34;headerlink&#34; title=&#34;视频编码&#34;&gt;&lt;/a&gt;视频编码&lt;/h1&gt;&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/yongdaimi/p/10676309.html&#34;&gt;参考 I帧、P帧、B帧、GOP、IDR 和PTS, DTS之间的关系&lt;/a&gt;&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/BigDream123/article/details/120329879&#34;&gt;视频编码基础：I帧、P帧 和 B 帧&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;拓展知识：视频编码方式&lt;br&gt;H.26x（由ITU[国际电传视讯联盟]主导）&lt;br&gt;MPEG-x （由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发）&lt;br&gt;VP-x （Google开发的开源视频编码格式）&lt;br&gt;AV1 （由Alliance for Open Media 开放媒体联盟，开发的一种开源视频编码格式）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MPEG-4&lt;/strong&gt; 与H.264诞生了H.264&amp;#x2F;AVC标准&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;H.264&amp;#x2F;AVC&lt;/strong&gt; H.264&amp;#x2F;MPEG-4第十部分，或称AVC（Advanced Video Coding，高级视频编码）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;H.265&amp;#x2F;HEVC&lt;/strong&gt; （High Efficiency Video Coding，简称HEVC）H.264的继任者，最高分辨率可达到8192×4320，HEVC被认为不仅提升图像质量，同时也能达到&lt;strong&gt;H.264&amp;#x2F;MPEG-4&lt;/strong&gt; AVC两倍之压缩率。唯一的潜在缺点是许可系统有点复杂。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;H.266&amp;#x2F;VVC&lt;/strong&gt;  Versatile Video Coding H.266 的开发目的是超越 H.265。但仍然存在一些与前身类似的许可和版税问题需要解决。与 H.265 相比，在相同的感知质量下，H.266 能够将比特率降低 30% 至 50%。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VP9&lt;/strong&gt; VP9 作为 VP8 的后继产品，主要竞争对手是 MPEG 的高效视频编码标准 HEVC。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AV1&lt;/strong&gt; 旨在提供更高效的压缩和更好的视频质量。它免版税且开源，效率比 VP9 高 30%。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对比：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;压缩效率：H.265和AV1相对于H.264、MPEG-2、MPEG-4和VP9具有更高的压缩效率，可以在相同的视频质量下减少更多的码率，从而减少带宽和存储需求。&lt;/li&gt;
&lt;li&gt;支持的分辨率和帧率：H.264、MPEG-2、MPEG-4和VP9支持较低的分辨率和帧率，而H.265和AV1支持更高的分辨率和帧率，例如4K和8K视频。&lt;/li&gt;
&lt;li&gt;编码延迟：H.265和AV1相对于H.264、MPEG-2、MPEG-4和VP9具有更高的编码延迟，这意味着它们需要更长的时间来编码视频，这可能会影响实时视频流应用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编码复杂度&lt;/strong&gt;：H.265和AV1相对于H.264、MPEG-2、MPEG-4和VP9具有更高的编码复杂度，这意味着需要更强的计算能力来进行编码。&lt;/li&gt;
&lt;li&gt;开放性：AV1是一种开放标准，由多个公司和组织共同开发，可以免费使用，而H.264、H.265、MPEG-2、MPEG-4和VP9则有专利和版权限制。&lt;br&gt;AV1和H.265的压缩比较高，所以编码较为复杂，延迟较高，计算量更高。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;需要注意的是 MKV MP4 AVI 等等这些是音视频容器，和视频编码不是一个概念，视频容器是用来盛放各种视频流、音频流、字幕等等数据的“容器”。不同的容器里面可能包含着相同的视频流。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;编码器将多张图像进行编码后生产成一段一段的 GOP ( Group of Pictures ) ， 解码器在播放时则是读取一段一段的 GOP 进行解码后读取画面再渲染显示。&lt;br&gt;GOP ( Group of Pictures) 是一组连续的画面，由一张 I 帧和数张 B &amp;#x2F; P 帧组成，是视频图像编码器和解码器存取的基本单位，它的排列顺序将会一直重复到影像结束。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I 帧&lt;/strong&gt;是内部编码帧（也称为关键帧）是一个完整的图像帧，它独立于其他帧存在。I帧不依赖于其他帧的信息即可独立解码，类似于静态图像，可以视为视频序列中的一个参考点。由于I帧包含了完整的图像信息，其压缩率相对较低，但在解码时最为简单，因为它不涉及对其他帧的依赖。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P 帧&lt;/strong&gt;是前向预测帧（前向参考帧）依赖于前面的I帧或P帧来生成。P帧存储的是与前一帧相比图像的变化量，因此它的压缩效果通常比I帧更好。在解码P帧时，需要先解码它所依赖的I帧或P帧，然后根据这些信息来重建当前帧的画面。P帧的引入有效减少了时间维度上的冗余，提高了视频的压缩效率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B 帧&lt;/strong&gt;是双向内插帧（双向参考帧）需要参考前后的I帧或P帧来生成。B帧利用前后帧的信息来预测当前帧的内容，从而实现更高的压缩比。由于B帧的解码需要前后帧的信息，它不能独立解码，必须在解码序列中结合I帧和P帧来完成。&lt;br&gt;简单地讲，I 帧是一个完整的画面，而 P 帧和 B 帧记录的是相对于 I 帧的变化。如果没有 I 帧，P 帧和 B 帧就无法解码。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在H.264压缩标准中I帧、P帧、B帧用于表示传输的视频画面。&lt;br&gt;&lt;img src=&#34;/2024/2f262a28/image-20240721152541316.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;GOP-和-IDR&#34;&gt;&lt;a href=&#34;#GOP-和-IDR&#34; class=&#34;headerlink&#34; title=&#34;GOP 和 IDR&#34;&gt;&lt;/a&gt;GOP 和 IDR&lt;/h2&gt;&lt;p&gt;在H264中图像以&lt;strong&gt;序列&lt;/strong&gt;为单位进行组织，一个序列是一段图像编码后的数据流。&lt;br&gt;一个序列的第一个图像叫做 &lt;strong&gt;IDR 图像&lt;/strong&gt;（&lt;strong&gt;立即刷新图像&lt;/strong&gt;），IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步，当解码器解码到 IDR 图像时，立即将参考帧队列清空，将已解码的数据全部输出或抛弃，重新查找参数集，开始一个新的序列。这样，如果前一个序列出现重大错误，在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。&lt;br&gt;一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。当运动变化比较少时，一个序列可以很长，因为运动变化少就代表图像画面的内容变动很小，所以就可以编一个I帧，然后一直P帧、B帧了。当运动变化多时，可能一个序列就比较短了，比如就包含一个I帧和3、4个P帧。&lt;br&gt;在视频编码序列中，GOP即Group of picture（&lt;strong&gt;图像组&lt;/strong&gt;），指两个I帧之间的距离，Reference（&lt;strong&gt;参考周期&lt;/strong&gt;）指两个P帧之间的距离。两个I帧之间形成一组图片，就是GOP（Group Of Picture）。&lt;/p&gt;
&lt;p&gt;【GOP示意图】&lt;br&gt;&lt;img src=&#34;/2024/2f262a28/image-20240721161215632.png&#34; alt=&#34;alt&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;I帧&#34;&gt;&lt;a href=&#34;#I帧&#34; class=&#34;headerlink&#34; title=&#34;I帧&#34;&gt;&lt;/a&gt;I帧&lt;/h2&gt;&lt;p&gt;I帧:即Intra-coded picture（&lt;strong&gt;帧内编码图像帧&lt;/strong&gt;），I帧表示关键帧，你可以理解为这一帧画面的完整保留；解码时只需要本帧数据就可以完成（因为包含完整画面）。又称为内部画面 (intra picture)，I 帧通常是每个 GOP（MPEG 所使用的一种视频压缩技术）的第一个帧，经过适度地压缩，做为随机访问的参考点，可以当成图象。在MPEG编码的过程中，部分视频帧序列压缩成为I帧；部分压缩成P帧；还有部分压缩成B帧。I帧法是帧内压缩法，也称为“关键帧”压缩法。I帧法是基于离散余弦变换DCT（Discrete Cosine Transform）的压缩技术，这种算法与JPEG压缩算法类似。采用I帧压缩可达到1&amp;#x2F;6的压缩比而无明显的压缩痕迹。&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;I帧特点&lt;/strong&gt;】&lt;br&gt;　　1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;&lt;br&gt;　　2.解码时仅用I帧的数据就可重构完整图像;&lt;br&gt;　　3.I帧描述了图像背景和运动主体的详情;&lt;br&gt;　　4.I帧不需要参考其他画面而生成;&lt;br&gt;　　5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);&lt;br&gt;　　6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;&lt;br&gt;　　7.I帧不需要考虑运动矢量;&lt;br&gt;　　8.I帧所占数据的信息量比较大。&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;I帧编码流程&lt;/strong&gt;】&lt;br&gt;　　(1)进行帧内预测，决定所采用的帧内预测模式。&lt;br&gt;　　(2)像素值减去预测值，得到残差。&lt;br&gt;　　(3)对残差进行变换和量化。&lt;br&gt;　　(4)变长编码和算术编码。&lt;br&gt;　　(5)重构图像并滤波，得到的图像作为其它帧的参考帧。&lt;/p&gt;
&lt;p&gt;例如：在视频会议系统中，终端发送给MCU（或者MCU发送给终端）的图像，并不是每次都把完整的一幅幅图片发送到远端，而只是发送后一幅画面在前一幅画面基础上发生变化的部分。如果在网络状况不好的情况下，终端的接收远端或者发送给远程的画面就会有丢包而出现图像花屏、图像卡顿的现象，在这种情况下如果没有I帧机制来让远端重新发一幅新的完整的图像到本地（或者本地重新发一幅新的完整的图像给远端），终端的输出图像的花屏、卡顿现象会越来越严重，从而造成会议无法正常进行。&lt;br&gt;在视频画面播放过程中，若I帧丢失了，则后面的P帧也就随着解不出来，就会出现视频画面黑屏的现象；若P帧丢失了，则视频画面会出现花屏、马赛克等现象。&lt;br&gt;在视频会议系统中I帧只会在会议限定的带宽内发生，不会超越会议带宽而生效。I帧机制不仅存在于MCU中，电视墙服务器、录播服务器中也存在。就是为了解决在网络状况不好的情况下，出现的丢包而造成的如图像花屏、卡顿，而影响会议会正常进行。&lt;/p&gt;
&lt;h2 id=&#34;P-帧&#34;&gt;&lt;a href=&#34;#P-帧&#34; class=&#34;headerlink&#34; title=&#34;P 帧&#34;&gt;&lt;/a&gt;P 帧&lt;/h2&gt;&lt;p&gt;P帧:即Predictive-coded Picture（&lt;strong&gt;前向预测编码图像帧&lt;/strong&gt;）。P帧表示的是这一帧跟之前的一个关键帧（或P帧）的差别，解码时需要用之前缓存的画面叠加上本帧定义的差别，生成最终画面。（也就是差别帧，P帧没有完整画面数据，只有与前一帧的画面差别的数据）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2024/2f262a28/image-20240721162346288.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;P帧的预测与重构&lt;/strong&gt;】&lt;br&gt;　　P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;P帧特点&lt;/strong&gt;】&lt;br&gt;　　1.P帧是I帧后面相隔1~2帧的编码帧;&lt;br&gt;　　2.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);&lt;br&gt;　　3.解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;&lt;br&gt;　　4.P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;&lt;br&gt;　　5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;&lt;br&gt;　　6.由于P帧是参考帧,它可能造成解码错误的扩散;&lt;br&gt;　　7.由于是差值传送,P帧的压缩比较高。&lt;/p&gt;
&lt;h2 id=&#34;B帧&#34;&gt;&lt;a href=&#34;#B帧&#34; class=&#34;headerlink&#34; title=&#34;B帧&#34;&gt;&lt;/a&gt;B帧&lt;/h2&gt;&lt;p&gt;B帧:即Bidirectionally predicted picture（&lt;strong&gt;双向预测编码图像帧&lt;/strong&gt;)。B帧是双向差别帧，也就是B帧记录的是本帧与前后帧的差别，换言之，&lt;strong&gt;要解码B帧，不仅要取得之前的缓存画面，还要解码之后的画面&lt;/strong&gt;，通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高，但是解码时CPU会比较累。&lt;strong&gt;无论是从编码侧还是解码侧看，B帧都是资源密集型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2024/2f262a28/image-20240721162537729.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;B帧的预测与重构&lt;/strong&gt;】&lt;br&gt;&lt;strong&gt;B帧以前面的I或P帧和后面的P帧为参考帧&lt;/strong&gt;,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。采用运动预测的方式进行帧间双向预测编码&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;B帧特点&lt;/strong&gt;】&lt;br&gt;　　1.B帧是由前面的I或P帧和后面的P帧来进行预测的;&lt;br&gt;　　2.B帧传送的是&lt;strong&gt;它与前面的I帧或P帧和后面的P帧之间的预测误差及运动矢量&lt;/strong&gt;;&lt;br&gt;　　3.B帧是双向预测编码帧;&lt;br&gt;　　4.B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;&lt;br&gt;　　5.B帧不是参考帧,不会造成解码错误的扩散&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;为什么需要B帧&lt;/strong&gt;】&lt;/p&gt;
&lt;p&gt; 从上面的看，我们知道I和P的解码算法比较简单，资源占用也比较少，I只要自己完成就行了，P呢，也只需要解码器把前一个画面缓存一下，遇到P时就使用之前缓存的画面就好了，如果视频流只有I和P，解码器可以不管后面的数据，边读边解码，线性前进，大家很舒服。那么为什么还要引入B帧？&lt;/p&gt;
&lt;p&gt;网络上的电影很多都采用了B帧，因为B帧记录的是前后帧的差别，&lt;strong&gt;比P帧能节约更多的空间&lt;/strong&gt;，但这样一来，文件小了，解码器就麻烦了，因为在解码时，不仅要用之前缓存的画面，还要知道下一个I或者P的画面（也就是说要预读预解码），而且，B帧不能简单地丢掉，因为B帧其实也包含了画面信息，如果简单丢掉，并用之前的画面简单重复，就会造成画面卡（其实就是丢帧了），并且由于网络上的电影为了节约空间，往往使用相当多的B帧，B帧用的多，对不支持B帧的播放器就造成更大的困扰，画面也就越卡。&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;显示和解码顺序示意图&lt;/strong&gt;】&lt;br&gt;&lt;img src=&#34;/2024/2f262a28/image-20240721162803162.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;PTS-DTS&#34;&gt;&lt;a href=&#34;#PTS-DTS&#34; class=&#34;headerlink&#34; title=&#34;PTS DTS&#34;&gt;&lt;/a&gt;PTS DTS&lt;/h2&gt;&lt;p&gt;【&lt;strong&gt;为什么会有PTS和DTS的概念&lt;/strong&gt;】&lt;/p&gt;
&lt;p&gt;通过上面的描述可以看出：P帧需要参考前面的I帧或P帧才可以生成一张完整的图片，而B帧则需要参考前面I帧或P帧及其后面的一个P帧才可以生成一张完整的图片。这样就带来了一个问题：在视频流中，先到来的 B 帧无法立即解码，需要等待它依赖的后面的 I、P 帧先解码完成，这样一来播放时间与解码时间不一致了，顺序打乱了，那这些帧该如何播放呢？这时就引入了另外两个概念：DTS 和 PTS。&lt;/p&gt;
&lt;p&gt;【&lt;strong&gt;PTS和DTS&lt;/strong&gt;】&lt;/p&gt;
&lt;p&gt;先来了解一下PTS和DTS的基本概念：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DTS（Decoding Time Stamp）&lt;/strong&gt;：即&lt;strong&gt;解码时间戳&lt;/strong&gt;，这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。&lt;br&gt;&lt;strong&gt;PTS（Presentation Time Stamp）&lt;/strong&gt;：即&lt;strong&gt;显示时间戳&lt;/strong&gt;，这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。&lt;/p&gt;
&lt;p&gt;虽然 DTS、PTS 是用于指导播放端的行为，但它们是在编码的时候由编码器生成的。&lt;/p&gt;
&lt;p&gt;在视频采集的时候是录制一帧就编码一帧发送一帧的，在编码的时候会生成 PTS，这里需要特别注意的是 frame（帧）的编码方式，在通常的场景中，编解码器编码一个 I 帧，然后向后跳过几个帧，用编码 I 帧作为基准帧对一个未来 P 帧进行编码，然后跳回到 I 帧之后的下一个帧。编码的 I 帧和 P 帧之间的帧被编码为 B 帧。之后，编码器会再次跳过几个帧，使用第一个 P 帧作为基准帧编码另外一个 P 帧，然后再次跳回，用 B 帧填充显示序列中的空隙。这个过程不断继续，每 12 到 15 个 P 帧和 B 帧内插入一个新的 I 帧。P 帧由前一个 I 帧或 P 帧图像来预测，而 B 帧由前后的两个 P 帧或一个 I 帧和一个 P 帧来预测，因而编解码和帧的显示顺序有所不同，如下所示：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2024/2f262a28/image-20240721163414484.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;假设编码器采集到的帧是这个样子的：&lt;br&gt;&lt;code&gt; I B B P B B P &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;那么它的显示顺序，也就是PTS应该是这样：&lt;br&gt;&lt;code&gt; 1 2 3 4 5 6 7  &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;编码器的编码顺序是：&lt;br&gt;&lt;code&gt; 1 4 2 3 7 5 6 &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;推流顺序也是按照编码顺序去推的，即&lt;br&gt;&lt;code&gt; I P B B P B B &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;那么接收断收到的视频流也就是&lt;br&gt;&lt;code&gt; I P B B P B B &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这时候去解码，也是按照收到的视频流一帧一帧去解的了，接收一帧解码一帧，因为在编码的时候已经按照 I、B、P 的依赖关系编好了，接收到数据直接解码就好了。那么解码顺序是：&lt;/p&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs text&#34;&gt;     I P B B P B B&lt;br&gt;DTS：1 2 3 4 5 6 7&lt;br&gt;PTS：1 4 2 3 7 5 6&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;


&lt;p&gt;可以看到解码出来对应的 PTS 不是顺序的，为了正确显示视频流，这时候我们就必须按照 PTS 重新调整解码后的 frame(帧)，即&lt;/p&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs text&#34;&gt;     I B B P B B P&lt;br&gt;DTS：1 3 4 2 6 7 5&lt;br&gt;PTS：1 2 3 4 5 6 7&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;


&lt;p&gt;另外，并不是一定要使用B帧。&lt;strong&gt;在实时互动直播系统中，很少使用B帧&lt;/strong&gt;。主要的原因是压缩和解码B帧时，由于要双向参考，所以它需要缓冲更多的数据，且使用的CPU也会更高。由于实时性的要求，所以一般不使用它。不过对于播放器来说，遇到带有B帧的H264数据是常有的事儿。在没有B帧的情况下，存放帧的顺序和显示帧的顺序就是一样的，PTS和DTS的值也是一样的。&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/4ce716c0/</guid>
            <title>Flash磨损均衡</title>
            <link>https://www.oikiou.top/2024/4ce716c0/</link>
            <category>flash</category>
            <pubDate>Tue, 04 Jun 2024 22:57:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;Flash磨损均衡&#34;&gt;&lt;a href=&#34;#Flash磨损均衡&#34; class=&#34;headerlink&#34; title=&#34;Flash磨损均衡&#34;&gt;&lt;/a&gt;Flash磨损均衡&lt;/h1&gt;&lt;h1 id=&#34;flash-原理和部分名称&#34;&gt;&lt;a href=&#34;#flash-原理和部分名称&#34; class=&#34;headerlink&#34; title=&#34;flash 原理和部分名称&#34;&gt;&lt;/a&gt;flash 原理和部分名称&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;/2024/4ce716c0/image-20240604163634862.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;package&lt;/strong&gt; 是存储芯片，即带有电连接器的小黑色矩形。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dies&lt;/strong&gt; 每个&lt;code&gt;package&lt;/code&gt;包含一个或多个&lt;code&gt;die&lt;/code&gt;（例如一个、两个或四个）。&lt;code&gt;die&lt;/code&gt; 是可以独立执行命令或报告状态的最小单元。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;planes&lt;/strong&gt;每个芯片包含一个或多个&lt;code&gt;planes&lt;/code&gt; （通常为一或两个）。每个&lt;code&gt;planes&lt;/code&gt;上都可以进行相同的并发操作，但有一些限制。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;blocks&lt;/strong&gt; 每个&lt;code&gt;planes&lt;/code&gt;包含若干个&lt;code&gt;block&lt;/code&gt; ，&lt;code&gt;block&lt;/code&gt;&lt;strong&gt;是可以擦除的最小单位&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pages&lt;/strong&gt;每个&lt;code&gt;block&lt;/code&gt;包含若干个 &lt;code&gt;page&lt;/code&gt;，&lt;code&gt;page&lt;/code&gt;是可进行编程（即写入）的最小单位。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;磨损均衡 可实现的 底层原理是（同一个块）一次擦除，多次写入。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;擦除是将任意内容改成0xff，即全1状态。&lt;br&gt;你可以对一个page执行多次写入，但是需要注意的是写入仅能将1改成0，&lt;strong&gt;无法将0改成1&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;EEPROM可以单字节（或者四字节）写，而FLASH只能按整个blocks擦除，另外EEPROM一般有100万次的读写寿命，而FLASH只有10万次；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;一些简单实现的Demo&#34;&gt;&lt;a href=&#34;#一些简单实现的Demo&#34; class=&#34;headerlink&#34; title=&#34;一些简单实现的Demo&#34;&gt;&lt;/a&gt;一些简单实现的Demo&lt;/h1&gt;&lt;p&gt;这些demo只是头脑风暴的一些实现，仅仅是一个思路，具体实现还需要完善很多的细节。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;Flash%E7%A3%A8%E6%8D%9F%E5%9D%87%E8%A1%A1.assets/flash%E7%9A%84%E7%A3%A8%E6%8D%9F%E5%9D%87%E8%A1%A1.drawio&#34;&gt;draw.io 源文件&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;数据长度固定&#34;&gt;&lt;a href=&#34;#数据长度固定&#34; class=&#34;headerlink&#34; title=&#34;数据长度固定&#34;&gt;&lt;/a&gt;数据长度固定&lt;/h2&gt;&lt;p&gt;数据长度固定，使用bitmap记录数据状态。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2024/4ce716c0/image-20240604162704326.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2024/4ce716c0/image-20240604175346112.png&#34;&gt;&lt;br&gt;&lt;img src=&#34;/2024/4ce716c0/image-20240604175403042.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;数据长度可变&#34;&gt;&lt;a href=&#34;#数据长度可变&#34; class=&#34;headerlink&#34; title=&#34;数据长度可变&#34;&gt;&lt;/a&gt;数据长度可变&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/2024/4ce716c0/image-20240604181628435.png&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;一些高性能的磨损均衡算法-SSD-Wear-Leveling&#34;&gt;&lt;a href=&#34;#一些高性能的磨损均衡算法-SSD-Wear-Leveling&#34; class=&#34;headerlink&#34; title=&#34;一些高性能的磨损均衡算法 SSD Wear Leveling&#34;&gt;&lt;/a&gt;一些高性能的磨损均衡算法 SSD Wear Leveling&lt;/h1&gt;&lt;p&gt;Flash采取&lt;strong&gt;异地更新&lt;/strong&gt;的策略 ,更新的数据会被放到别的物理页上,而不是覆盖原来的数据。包含新版本数据的页被称为&lt;strong&gt;有效页&lt;/strong&gt;,新版本数据被称为&lt;strong&gt;有效数据&lt;/strong&gt;。包含旧版本数据的页被称为&lt;strong&gt;无效页&lt;/strong&gt;，或称为脏页，脏页经过擦除操作后成为空闲页，才可以重新写入数据。因为Flash是&lt;strong&gt;以块为单位执行擦除&lt;/strong&gt;的，因此需要将脏页所在块上的所有物理页都擦除，在擦除之前需要检查此块上是否存在有效页，如果存在就必须先转移到其他块上。因为每个Flash块的擦除次数有限，一般是在10 万次到100万次之间，只要有块的擦除次数达到了上限，Flash数据存储的性能将下降。所以必须想办法，使&lt;strong&gt;擦除操作平均作用在每个Flash块上&lt;/strong&gt;，这种方法就是磨损均衡(wear-leveling)算法。&lt;/p&gt;
&lt;p&gt;我们在应用Flash时，实际上访问的是Flash的逻辑地址，在逻辑地址和物理地址之间，存在着映射关系。数据更新后只需改变映射表中物理页的地址，并将原版本数据所在的物理页标为无效。对于经常被更新的数据块，我们称之为&lt;strong&gt;“热”数据块&lt;/strong&gt;，对长期得不到更新的数据块，称之为&lt;strong&gt;“冷”数据块&lt;/strong&gt;。数据块经常更新的话，就会经常被擦除，而长期不更行的数据块，不会出现脏页而被擦除，其擦除次数会明显少于存放着经常被更新数据的块。如何实现“冷热”数据存放位置的交换是磨损均衡处理中需要考虑的问题。&lt;/p&gt;
&lt;p&gt;目前常用的磨损均衡算法大致分为两类，一类是随机性算法，一类是确定性算法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于随机性算法，其原理为：在每次写或擦除操作后，按照某一概率来触发磨损均衡处理。按照均匀分布的概率，&lt;strong&gt;随机选择某个块执行擦除操作&lt;/strong&gt;。不论块上放的是“冷”数据还是“热”数据,让每个块得到相等的擦除机会。最后将选中块上的有效数据复制到空块后擦除此块。将数据移动到哪个空闲块上,也是随机选择,因为没有记录块的擦除情况,存在将“冷”数据又移动到一个“冷”块上的情况,结果此块并没有增加擦除次数, 这种情况尤其会发生在有大量“冷”数据的系统里。&lt;/li&gt;
&lt;li&gt;对于确定性算法，又分为周期性和全局性两种，其中&lt;strong&gt;周期性算法&lt;/strong&gt;的原理为：将Flash的寿命看做是一个接一个的磨损均衡周期组成的。在一个处理周期中，达到规定的擦除次数的块在这一轮周期中将不会被选中，这样可使各个块都达到相同的擦除次数，再开始下一个擦除周期。通过调整Flash块的规定擦除次数，可以使整个Flash能够达到理想的磨损均衡。&lt;strong&gt;全局性算法&lt;/strong&gt;的原理为：不划分处理周期，在一个全局范围内控制块的磨损均衡。当任何两个块的擦除次数之差超过一个给定的阈值时，或者当某块的擦除次数超过了所有块的平均擦除次数时，启动磨损均衡处理，将擦除次数少的块上的数据和擦除次数多的块上的数据进行交换。如果块上存放的是“冷”数据，即数据很少被更新，则该块上的数据不易变脏，很少得到擦除的机会。相反，如果该块上存放的是“热”数据，则该块上的数据经常被更新，经常得到擦除脏数据的机会。根据这个原理来交换“冷热”数据，从而实现磨损均衡。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对比两类磨损均衡算法，可以看出：随机性算法的效果受随机因素影响较大，在擦除前，并不知道各个块被擦除的情况，同时对逻辑页的随机性请求并不能做到完全等概率，所以虽然随机性算法是等概率地选择处理页，但每个块的擦除次数并不能达到等概率分布，不能达到很好的磨损均衡效果。确定性算法因记录了物理块的擦除次数，故在处理中可根据这些信息来作出调整决策，各块基本达到了相近的擦除次数，磨损均衡的效果明显好于随机性算法。但这是在消耗大量内存开销的基础上实现的。&lt;/p&gt;
&lt;p&gt;根据以上讨论的情况，可以看出，必须结合两类算法的优势，来实现效果较好的磨损均衡处理，才能既保证Flash的读写速度，又能保证Flash的使用寿命，这将是决定固态存储能否全面战胜机械硬盘的关键之战。&lt;/p&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;&lt;a href=&#34;#参考资料&#34; class=&#34;headerlink&#34; title=&#34;参考资料&#34;&gt;&lt;/a&gt;参考资料&lt;/h1&gt;&lt;p&gt;Understanding Flash: Blocks, Pages and Program &amp;#x2F; Erases&lt;br&gt;&lt;a href=&#34;https://flashdba.com/2014/06/20/understanding-flash-blocks-pages-and-program-erases/&#34;&gt;https://flashdba.com/2014/06/20/understanding-flash-blocks-pages-and-program-erases/&lt;/a&gt;&lt;br&gt;Flash存储器磨损均衡原理及实现&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/csdliqi/article/details/80361163&#34;&gt;https://blog.csdn.net/csdliqi/article/details/80361163&lt;/a&gt;&lt;br&gt;深入解析SSD Wear Leveling磨损均衡技术：如何让你的硬盘更长寿？&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/zhuzongpeng/article/details/134520307&#34;&gt;https://blog.csdn.net/zhuzongpeng/article/details/134520307&lt;/a&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/5b8b4de/</guid>
            <title>RT-Thread 宝藏之Ringblk组件</title>
            <link>https://www.oikiou.top/2024/5b8b4de/</link>
            <category>rtos</category>
            <category>rt-thread</category>
            <pubDate>Tue, 04 Jun 2024 22:57:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;RT-Thread-宝藏之ringblk组件&#34;&gt;&lt;a href=&#34;#RT-Thread-宝藏之ringblk组件&#34; class=&#34;headerlink&#34; title=&#34;RT-Thread 宝藏之ringblk组件&#34;&gt;&lt;/a&gt;RT-Thread 宝藏之ringblk组件&lt;/h1&gt;&lt;h1 id=&#34;序言&#34;&gt;&lt;a href=&#34;#序言&#34; class=&#34;headerlink&#34; title=&#34;序言&#34;&gt;&lt;/a&gt;序言&lt;/h1&gt;&lt;p&gt;ringblk是什么？&lt;br&gt;ringblk &amp;#x3D; ring block(环形块缓冲区)，它的缓冲区的单位是一个 &lt;code&gt;block&lt;/code&gt; , 每次对数据的操作都是以 &lt;code&gt;block&lt;/code&gt; 为单位。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;还有一个更加常见的 &lt;code&gt;ringbuf&lt;/code&gt;(环形缓冲区，一种数据结构)。&lt;code&gt;ringbuf&lt;/code&gt;就是比较常见的先入先出（FIFO，First-In-First-Out）的环形缓冲区。&lt;/p&gt;
&lt;p&gt;下面是两者的一些对比：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;数据存储方式&lt;/strong&gt;：&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ringbuf&lt;/code&gt;：传统的环形缓冲区，通常由固定大小的单字节组成，数据以连续的方式存储。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ringblk&lt;/code&gt;：环形块缓冲区，由多个大小不一的数据块组成，每个块可以包含多个字节。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存效率&lt;/strong&gt;：&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ringbuf&lt;/code&gt;：可能需要更多的内存拷贝操作，因为它通常以单字节为单位操作数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ringblk&lt;/code&gt;：设计用于减少内存拷贝，通过块操作可以提高内存使用效率。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ringbuf&lt;/code&gt;：适用于简单的数据流处理，如字符设备驱动程序。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ringblk&lt;/code&gt;：适用于需要高效处理大块数据的场景，如DMA传输、通信帧的接收与发送、网络通信等。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;strong&gt;性能&lt;/strong&gt;：  &lt;ul&gt;
&lt;li&gt;&lt;code&gt;ringbuf&lt;/code&gt;：在处理小数据或字符流时可能表现良好。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ringblk&lt;/code&gt;：由于减少了内存拷贝（零字节拷贝zero-copy），可能在处理大块数据时提供更好的性能。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;ringblk&lt;/code&gt;提供了更高级的特性，特别是在处理大块数据和需要高效率数据传输的场景中。&lt;br&gt;而&lt;code&gt;ringbuf&lt;/code&gt;则适用于对简单连续数据流的处理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.rt-thread.org/document/api/group__ring__block__buffer.html&#34;&gt;RT-Thread 环形块状缓冲区 参考资料&lt;/a&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/f17585eb/</guid>
            <title>AES</title>
            <link>https://www.oikiou.top/2024/f17585eb/</link>
            <category>aes</category>
            <pubDate>Sat, 23 Mar 2024 22:57:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;AES&#34;&gt;&lt;a href=&#34;#AES&#34; class=&#34;headerlink&#34; title=&#34;AES&#34;&gt;&lt;/a&gt;AES&lt;/h1&gt;&lt;p&gt;高级加密标准( AES  &lt;strong&gt;Advanced Encryption Standard&lt;/strong&gt;)，原名Rijndael，是美国国家标准与技术研究所(NIST) 在 2017 年制定的电子数据加密规范。&lt;/p&gt;
&lt;p&gt;AES已被美国政府采用。它取代了1977 年发布的数据加密标准(DES) 。&lt;br&gt;AES 描述的算法是对称密钥算法，这意味着相同的密钥用于加密和解密数据。&lt;/p&gt;
&lt;p&gt;一些特性&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对称加密，加密解密使用同样的密钥&lt;/li&gt;
&lt;li&gt;分组加密，将明文分块成若干个数据块，分块加密（块大小固定为128位 16Byte）&lt;/li&gt;
&lt;li&gt;密钥长度可选128位、192位、256位，分别对应于10轮循环、12轮循环、14轮循环&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;加密过程&#34;&gt;&lt;a href=&#34;#加密过程&#34; class=&#34;headerlink&#34; title=&#34;加密过程&#34;&gt;&lt;/a&gt;加密过程&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;/2024/f17585eb/image-20240323184445497.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最终轮运算有些不同的是它只执行 1、2、4，不执行3。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;/2024/f17585eb/image-20240323201021478.png&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;解密&#34;&gt;&lt;a href=&#34;#解密&#34; class=&#34;headerlink&#34; title=&#34;解密&#34;&gt;&lt;/a&gt;解密&lt;/h1&gt;&lt;p&gt;解密为加密的完全逆过程&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个图从下往上看&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;/2024/f17585eb/image-20240323203852410.png&#34;&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/b58cbef5/</guid>
            <title>Obsidian</title>
            <link>https://www.oikiou.top/2024/b58cbef5/</link>
            <category>markdown</category>
            <category>obsidian</category>
            <pubDate>Fri, 08 Mar 2024 10:23:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;一些格式问题&#34;&gt;&lt;a href=&#34;#一些格式问题&#34; class=&#34;headerlink&#34; title=&#34;一些格式问题&#34;&gt;&lt;/a&gt;一些格式问题&lt;/h1&gt;&lt;h2 id=&#34;&#34;&gt;&lt;a href=&#34;#&#34; class=&#34;headerlink&#34; title=&#34;%%&#34;&gt;&lt;/a&gt;%%&lt;/h2&gt;&lt;p&gt;两个百分号在html中是“一个模板引擎系统，其语法基于jinja。”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Obsidian 会默认把CRLF的换行符自动转换成LF的&lt;br&gt;   我们需要将单独这个仓库的git配置成&lt;code&gt;autocrlf = false&lt;/code&gt;以保证换行符的统一。&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/ee69e452/</guid>
            <title>CSS</title>
            <link>https://www.oikiou.top/2024/ee69e452/</link>
            <category>html</category>
            <category>web</category>
            <category>js</category>
            <pubDate>Mon, 26 Feb 2024 08:08:08 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;JS-JavaScript&#34;&gt;&lt;a href=&#34;#JS-JavaScript&#34; class=&#34;headerlink&#34; title=&#34;JS (JavaScript)&#34;&gt;&lt;/a&gt;JS (JavaScript)&lt;/h1&gt;&lt;h1 id=&#34;JS-简介&#34;&gt;&lt;a href=&#34;#JS-简介&#34; class=&#34;headerlink&#34; title=&#34;JS 简介&#34;&gt;&lt;/a&gt;JS 简介&lt;/h1&gt;&lt;p&gt;JavaScript 是 web 开发人员必须学习的 3 门语言中的一门：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;HTML&lt;/strong&gt; 定义了网页的内容&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS&lt;/strong&gt; 描述了网页的布局&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; 控制了网页的行为&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;JS-特性&#34;&gt;&lt;a href=&#34;#JS-特性&#34; class=&#34;headerlink&#34; title=&#34;JS 特性&#34;&gt;&lt;/a&gt;JS 特性&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;JavaScript 是脚本语言&lt;/li&gt;
&lt;li&gt;JavaScript 是互联网上最流行的脚本语言，这门语言可用于 HTML 和 web，更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。&lt;/li&gt;
&lt;li&gt;JavaScript 是一种轻量级的编程语言。&lt;/li&gt;
&lt;li&gt;JavaScript 是可插入 HTML 页面的编程代码。&lt;/li&gt;
&lt;li&gt;JavaScript 插入 HTML 页面后，可由所有的现代浏览器执行。&lt;/li&gt;
&lt;li&gt;JavaScript 很容易学习。&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/ee69e452/</guid>
            <title>CSS</title>
            <link>https://www.oikiou.top/2024/ee69e452/</link>
            <category>css</category>
            <category>html</category>
            <category>web</category>
            <pubDate>Wed, 21 Feb 2024 08:08:08 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;CSS-Cascading-Style-Sheets&#34;&gt;&lt;a href=&#34;#CSS-Cascading-Style-Sheets&#34; class=&#34;headerlink&#34; title=&#34;CSS (Cascading Style Sheets)&#34;&gt;&lt;/a&gt;CSS (Cascading Style Sheets)&lt;/h1&gt; ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/2eec1551/</guid>
            <title>HTML</title>
            <link>https://www.oikiou.top/2024/2eec1551/</link>
            <category>html</category>
            <pubDate>Wed, 21 Feb 2024 08:08:08 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;HTML&#34;&gt;&lt;a href=&#34;#HTML&#34; class=&#34;headerlink&#34; title=&#34;HTML&#34;&gt;&lt;/a&gt;HTML&lt;/h1&gt;&lt;h1 id=&#34;HTML-概述&#34;&gt;&lt;a href=&#34;#HTML-概述&#34; class=&#34;headerlink&#34; title=&#34;HTML 概述&#34;&gt;&lt;/a&gt;HTML 概述&lt;/h1&gt;&lt;h2 id=&#34;HTML-是什么&#34;&gt;&lt;a href=&#34;#HTML-是什么&#34; class=&#34;headerlink&#34; title=&#34;HTML 是什么&#34;&gt;&lt;/a&gt;HTML 是什么&lt;/h2&gt;&lt;p&gt;HTML 是用来描述网页的一种语言。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTML 指的是超文本标记语言: &lt;strong&gt;H&lt;/strong&gt;yper&lt;strong&gt;T&lt;/strong&gt;ext &lt;strong&gt;M&lt;/strong&gt;arkup &lt;strong&gt;L&lt;/strong&gt;anguage&lt;/li&gt;
&lt;li&gt;HTML 不是一种编程语言，而是一种&lt;strong&gt;标记&lt;/strong&gt;语言&lt;/li&gt;
&lt;li&gt;标记语言是一套&lt;strong&gt;标记标签&lt;/strong&gt; (markup tag)&lt;/li&gt;
&lt;li&gt;HTML 使用标记标签来&lt;strong&gt;描述&lt;/strong&gt;网页&lt;/li&gt;
&lt;li&gt;HTML 文档包含了HTML &lt;strong&gt;标签&lt;/strong&gt;及&lt;strong&gt;文本&lt;/strong&gt;内容&lt;/li&gt;
&lt;li&gt;HTML文档也叫做 &lt;strong&gt;web 页面&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;HTML-标签&#34;&gt;&lt;a href=&#34;#HTML-标签&#34; class=&#34;headerlink&#34; title=&#34;HTML 标签&#34;&gt;&lt;/a&gt;HTML 标签&lt;/h2&gt;&lt;p&gt;HTML 标记标签通常被称为 HTML 标签 (HTML tag)。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTML 标签是由 &lt;em&gt;尖括号&lt;/em&gt; 包围的关键词，比如 &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;HTML 标签通常是 &lt;em&gt;成对出现&lt;/em&gt; 的，比如&lt;code&gt; &amp;lt;b&amp;gt; &lt;/code&gt;和 &lt;code&gt;&amp;lt;/b&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标签对中的第一个标签是 &lt;em&gt;开始标签&lt;/em&gt; ，第二个标签是 &lt;em&gt;结束标签&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;开始和结束标签也被称为 &lt;em&gt;开放标签&lt;/em&gt; 和 &lt;em&gt;闭合标签&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;HTML-页面结构&#34;&gt;&lt;a href=&#34;#HTML-页面结构&#34; class=&#34;headerlink&#34; title=&#34;HTML 页面结构&#34;&gt;&lt;/a&gt;HTML 页面结构&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/2024/2eec1551/02A7DD95-22B4-4FB9-B994-DDB5393F7F03.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  只有 &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; 区域 才会在浏览器中显示。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;声明&#34;&gt;&lt;a href=&#34;#声明&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;!DOCTYPE&amp;gt; 声明&#34;&gt;&lt;/a&gt;&amp;lt;!DOCTYPE&amp;gt; 声明&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;!DOCTYPE&amp;gt;&lt;/code&gt;声明用于标识网页文件，&lt;code&gt;&amp;lt;!DOCTYPE&amp;gt;&lt;/code&gt; 是文档类型声明（Document Type Declaration）的缩写。&lt;/p&gt;
&lt;p&gt;网络上有很多不同的文件，如果能够正确声明HTML的版本，浏览器就能正确显示网页内容。&lt;/p&gt;
&lt;p&gt;doctype 声明是不区分大小写的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTML5&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-meta&#34;&gt;&amp;lt;!DOCTYPE &lt;span class=&#34;hljs-keyword&#34;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;HTML 4.01&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-meta&#34;&gt;&amp;lt;!DOCTYPE &lt;span class=&#34;hljs-keyword&#34;&gt;HTML&lt;/span&gt; &lt;span class=&#34;hljs-keyword&#34;&gt;PUBLIC&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;XHTML 1.0&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-meta&#34;&gt;&amp;lt;!DOCTYPE &lt;span class=&#34;hljs-keyword&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;hljs-keyword&#34;&gt;PUBLIC&lt;/span&gt; &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h3 id=&#34;charset-编码格式&#34;&gt;&lt;a href=&#34;#charset-编码格式&#34; class=&#34;headerlink&#34; title=&#34;charset 编码格式&#34;&gt;&lt;/a&gt;charset 编码格式&lt;/h3&gt;&lt;p&gt;指定html文件的编码格式 UTF-8 或 GBK …&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;charset&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h1 id=&#34;HTML-元素&#34;&gt;&lt;a href=&#34;#HTML-元素&#34; class=&#34;headerlink&#34; title=&#34;HTML 元素&#34;&gt;&lt;/a&gt;HTML 元素&lt;/h1&gt;&lt;h2 id=&#34;HTML元素的语法&#34;&gt;&lt;a href=&#34;#HTML元素的语法&#34; class=&#34;headerlink&#34; title=&#34;HTML元素的语法&#34;&gt;&lt;/a&gt;HTML元素的语法&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;开始标签 *&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;元素内容&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;结束标签 *&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;这是一个段落&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;a href=&amp;quot;default.htm&amp;quot;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;这是一个链接&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;换行&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;**&lt;em&gt;&lt;strong&gt;开始标签常被称为&lt;/strong&gt;起始标签（opening tag）&lt;/em&gt;*&lt;/p&gt;
&lt;p&gt;**&lt;em&gt;&lt;strong&gt;结束标签常称为&lt;/strong&gt;闭合标签（closing tag）&lt;/em&gt;*&lt;/p&gt;
&lt;h2 id=&#34;HTML元素的特性&#34;&gt;&lt;a href=&#34;#HTML元素的特性&#34; class=&#34;headerlink&#34; title=&#34;HTML元素的特性&#34;&gt;&lt;/a&gt;HTML元素的特性&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;HTML 元素以&lt;strong&gt;开始标签&lt;/strong&gt;起始&lt;/li&gt;
&lt;li&gt;HTML 元素以&lt;strong&gt;结束标签&lt;/strong&gt;终止&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;元素的内容&lt;/strong&gt;是开始标签与结束标签之间的内容&lt;/li&gt;
&lt;li&gt;某些 HTML 元素具有&lt;strong&gt;空内容（empty content）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;空元素&lt;strong&gt;在开始标签中进行关闭&lt;/strong&gt;（以开始标签的结束而结束）&lt;/li&gt;
&lt;li&gt;大多数 HTML 元素可拥有&lt;strong&gt;属性&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;不要忘记结束标签！&lt;/li&gt;
&lt;li&gt;在 XHTML、XML 以及未来版本的 HTML 中，所有元素都必须被关闭。&lt;/li&gt;
&lt;li&gt;HTML 标签对大小写不敏感：&lt;code&gt;&amp;lt;P&amp;gt;&lt;/code&gt; 等同于 &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;。万维网联盟（W3C）在 HTML 4 中&lt;strong&gt;推荐使用小写&lt;/strong&gt;，而在未来 HTML 版本中会强制使用小写。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;示例&#34;&gt;&lt;a href=&#34;#示例&#34; class=&#34;headerlink&#34; title=&#34;示例&#34;&gt;&lt;/a&gt;示例&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;标题&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;这是一个标题&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h1 id=&#34;HTML-标签-1&#34;&gt;&lt;a href=&#34;#HTML-标签-1&#34; class=&#34;headerlink&#34; title=&#34;HTML 标签&#34;&gt;&lt;/a&gt;HTML 标签&lt;/h1&gt;&lt;p&gt;每个元素都有一个标签&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;标题&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;这是一个标题&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;段落&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;这是一个段落。&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;链接&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;https://www.oikiou.net&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;这是一个链接&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;图像&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;src&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;/images/logo.png&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;width&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;258&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;height&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;39&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;注释&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 这是一个注释 --&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 id=&#34;标签-List&#34;&gt;&lt;a href=&#34;#标签-List&#34; class=&#34;headerlink&#34; title=&#34;标签 List&#34;&gt;&lt;/a&gt;标签 List&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;标签&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;基础&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;!DOCTYPE&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档类型。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个 HTML 文档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;为文档定义一个标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档的主体&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;h1&amp;gt; to &amp;lt;h6&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义 HTML 标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个段落&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义简单的折行。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;hr&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义水平线。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;!--...--&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个注释&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;格式&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;acronym&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 定义只取首字母的缩写。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;abbr&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个缩写。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;address&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档作者或拥有者的联系信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义粗体文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;bdi&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;允许您设置一段文本，使其脱离其父元素的文本方向设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;bdo&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文本的方向。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;big&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 定义大号文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;blockquote&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义块引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;center&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 HTML 4.01 已废弃。定义居中文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;cite&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义引用(citation)。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义计算机代码文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义被删除文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;dfn&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义定义项目。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义强调文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;font&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 HTML 4.01 已废弃。 定义文本的字体、尺寸和颜色&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义斜体文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义被插入文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;kbd&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义键盘文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义带有记号的文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;meter&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义度量衡。仅用于已知最大和最小值的度量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义预格式文本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;progress&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义运行中的任务进度（进程）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;q&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义短的引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;rp&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义不支持 ruby 元素的浏览器所显示的内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;rt&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义字符（中文注音或字符）的解释或发音。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;ruby&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义 ruby 注释（中文注音或字符）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;s&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义加删除线的文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;samp&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义计算机代码样本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;small&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义小号文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;strike&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 HTML 4.01 已废弃。 定义加删除线的文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义语气更为强烈的强调文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;sub&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义下标文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;sup&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义上标文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;time&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个日期&amp;#x2F;时间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;tt&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 定义打字机文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;u&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义下划线文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☆&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;var&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文本的变量部分。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;wbr&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定在文本中的何处适合添加换行符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;表单&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个 HTML 表单，用于用户输入。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个输入控件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义多行的文本输入控件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义按钮。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义选择列表（下拉列表）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;optgroup&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义选择列表中相关选项的组合。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;option&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义选择列表中的选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义 input 元素的标注。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;fieldset&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义围绕表单中元素的边框。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;legend&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义 fieldset 元素的标题。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;datalist&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定了 input 元素可能的选项列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;keygen&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定用于表单的密钥对生成器字段。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个计算的结果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;框架&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;frame&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 定义框架集的窗口或框架。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;frameset&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。定义框架集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;noframes&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 定义针对不支持框架的用户的替代内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义内联框架。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;图像&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义图像。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;map&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义图像映射。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;area&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义图像地图内部的区域。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;通过脚本（通常是 JavaScript）来绘制图形（比如图表和其他图像）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个 caption for a &lt;figure&gt; element&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;figure 标签用于对元素进行组合。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;Audio&amp;#x2F;Video&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义声音，比如音乐或其他音频流。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义media元素 (&lt;video&gt; 和 &lt;audio&gt;)的媒体资源。media&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;track&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;为媒体(&lt;video&gt; 和 &lt;audio&gt;)元素定义外部文本轨道。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个音频或者视频&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;链接&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个链接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档与外部资源的关系。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档的主体部分。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义导航链接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;列表&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个无序列表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个有序列表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个列表项&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;dir&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 HTML 4.01 已废弃。 定义目录列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;dl&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个定义列表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;dt&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个定义定义列表中的项目。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;dd&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义定义列表中项目的描述。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;menu&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义菜单列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;command&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义用户可能调用的命令（比如单选按钮、复选框或按钮）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;表格&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个表格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;caption&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格标题。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;th&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中的表头单元格。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;tr&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中的行。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;td&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中的单元。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;thead&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中的表头内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;tbody&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中的主体内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;tfoot&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中的表注内容（脚注）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;col&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中一个或多个列的属性值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;colgroup&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义表格中供格式化的列组。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;样式&amp;#x2F;节&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档的样式信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档中的节。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文档中的节。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个文档头部部分&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个文档底部&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了文档的某个区域&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个文章内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义其所处内容之外的内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了用户可见的或者隐藏的需求的补充细节。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个对话框或者窗口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个可见的标题。 当用户点击标题时会显示出详细信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;元信息&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义关于文档的信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义关于 HTML 文档的元信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;base&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义页面中所有链接的默认地址或默认目标。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;basefont&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 HTML 4.01 已废弃。 定义页面中文本的默认字体、颜色或尺寸。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;strong&gt;程序&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义客户端脚本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义针对不支持客户端脚本的用户的替代内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;applet&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HTML5不再支持。 HTML 4.01 已废弃。 定义嵌入的 applet。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;embed&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了一个容器，用来嵌入外部应用或者互动程序（插件）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;object&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义嵌入的对象。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;&amp;lt;param&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义对象的参数。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h1 id=&#34;HTML-属性&#34;&gt;&lt;a href=&#34;#HTML-属性&#34; class=&#34;headerlink&#34; title=&#34;HTML 属性&#34;&gt;&lt;/a&gt;HTML 属性&lt;/h1&gt;&lt;h2 id=&#34;HTML属性-的特征&#34;&gt;&lt;a href=&#34;#HTML属性-的特征&#34; class=&#34;headerlink&#34; title=&#34;HTML属性 的特征&#34;&gt;&lt;/a&gt;HTML属性 的特征&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;HTML 元素可以设置&lt;strong&gt;属性&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;属性可以在元素中添加&lt;strong&gt;附加信息&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;属性一般描述于&lt;strong&gt;开始标签&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;属性总是以名称&amp;#x2F;值对的形式出现，**比如：name&amp;#x3D;”value”**。&lt;/li&gt;
&lt;li&gt;属性值应该始终被包括在&lt;strong&gt;引号内&lt;/strong&gt;。&lt;ul&gt;
&lt;li&gt;双引号是最常用的，在某些个别的情况下，比如属性值本身就含有双引号，那么您必须使用单引号。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;示例-1&#34;&gt;&lt;a href=&#34;#示例-1&#34; class=&#34;headerlink&#34; title=&#34;示例&#34;&gt;&lt;/a&gt;示例&lt;/h2&gt;&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- href=&amp;quot;http://www.baidu.com&amp;quot; 就是 HTML属性 --&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;http://www.baidu.com&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt; Baidu &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 id=&#34;参考List&#34;&gt;&lt;a href=&#34;#参考List&#34; class=&#34;headerlink&#34; title=&#34;参考List&#34;&gt;&lt;/a&gt;参考List&lt;/h2&gt;&lt;h3 id=&#34;HTML-全局属性&#34;&gt;&lt;a href=&#34;#HTML-全局属性&#34; class=&#34;headerlink&#34; title=&#34;HTML 全局属性&#34;&gt;&lt;/a&gt;HTML 全局属性&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;属性&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;accesskey&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;设置访问元素的键盘快捷键。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;class&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定元素的类名（classname）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;contenteditable&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定是否可编辑元素的内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;contextmenu&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;指定一个元素的上下文菜单。当用户右击该元素，出现上下文菜单&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;data-*&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;用于存储页面的自定义数据&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;dir&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;设置元素中内容的文本方向。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;draggable&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;指定某个元素是否可以拖动&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;dropzone&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;指定是否将数据复制，移动，或链接，或删除&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;hidden&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;hidden 属性规定对元素进行隐藏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;id&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定元素的唯一 id&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;lang&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;设置元素中内容的语言代码。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;spellcheck&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;检测元素是否拼写错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;style&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定元素的行内样式（inline style）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;tabindex&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;设置元素的 Tab 键控制次序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;规定元素的额外信息（可在工具提示中显示）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;translate&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;指定是否一个元素的值在页面载入时是否需要翻译&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h1 id=&#34;HTML-示例&#34;&gt;&lt;a href=&#34;#HTML-示例&#34; class=&#34;headerlink&#34; title=&#34;HTML 示例&#34;&gt;&lt;/a&gt;HTML 示例&lt;/h1&gt;&lt;h2 id=&#34;文本格式化&#34;&gt;&lt;a href=&#34;#文本格式化&#34; class=&#34;headerlink&#34; title=&#34;文本格式化&#34;&gt;&lt;/a&gt;文本格式化&lt;/h2&gt;&lt;p&gt;HTML 使用标签 &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt;(“bold”) 与 &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt;(“italic”) 对输出的文本进行格式, 如：&lt;b&gt;粗体&lt;/b&gt; or &lt;i&gt;斜体&lt;/i&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  通常标签 &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; 替换加粗标签 &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; 来使用, &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; 替换 &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt;标签使用。&lt;/p&gt;
&lt;p&gt;  然而，这些标签的含义是不同的：&lt;/p&gt;
&lt;p&gt;  &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; 与&lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt; 定义粗体或斜体文本。&lt;/p&gt;
&lt;p&gt;  &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; 或者 &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt;意味着你要呈现的文本是重要的，所以要突出显示。（重要文本的呈现方式有很多种，不仅仅只有加粗一种）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;链接-a&#34;&gt;&lt;a href=&#34;#链接-a&#34; class=&#34;headerlink&#34; title=&#34;链接 a&#34;&gt;&lt;/a&gt;链接 a&lt;/h2&gt;&lt;p&gt;HTML使用标签 &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 来设置超文本链接。&lt;/p&gt;
&lt;p&gt;超链接可以是&lt;u&gt;一个字，一个词，或者一组词，也可以是一幅图像&lt;/u&gt;，您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。（&lt;strong&gt;文本链接、图像链接、锚点链接、下载链接&lt;/strong&gt;）&lt;/p&gt;
&lt;p&gt;在标签 &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 中使用了 &lt;strong&gt;href&lt;/strong&gt; 属性来描述链接的地址。&lt;/p&gt;
&lt;p&gt;以下是 HTML 中创建链接的基本语法和属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 元素：创建链接的主要HTML元素是&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;（锚）元素。&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;元素具有以下属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;href&lt;/code&gt;：指定链接目标的URL，这是链接的最重要属性。可以是另一个网页的URL、文件的URL或其他资源的URL。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;target&lt;/code&gt;（可选）：指定链接如何在浏览器中打开。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_blank&lt;/code&gt;（在新标签或窗口中打开链接）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_self&lt;/code&gt; 在单击的同一框架中打开链接文档（在当前标签或窗口中打开链接）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_top&lt;/code&gt; 在整个窗口中打开链接文档&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;title&lt;/code&gt;（可选）：提供链接的额外信息，通常在鼠标悬停在链接上时显示为工具提示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;rel&lt;/code&gt;（可选）：指定与链接目标的关系，如 nofollow、noopener 等。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;示例-2&#34;&gt;&lt;a href=&#34;#示例-2&#34; class=&#34;headerlink&#34; title=&#34;示例&#34;&gt;&lt;/a&gt;示例&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;文本链接：&lt;/strong&gt;最常见的链接类型是文本链接，它使用 &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 元素将一段文本转化为可点击的链接，例如：&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;https://www.example.com&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;访问示例网站&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;图像链接：&lt;/strong&gt;您还可以使用图像作为链接。在这种情况下，&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 元素包围着 &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; 元素。例如：&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;https://www.example.com&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;  &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;src&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;example.jpg&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;alt&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;示例图片&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;锚点链接：&lt;/strong&gt;除了链接到其他网页外，您还可以在同一页面内创建内部链接，这称为锚点链接。要创建锚点链接，需要在目标位置使用 &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 元素定义一个标记，并使用&lt;code&gt;#&lt;/code&gt;符号引用该标记。例如：&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;#section2&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;跳转到第二部分&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 在页面中的某个位置 --&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;section2&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;#C4&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;查看章节 4&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;h2&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;id&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;C4&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;章节 4&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;h2&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;这边显示该章节的内容……&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;下载链接：&lt;/strong&gt;如果您希望链接用于下载文件而不是导航到另一个网页，可以使用 download 属性。例如：&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;document.pdf&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;download&lt;/span&gt;&amp;gt;&lt;/span&gt;下载文档&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;邮件链接&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;mailto:someone@example.com?cc=someoneelse@example.com&amp;amp;bcc=andsomeoneelse@example.com&amp;amp;subject=Summer%20Party&amp;amp;body=You%20are%20invited%20to%20a%20big%20summer%20party!&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;target&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;_top&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;发送邮件!&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;a&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;mailto: 收件人 &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;cc= 抄送 &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;bcc= 密送 &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;subject= 标题 &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;body= 正文 &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;b&lt;/span&gt;&amp;gt;&lt;/span&gt;注意:&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;b&lt;/span&gt;&amp;gt;&lt;/span&gt; 单词之间的空格使用 %20 代替，以确保浏览器可以正常显示文本。&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 id=&#34;头部-head&#34;&gt;&lt;a href=&#34;#头部-head&#34; class=&#34;headerlink&#34; title=&#34;头部 head&#34;&gt;&lt;/a&gt;头部 head&lt;/h2&gt;&lt;p&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; 元素包含了所有的头部标签元素。在 &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;元素中你可以插入脚本（scripts）, 样式文件（CSS），及各种meta信息。&lt;/p&gt;
&lt;p&gt;可以添加在头部区域的元素标签为: &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;lt;base&amp;gt;&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;元素&#34;&gt;&lt;a href=&#34;#元素&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;title&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; 标签定义了不同文档的标题。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; 在 HTML&amp;#x2F;XHTML 文档中是必需的。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; 元素:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;定义了浏览器工具栏的标题&lt;/li&gt;
&lt;li&gt;当网页添加到收藏夹时，显示在收藏夹中的标题&lt;/li&gt;
&lt;li&gt;显示在搜索引擎结果页面的标题&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;元素-1&#34;&gt;&lt;a href=&#34;#元素-1&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;base&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;base&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;base&amp;gt;&lt;/code&gt; 标签描述了基本的链接地址&amp;#x2F;链接目标，该标签作为HTML文档中所有的链接标签的默认链接:&lt;/p&gt;
&lt;h3 id=&#34;元素-2&#34;&gt;&lt;a href=&#34;#元素-2&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;link&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; 标签定义了文档与外部资源之间的关系。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; 标签通常用于链接到样式表&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 定义head处的图标 --&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;rel&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;icon&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;logo.ico&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 使用外部样式表 --&amp;gt;&lt;/span&gt;&lt;br&gt;	&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;rel&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;href&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;mystyle.css&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;元素-3&#34;&gt;&lt;a href=&#34;#元素-3&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;style&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; 标签定义了HTML文档的样式文件引用地址.&lt;/p&gt;
&lt;p&gt;在&lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; 元素中你也可以直接添加样式来渲染 HTML 文档:&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 将背景设置成黄色，段落设置成蓝色 --&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;language-css&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-css&#34;&gt;        &lt;span class=&#34;hljs-selector-tag&#34;&gt;body&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-css&#34;&gt;            &lt;span class=&#34;hljs-attribute&#34;&gt;background-color&lt;/span&gt;:yellow;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-css&#34;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-css&#34;&gt;        &lt;span class=&#34;hljs-selector-tag&#34;&gt;p&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-css&#34;&gt;            &lt;span class=&#34;hljs-attribute&#34;&gt;color&lt;/span&gt;:blue&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-css&#34;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-css&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;style&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;元素-4&#34;&gt;&lt;a href=&#34;#元素-4&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;meta&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;meta标签描述了一些基本的元数据。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; 标签提供了元数据.元数据也不显示在页面上，但会被浏览器解析。&lt;/p&gt;
&lt;p&gt;META 元素通常用于指定网页的描述，关键词，文件的最后修改时间，作者，和其他元数据。&lt;/p&gt;
&lt;p&gt;元数据可以使用于浏览器（如何显示内容或重新加载页面），搜索引擎（关键词），或其他Web服务。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; 一般放置于 &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; 区域&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;keywords&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;content&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;HTML, CSS, XML, XHTML, JavaScript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;description&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;content&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;免费 Web &amp;amp; 编程 教程&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;author&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;content&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;Runoob&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;http-equiv&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;refresh&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;content&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;元素-5&#34;&gt;&lt;a href=&#34;#元素-5&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;script&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;标签用于加载脚本文件，如： JavaScript。&lt;/p&gt;
&lt;h3 id=&#34;头部-head-元素&#34;&gt;&lt;a href=&#34;#头部-head-元素&#34; class=&#34;headerlink&#34; title=&#34;头部 head 元素&#34;&gt;&lt;/a&gt;头部 head 元素&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;标签&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;head&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了文档的信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了文档的标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;base&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了页面链接标签的默认链接地址&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;link&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了一个文档和外部资源之间的关系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;meta&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了HTML文档中的元数据&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;script&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了客户端的脚本文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;style&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了HTML文档的样式文件&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&#34;CSS&#34;&gt;&lt;a href=&#34;#CSS&#34; class=&#34;headerlink&#34; title=&#34;CSS&#34;&gt;&lt;/a&gt;CSS&lt;/h2&gt;&lt;p&gt;…&lt;/p&gt;
&lt;figure class=&#34;highlight css&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs css&#34;&gt;背景色&lt;br&gt;style=&amp;quot;&lt;span class=&#34;hljs-attribute&#34;&gt;background-color&lt;/span&gt;:green;&amp;quot;&lt;br&gt;字体 字体颜色 字体大小&lt;br&gt;style=&amp;quot;&lt;span class=&#34;hljs-attribute&#34;&gt;font-family&lt;/span&gt;:arial;&lt;span class=&#34;hljs-attribute&#34;&gt;color&lt;/span&gt;:red;&lt;span class=&#34;hljs-attribute&#34;&gt;font-size&lt;/span&gt;:&lt;span class=&#34;hljs-number&#34;&gt;20px&lt;/span&gt;;&amp;quot;&lt;br&gt;居中对齐&lt;br&gt;style=&amp;quot;&lt;span class=&#34;hljs-attribute&#34;&gt;text-align&lt;/span&gt;:center;&amp;quot;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 id=&#34;表格&#34;&gt;&lt;a href=&#34;#表格&#34; class=&#34;headerlink&#34; title=&#34;表格&#34;&gt;&lt;/a&gt;表格&lt;/h2&gt;&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;table&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;border&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;tr&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;th&lt;/span&gt;&amp;gt;&lt;/span&gt;Header 1&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;th&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;th&lt;/span&gt;&amp;gt;&lt;/span&gt;Header 2&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;th&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;tr&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;tr&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;row 1, cell 1&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;row 1, cell 2&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;tr&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;tr&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;row 2, cell 1&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;row 2, cell 2&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;td&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;tr&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;table&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;table border=&#34;1&#34;&gt;
    &lt;tr&gt;
        &lt;th&gt;Header 1&lt;/th&gt;
        &lt;th&gt;Header 2&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;row 1, cell 1&lt;/td&gt;
        &lt;td&gt;row 1, cell 2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;row 2, cell 1&lt;/td&gt;
        &lt;td&gt;row 2, cell 2&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;h3 id=&#34;表格元素&#34;&gt;&lt;a href=&#34;#表格元素&#34; class=&#34;headerlink&#34; title=&#34;表格元素&#34;&gt;&lt;/a&gt;表格元素&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;th&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格的表头&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;tr&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格的行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;td&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格单元&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;caption&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;colgroup&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格列的组&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;col&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义用于表格列的属性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;thead&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格的页眉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;tbody&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格的主体&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;tfoot&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定义表格的页脚&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&#34;区块&#34;&gt;&lt;a href=&#34;#区块&#34; class=&#34;headerlink&#34; title=&#34;区块&#34;&gt;&lt;/a&gt;区块&lt;/h2&gt;&lt;h3 id=&#34;元素-6&#34;&gt;&lt;a href=&#34;#元素-6&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;div&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;HTML &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 元素是块级元素，它可用于组合其他 HTML 元素的容器。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 元素没有特定的含义。除此之外，由于它属于块级元素，浏览器会在其前后显示折行。&lt;/p&gt;
&lt;p&gt;如果与 CSS 一同使用，&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 元素可用于对大的内容块设置样式属性。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 元素的另一个常见的用途是文档布局。它取代了使用表格定义布局的老式方法。使用 &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; 元素进行文档布局不是表格的正确用法。&lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; 元素的作用是显示表格化的数据。&lt;/p&gt;
&lt;h3 id=&#34;元素-7&#34;&gt;&lt;a href=&#34;#元素-7&#34; class=&#34;headerlink&#34; title=&#34;&amp;lt;span&amp;gt; 元素&#34;&gt;&lt;/a&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 元素&lt;/h3&gt;&lt;p&gt;HTML &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 元素是内联元素，可用作文本的容器&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 元素也没有特定的含义。&lt;/p&gt;
&lt;p&gt;当与 CSS 一同使用时，&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 元素可用于为部分文本设置样式属性。&lt;/p&gt;
&lt;h3 id=&#34;div-与-span-对比&#34;&gt;&lt;a href=&#34;#div-与-span-对比&#34; class=&#34;headerlink&#34; title=&#34;div 与 span 对比&#34;&gt;&lt;/a&gt;div 与 span 对比&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;块级元素 vs. 行内元素：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 是块级元素，它独占一行，可以设置宽度、高度以及边距等样式属性。它适合用于创建页面的大块结构，例如页面的主体区域、容器、布局等。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 是行内元素，它不会独占一行，宽度默认由其内容决定。它适合用于对文本或其他行内元素进行样式化、标记或包裹。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;默认样式和布局：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 元素的默认样式为块级显示，会以块的形式占据可用空间。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 元素的默认样式为行内显示，它不会独占一行，只占据其内容的宽度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;嵌套关系：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 可以容纳其他块级元素和行内元素，包括其他的 &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 元素。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 通常被用来包裹文本或其他行内元素，比如用来设置特定文本的样式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总之，&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 用于创建页面结构和布局，而 &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; 用于对文本或行内元素进行样式化或包裹。它们在页面设计和样式设置中有不同的用途和作用。&lt;/p&gt;
&lt;h3 id=&#34;区块标签&#34;&gt;&lt;a href=&#34;#区块标签&#34; class=&#34;headerlink&#34; title=&#34;区块标签&#34;&gt;&lt;/a&gt;区块标签&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;标签&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;div&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了文档的区域，块级 (block-level)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;span&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;用来组合文档中的行内元素， 内联元素(inline)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&#34;表单&#34;&gt;&lt;a href=&#34;#表单&#34; class=&#34;headerlink&#34; title=&#34;表单&#34;&gt;&lt;/a&gt;表单&lt;/h2&gt;&lt;p&gt;HTML 表单用于收集用户的&lt;strong&gt;输入信息&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;HTML 表单表示文档中的一个区域，此区域包含交互控件，将用户收集到的信息发送到 Web 服务器。&lt;/p&gt;
&lt;p&gt;HTML 表单通常包含各种&lt;u&gt;输入字段、复选框、单选按钮、下拉列表等元素&lt;/u&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; 元素用于创建表单，&lt;code&gt;action&lt;/code&gt; 属性定义了表单数据提交的目标 URL，&lt;code&gt;method&lt;/code&gt; 属性定义了提交数据的 HTTP 方法（这里使用的是 “post”）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; 元素用于为表单元素添加标签，提高可访问性。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; 元素是最常用的表单元素之一，它可以创建文本输入框、密码框、单选按钮、复选框等。&lt;code&gt;type&lt;/code&gt; 属性定义了输入框的类型，&lt;code&gt;id&lt;/code&gt; 属性用于关联 &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; 元素，&lt;code&gt;name&lt;/code&gt; 属性用于标识表单字段。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; 元素用于创建下拉列表，而 &lt;code&gt;&amp;lt;option&amp;gt;&lt;/code&gt; 元素用于定义下拉列表中的选项。&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;action&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;/&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;method&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;post&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 文本输入框 --&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;for&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;用户名:&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;id&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;required&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 密码输入框 --&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;for&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;密码:&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;id&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;required&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 单选按钮 --&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;性别:&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;id&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;male&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;gender&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;value&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;male&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;checked&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;for&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;male&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;男&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;id&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;gender&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;value&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;for&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;女&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 复选框 --&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;checkbox&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;id&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;subscribe&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;subscribe&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;checked&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;for&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;subscribe&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;订阅推送信息&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 下拉列表 --&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;for&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;country&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;国家:&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;id&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;country&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;country&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;value&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;cn&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;CN&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;option&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;value&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;usa&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;USA&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;option&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;value&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;uk&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;UK&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;option&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;select&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 提交按钮 --&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;&lt;span class=&#34;hljs-name&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;submit&amp;quot;&lt;/span&gt; &lt;span class=&#34;hljs-attr&#34;&gt;value&lt;/span&gt;=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;提交&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-tag&#34;&gt;&amp;lt;/&lt;span class=&#34;hljs-name&#34;&gt;form&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;表单标签&#34;&gt;&lt;a href=&#34;#表单标签&#34; class=&#34;headerlink&#34; title=&#34;表单标签&#34;&gt;&lt;/a&gt;表单标签&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;标签&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;form&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义供用户输入的表单&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;input&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义输入域&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;textarea&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义文本域 (一个多行的输入控件)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;label&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了 &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; 元素的标签，一般为输入标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;fieldset&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了一组相关的表单元素，并使用外框包含起来&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;legend&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了 &lt;code&gt;&amp;lt;fieldset&amp;gt;&lt;/code&gt; 元素的标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;select&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了下拉选项列表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;optgroup&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义选项组&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;option&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义下拉列表中的选项&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;button&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个点击按钮&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;datalist&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;指定一个预先定义的输入控件选项列表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;keygen&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义了表单的密钥对生成器字段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;output&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;定义一个计算结果&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&#34;框架&#34;&gt;&lt;a href=&#34;#框架&#34; class=&#34;headerlink&#34; title=&#34;框架&#34;&gt;&lt;/a&gt;框架&lt;/h2&gt;&lt;p&gt;…&lt;/p&gt;
&lt;h2 id=&#34;脚本&#34;&gt;&lt;a href=&#34;#脚本&#34; class=&#34;headerlink&#34; title=&#34;脚本&#34;&gt;&lt;/a&gt;脚本&lt;/h2&gt;&lt;p&gt;…&lt;/p&gt;
&lt;h2 id=&#34;字符实体&#34;&gt;&lt;a href=&#34;#字符实体&#34; class=&#34;headerlink&#34; title=&#34;字符实体&#34;&gt;&lt;/a&gt;字符实体&lt;/h2&gt;&lt;p&gt;在 HTML 中，某些字符是预留的。&lt;/p&gt;
&lt;p&gt;在 HTML 中不能使用小于号（&amp;lt;）和大于号（&amp;gt;），这是因为浏览器会误认为它们是标签。&lt;/p&gt;
&lt;p&gt;如果希望正确地显示预留字符，我们必须在 HTML 源代码中使用字符实体（character entities）。 字符实体类似这样：&lt;/p&gt;
&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs html&#34;&gt;&amp;amp;*entity_name*;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;&amp;lt;!-- 或 --&amp;gt;&lt;/span&gt;&lt;br&gt;&amp;amp;#*entity_number*;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;如需显示小于号，我们必须这样写：&amp;lt; 或 &amp;#60; 或 &amp;#060;  (&lt;code&gt;&amp;amp;lt;&lt;/code&gt; 或 &lt;code&gt;&amp;amp;#60;&lt;/code&gt; 或 &lt;code&gt;&amp;amp;#060;&lt;/code&gt;)&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/f0099803/</guid>
            <title>语义化版本编号 Major、Minor、Patch</title>
            <link>https://www.oikiou.top/2024/f0099803/</link>
            <category>major</category>
            <pubDate>Fri, 19 Jan 2024 22:57:15 +0800</pubDate>
            <description><![CDATA[ &lt;h2 id=&#34;语义化版本（Semantic-Versioning）：Major、Minor-和-Patch-版本号解析&#34;&gt;&lt;a href=&#34;#语义化版本（Semantic-Versioning）：Major、Minor-和-Patch-版本号解析&#34; class=&#34;headerlink&#34; title=&#34;语义化版本（Semantic Versioning）：Major、Minor 和 Patch 版本号解析&#34;&gt;&lt;/a&gt;语义化版本（Semantic Versioning）：Major、Minor 和 Patch 版本号解析&lt;/h2&gt;&lt;p&gt;语义化版本，通常简称为SemVer，是一种软件版本号的标准化方案，旨在使软件版本号的管理更加透明和可预测。它主要由三个部分组成：Major（主版本号）、Minor（次版本号）和Patch（修订版本号）。在这篇文章中，我们将深入解释这三个部分的含义，并提供详细的示例来说明它们的用途和变更规则。&lt;/p&gt;
&lt;p&gt;在RT-Thread内有如下代码段：&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs c&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;/* RT-Thread version information */&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; RT_VERSION_MAJOR                5               &lt;span class=&#34;hljs-comment&#34;&gt;/**&amp;lt; Major version number (X.x.x) */&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; RT_VERSION_MINOR                1               &lt;span class=&#34;hljs-comment&#34;&gt;/**&amp;lt; Minor version number (x.X.x) */&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; RT_VERSION_PATCH                0               &lt;span class=&#34;hljs-comment&#34;&gt;/**&amp;lt; Patch version number (x.x.X) */&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;/* e.g. #if (RTTHREAD_VERSION &amp;gt;= RT_VERSION_CHECK(4, 1, 0) */&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; RT_VERSION_CHECK(major, minor, revise)          ((major * 10000) + (minor * 100) + revise)&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;/* RT-Thread version */&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; RTTHREAD_VERSION                RT_VERSION_CHECK(RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH)&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h3 id=&#34;Major（主版本号）&#34;&gt;&lt;a href=&#34;#Major（主版本号）&#34; class=&#34;headerlink&#34; title=&#34;Major（主版本号）&#34;&gt;&lt;/a&gt;Major（主版本号）&lt;/h3&gt;&lt;p&gt;Major版本号是语义化版本中的第一个数字，用于表示软件的主要版本变更。当进行大规模的、不兼容的变更时，应该增加Major版本号。主要变更包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;不兼容的API更改&lt;/strong&gt;：当你修改了软件的API，以至于旧版本的代码无法与新版本一起正常工作时，应该升级Major版本号。这可能包括删除、更改或添加API端点、参数或行为。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重大功能新增&lt;/strong&gt;：如果你引入了重要的新功能，这可能会改变用户的工作流程或提供新的能力，也应该升级Major版本号。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;废弃旧功能&lt;/strong&gt;：当你计划废弃或删除旧的功能时，通常需要增加Major版本号，以提醒用户进行迁移。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;示例： 假设有一个虚构的图形处理库，当前版本号为1.0.0。如果开发团队决定删除现有API中的一个核心功能，这将导致现有的用户无法升级到新版本而不修改其代码，那么新版本的版本号应该升级到2.0.0。&lt;/p&gt;
&lt;h3 id=&#34;Minor（次版本号）&#34;&gt;&lt;a href=&#34;#Minor（次版本号）&#34; class=&#34;headerlink&#34; title=&#34;Minor（次版本号）&#34;&gt;&lt;/a&gt;Minor（次版本号）&lt;/h3&gt;&lt;p&gt;Minor版本号是语义化版本中的第二个数字，用于表示向后兼容的新功能添加。Minor版本号的变更包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;新增功能&lt;/strong&gt;：当你向软件添加新的功能，但这些功能不会破坏现有的API或功能，应该增加Minor版本号。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;改进现有功能&lt;/strong&gt;：如果你对现有功能进行了改进，但这些改进不会导致现有用户的代码无法工作，也应该升级Minor版本号。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;向后兼容的API增强&lt;/strong&gt;：如果你增加了现有API的参数、选项或能力，而这不会破坏已有的使用方式，也应该升级Minor版本号。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;示例： 继续以图形处理库为例，当前版本号为1.2.0。开发团队决定在库中添加一个全新的图像滤镜功能，但这不会破坏任何现有功能或API。在这种情况下，版本号应升级到1.3.0。&lt;/p&gt;
&lt;h3 id=&#34;Patch（修订版本号）&#34;&gt;&lt;a href=&#34;#Patch（修订版本号）&#34; class=&#34;headerlink&#34; title=&#34;Patch（修订版本号）&#34;&gt;&lt;/a&gt;Patch（修订版本号）&lt;/h3&gt;&lt;p&gt;Patch版本号是语义化版本中的第三个数字，用于表示向后兼容的错误修复或小的改进。Patch版本号的变更包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;错误修复&lt;/strong&gt;：当你解决现有功能或API中的错误时，应该升级Patch版本号。这些修复不应引入新的功能或改变现有的行为。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能优化&lt;/strong&gt;：如果你对现有功能进行性能优化，而不会改变其行为，也应该升级Patch版本号。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;小的改进或修改&lt;/strong&gt;：如果你进行了一些小的改进，但它们不会破坏向后兼容性，应该升级Patch版本号。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;示例： 继续以图形处理库为例，当前版本号为1.2.3。在测试中发现一个重要的Bug，它导致图像处理不正确。开发团队修复了这个问题，没有引入新的功能或改变现有功能，版本号应该升级到1.2.4。&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2024/fd896621/</guid>
            <title>代码、硬件常见的缩写</title>
            <link>https://www.oikiou.top/2024/fd896621/</link>
            <category>words</category>
            <pubDate>Fri, 12 Jan 2024 17:47:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;代码、硬件常见的缩写&#34;&gt;&lt;a href=&#34;#代码、硬件常见的缩写&#34; class=&#34;headerlink&#34; title=&#34;代码、硬件常见的缩写&#34;&gt;&lt;/a&gt;代码、硬件常见的缩写&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;常用单词缩写&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;全词&lt;/th&gt;
&lt;th&gt;缩词&amp;#x2F;简写&lt;/th&gt;
&lt;th&gt;中译&lt;/th&gt;
&lt;th&gt;全词&lt;/th&gt;
&lt;th&gt;缩词&amp;#x2F;简写&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;&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;source&lt;/td&gt;
&lt;td&gt;src&lt;/td&gt;
&lt;td&gt;源头&lt;/td&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;td&gt;def&lt;/td&gt;
&lt;td&gt;默认&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;destination&lt;/td&gt;
&lt;td&gt;dst或des&lt;/td&gt;
&lt;td&gt;目的地，目标&lt;/td&gt;
&lt;td&gt;define&lt;/td&gt;
&lt;td&gt;def&lt;/td&gt;
&lt;td&gt;定义&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;operator&lt;/td&gt;
&lt;td&gt;optr&lt;/td&gt;
&lt;td&gt;操作符&lt;/td&gt;
&lt;td&gt;macro&lt;/td&gt;
&lt;td&gt;mcr&lt;/td&gt;
&lt;td&gt;宏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;operand&lt;/td&gt;
&lt;td&gt;opnd&lt;/td&gt;
&lt;td&gt;操作数&lt;/td&gt;
&lt;td&gt;return&lt;/td&gt;
&lt;td&gt;ret&lt;/td&gt;
&lt;td&gt;返回&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;offset&lt;/td&gt;
&lt;td&gt;ofs&lt;/td&gt;
&lt;td&gt;偏移&lt;/td&gt;
&lt;td&gt;assemble&lt;/td&gt;
&lt;td&gt;asm&lt;/td&gt;
&lt;td&gt;汇编&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;clear&lt;/td&gt;
&lt;td&gt;clr&lt;/td&gt;
&lt;td&gt;清除&lt;/td&gt;
&lt;td&gt;interrupt&lt;/td&gt;
&lt;td&gt;intr&lt;/td&gt;
&lt;td&gt;中断&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;move&lt;/td&gt;
&lt;td&gt;mov&lt;/td&gt;
&lt;td&gt;移动&lt;/td&gt;
&lt;td&gt;priority&lt;/td&gt;
&lt;td&gt;prio&lt;/td&gt;
&lt;td&gt;优先级&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;instruction&lt;/td&gt;
&lt;td&gt;instr&lt;/td&gt;
&lt;td&gt;指令&lt;/td&gt;
&lt;td&gt;vector&lt;/td&gt;
&lt;td&gt;vect&lt;/td&gt;
&lt;td&gt;向量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&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;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;&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;temperature&lt;/td&gt;
&lt;td&gt;temper&lt;/td&gt;
&lt;td&gt;温度&lt;/td&gt;
&lt;td&gt;address&lt;/td&gt;
&lt;td&gt;addr&lt;/td&gt;
&lt;td&gt;地址&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;temporary&lt;/td&gt;
&lt;td&gt;tmp&lt;/td&gt;
&lt;td&gt;临时&lt;/td&gt;
&lt;td&gt;pointer&lt;/td&gt;
&lt;td&gt;ptr&lt;/td&gt;
&lt;td&gt;指针&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;counter&lt;/td&gt;
&lt;td&gt;ctr&lt;/td&gt;
&lt;td&gt;计数器&lt;/td&gt;
&lt;td&gt;buffer&lt;/td&gt;
&lt;td&gt;buf&lt;/td&gt;
&lt;td&gt;缓冲区&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;count&lt;/td&gt;
&lt;td&gt;cnt&lt;/td&gt;
&lt;td&gt;计数&lt;/td&gt;
&lt;td&gt;stack&lt;/td&gt;
&lt;td&gt;stk&lt;/td&gt;
&lt;td&gt;堆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flag&lt;/td&gt;
&lt;td&gt;flg&lt;/td&gt;
&lt;td&gt;旗帜、标识&lt;/td&gt;
&lt;td&gt;memory&lt;/td&gt;
&lt;td&gt;mem&lt;/td&gt;
&lt;td&gt;内存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;parameter&lt;/td&gt;
&lt;td&gt;par&lt;/td&gt;
&lt;td&gt;参数&lt;/td&gt;
&lt;td&gt;storage&lt;/td&gt;
&lt;td&gt;stg&lt;/td&gt;
&lt;td&gt;存储器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;argument&lt;/td&gt;
&lt;td&gt;arg&lt;/td&gt;
&lt;td&gt;参数&lt;/td&gt;
&lt;td&gt;block&lt;/td&gt;
&lt;td&gt;blk&lt;/td&gt;
&lt;td&gt;块&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;variable&lt;/td&gt;
&lt;td&gt;var&lt;/td&gt;
&lt;td&gt;变量&lt;/td&gt;
&lt;td&gt;allocate&lt;/td&gt;
&lt;td&gt;alloc&lt;/td&gt;
&lt;td&gt;分配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;arr&lt;/td&gt;
&lt;td&gt;数组&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;obj&lt;/td&gt;
&lt;td&gt;对象&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;str&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;character&lt;/td&gt;
&lt;td&gt;char&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;&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;increment&lt;/td&gt;
&lt;td&gt;inc&lt;/td&gt;
&lt;td&gt;增加&lt;/td&gt;
&lt;td&gt;average&lt;/td&gt;
&lt;td&gt;avg&lt;/td&gt;
&lt;td&gt;平均数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;decrease&lt;/td&gt;
&lt;td&gt;dec&lt;/td&gt;
&lt;td&gt;减少&lt;/td&gt;
&lt;td&gt;summation&lt;/td&gt;
&lt;td&gt;sum&lt;/td&gt;
&lt;td&gt;求和;总和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;addition&lt;/td&gt;
&lt;td&gt;add&lt;/td&gt;
&lt;td&gt;增加；加法&lt;/td&gt;
&lt;td&gt;calculate&lt;/td&gt;
&lt;td&gt;calc&lt;/td&gt;
&lt;td&gt;计算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;subtraction&lt;/td&gt;
&lt;td&gt;sub&lt;/td&gt;
&lt;td&gt;减少，减法&lt;/td&gt;
&lt;td&gt;total&lt;/td&gt;
&lt;td&gt;tot&lt;/td&gt;
&lt;td&gt;总计&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;multiplication&lt;/td&gt;
&lt;td&gt;mul&lt;/td&gt;
&lt;td&gt;乘法&lt;/td&gt;
&lt;td&gt;magnitude&lt;/td&gt;
&lt;td&gt;mag&lt;/td&gt;
&lt;td&gt;巨大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;division&lt;/td&gt;
&lt;td&gt;div&lt;/td&gt;
&lt;td&gt;除法；除以&lt;/td&gt;
&lt;td&gt;maximum&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;最大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;proportion&lt;/td&gt;
&lt;td&gt;kp&lt;/td&gt;
&lt;td&gt;比例&lt;/td&gt;
&lt;td&gt;minimum&lt;/td&gt;
&lt;td&gt;min&lt;/td&gt;
&lt;td&gt;最小&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;integral&lt;/td&gt;
&lt;td&gt;ki&lt;/td&gt;
&lt;td&gt;积分&lt;/td&gt;
&lt;td&gt;middle&lt;/td&gt;
&lt;td&gt;mid&lt;/td&gt;
&lt;td&gt;中间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;differential&lt;/td&gt;
&lt;td&gt;kd&lt;/td&gt;
&lt;td&gt;微分&lt;/td&gt;
&lt;td&gt;equivalent&lt;/td&gt;
&lt;td&gt;equiv&lt;/td&gt;
&lt;td&gt;相等的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;absolute&lt;/td&gt;
&lt;td&gt;abs&lt;/td&gt;
&lt;td&gt;绝对值&lt;/td&gt;
&lt;td&gt;greater equal&lt;/td&gt;
&lt;td&gt;ge&lt;/td&gt;
&lt;td&gt;大于等于&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;algorithm&lt;/td&gt;
&lt;td&gt;algo&lt;/td&gt;
&lt;td&gt;算法&lt;/td&gt;
&lt;td&gt;greater than&lt;/td&gt;
&lt;td&gt;gt&lt;/td&gt;
&lt;td&gt;大于&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exponent&lt;/td&gt;
&lt;td&gt;expo&lt;/td&gt;
&lt;td&gt;指数&lt;/td&gt;
&lt;td&gt;less equal&lt;/td&gt;
&lt;td&gt;le&lt;/td&gt;
&lt;td&gt;小于等于&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;recur&lt;/td&gt;
&lt;td&gt;recu&lt;/td&gt;
&lt;td&gt;递归&lt;/td&gt;
&lt;td&gt;less than&lt;/td&gt;
&lt;td&gt;lt&lt;/td&gt;
&lt;td&gt;小于&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;limit&lt;/td&gt;
&lt;td&gt;lim&lt;/td&gt;
&lt;td&gt;限制&lt;/td&gt;
&lt;td&gt;quarter&lt;/td&gt;
&lt;td&gt;quar&lt;/td&gt;
&lt;td&gt;四分之一&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mantissa&lt;/td&gt;
&lt;td&gt;mant&lt;/td&gt;
&lt;td&gt;尾数&lt;/td&gt;
&lt;td&gt;scale&lt;/td&gt;
&lt;td&gt;scal&lt;/td&gt;
&lt;td&gt;比例&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fraction&lt;/td&gt;
&lt;td&gt;fract&lt;/td&gt;
&lt;td&gt;小数&lt;/td&gt;
&lt;td&gt;double&lt;/td&gt;
&lt;td&gt;dbl&lt;/td&gt;
&lt;td&gt;两倍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;digit&lt;/td&gt;
&lt;td&gt;dig&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;number&lt;/td&gt;
&lt;td&gt;num&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;value&lt;/td&gt;
&lt;td&gt;val&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;&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;reference&lt;/td&gt;
&lt;td&gt;ref&lt;/td&gt;
&lt;td&gt;引用，参考&lt;/td&gt;
&lt;td&gt;between&lt;/td&gt;
&lt;td&gt;btw&lt;/td&gt;
&lt;td&gt;之间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;compare&lt;/td&gt;
&lt;td&gt;cmp&lt;/td&gt;
&lt;td&gt;比较&lt;/td&gt;
&lt;td&gt;interval&lt;/td&gt;
&lt;td&gt;intvl&lt;/td&gt;
&lt;td&gt;间隔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;different&lt;/td&gt;
&lt;td&gt;diff&lt;/td&gt;
&lt;td&gt;对比&lt;/td&gt;
&lt;td&gt;different&lt;/td&gt;
&lt;td&gt;diff&lt;/td&gt;
&lt;td&gt;区别&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;optimization&lt;/td&gt;
&lt;td&gt;opt&lt;/td&gt;
&lt;td&gt;最优化&lt;/td&gt;
&lt;td&gt;error&lt;/td&gt;
&lt;td&gt;err&lt;/td&gt;
&lt;td&gt;错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;degree&lt;/td&gt;
&lt;td&gt;deg&lt;/td&gt;
&lt;td&gt;度数，程度&lt;/td&gt;
&lt;td&gt;exception&lt;/td&gt;
&lt;td&gt;exc&lt;/td&gt;
&lt;td&gt;异常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;full&lt;/td&gt;
&lt;td&gt;ful&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;multiplex&lt;/td&gt;
&lt;td&gt;mux&lt;/td&gt;
&lt;td&gt;多路复用&lt;/td&gt;
&lt;td&gt;result&lt;/td&gt;
&lt;td&gt;rslt&lt;/td&gt;
&lt;td&gt;结果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;overflow&lt;/td&gt;
&lt;td&gt;ovf&lt;/td&gt;
&lt;td&gt;溢出&lt;/td&gt;
&lt;td&gt;complete&lt;/td&gt;
&lt;td&gt;comp&lt;/td&gt;
&lt;td&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;check&lt;/td&gt;
&lt;td&gt;chk&lt;/td&gt;
&lt;td&gt;检查，核对&lt;/td&gt;
&lt;td&gt;success&lt;/td&gt;
&lt;td&gt;succ&lt;/td&gt;
&lt;td&gt;成功&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;test&lt;/td&gt;
&lt;td&gt;tst&lt;/td&gt;
&lt;td&gt;测试&lt;/td&gt;
&lt;td&gt;error&lt;/td&gt;
&lt;td&gt;err&lt;/td&gt;
&lt;td&gt;错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;detect&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;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;measure&lt;/td&gt;
&lt;td&gt;meas&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;sample&lt;/td&gt;
&lt;td&gt;smp&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;make&lt;/td&gt;
&lt;td&gt;mk&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;&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;&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;timer&lt;/td&gt;
&lt;td&gt;tmr或tim&lt;/td&gt;
&lt;td&gt;定时器&lt;/td&gt;
&lt;td&gt;new&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;新的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;tm&lt;/td&gt;
&lt;td&gt;时间&lt;/td&gt;
&lt;td&gt;old&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;老的；旧的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;second&lt;/td&gt;
&lt;td&gt;sec&lt;/td&gt;
&lt;td&gt;秒、第二&lt;/td&gt;
&lt;td&gt;now&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;现在；目前&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minute&lt;/td&gt;
&lt;td&gt;min&lt;/td&gt;
&lt;td&gt;分钟&lt;/td&gt;
&lt;td&gt;current&lt;/td&gt;
&lt;td&gt;cur&lt;/td&gt;
&lt;td&gt;当前&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hour&lt;/td&gt;
&lt;td&gt;hr&lt;/td&gt;
&lt;td&gt;小时&lt;/td&gt;
&lt;td&gt;previous&lt;/td&gt;
&lt;td&gt;prev&lt;/td&gt;
&lt;td&gt;先前的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;day&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;天&lt;/td&gt;
&lt;td&gt;delay&lt;/td&gt;
&lt;td&gt;dly&lt;/td&gt;
&lt;td&gt;延迟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;month&lt;/td&gt;
&lt;td&gt;mth&lt;/td&gt;
&lt;td&gt;月&lt;/td&gt;
&lt;td&gt;expiration&lt;/td&gt;
&lt;td&gt;expi&lt;/td&gt;
&lt;td&gt;过期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;year&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;年&lt;/td&gt;
&lt;td&gt;next&lt;/td&gt;
&lt;td&gt;nex&lt;/td&gt;
&lt;td&gt;下一个&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;period&lt;/td&gt;
&lt;td&gt;perd&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;timestamp&lt;/td&gt;
&lt;td&gt;ts&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;timeout&lt;/td&gt;
&lt;td&gt;to&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;age&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;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&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;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;&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;positon&lt;/td&gt;
&lt;td&gt;pos&lt;/td&gt;
&lt;td&gt;位置&lt;/td&gt;
&lt;td&gt;origin&lt;/td&gt;
&lt;td&gt;org&lt;/td&gt;
&lt;td&gt;起源，原点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;coordinates&lt;/td&gt;
&lt;td&gt;coord&lt;/td&gt;
&lt;td&gt;坐标系&lt;/td&gt;
&lt;td&gt;point&lt;/td&gt;
&lt;td&gt;pt&lt;/td&gt;
&lt;td&gt;点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;row&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;行&lt;/td&gt;
&lt;td&gt;rect&lt;/td&gt;
&lt;td&gt;rc&lt;/td&gt;
&lt;td&gt;矩形&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;column&lt;/td&gt;
&lt;td&gt;col&lt;/td&gt;
&lt;td&gt;列&lt;/td&gt;
&lt;td&gt;rectangle&lt;/td&gt;
&lt;td&gt;rect&lt;/td&gt;
&lt;td&gt;长方形&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vertical&lt;/td&gt;
&lt;td&gt;vert&amp;#x2F;v&lt;/td&gt;
&lt;td&gt;垂直&lt;/td&gt;
&lt;td&gt;cylinder&lt;/td&gt;
&lt;td&gt;cyl&lt;/td&gt;
&lt;td&gt;圆柱体&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;horizontal&lt;/td&gt;
&lt;td&gt;hori&amp;#x2F;h&lt;/td&gt;
&lt;td&gt;水平的&lt;/td&gt;
&lt;td&gt;length&lt;/td&gt;
&lt;td&gt;len&lt;/td&gt;
&lt;td&gt;长度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dimension&lt;/td&gt;
&lt;td&gt;dim&lt;/td&gt;
&lt;td&gt;维度&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;hi&lt;/td&gt;
&lt;td&gt;高度；高的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;permutation&lt;/td&gt;
&lt;td&gt;perm&lt;/td&gt;
&lt;td&gt;排列&lt;/td&gt;
&lt;td&gt;invert&lt;/td&gt;
&lt;td&gt;invt&lt;/td&gt;
&lt;td&gt;颠倒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&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;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;information&lt;/td&gt;
&lt;td&gt;info&lt;/td&gt;
&lt;td&gt;信息&lt;/td&gt;
&lt;td&gt;command&lt;/td&gt;
&lt;td&gt;cmd&lt;/td&gt;
&lt;td&gt;命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;communication&lt;/td&gt;
&lt;td&gt;comu&lt;/td&gt;
&lt;td&gt;通信&lt;/td&gt;
&lt;td&gt;config&lt;/td&gt;
&lt;td&gt;conf&lt;/td&gt;
&lt;td&gt;配置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;message&lt;/td&gt;
&lt;td&gt;msg&lt;/td&gt;
&lt;td&gt;消息；信息&lt;/td&gt;
&lt;td&gt;request&lt;/td&gt;
&lt;td&gt;req&lt;/td&gt;
&lt;td&gt;请求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;packet&lt;/td&gt;
&lt;td&gt;pkt&lt;/td&gt;
&lt;td&gt;信息包&lt;/td&gt;
&lt;td&gt;acknowledge&lt;/td&gt;
&lt;td&gt;ack&lt;/td&gt;
&lt;td&gt;承认；应答&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;package&lt;/td&gt;
&lt;td&gt;pkg&lt;/td&gt;
&lt;td&gt;包&lt;/td&gt;
&lt;td&gt;answer&lt;/td&gt;
&lt;td&gt;ans&lt;/td&gt;
&lt;td&gt;回答&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;protocol&lt;/td&gt;
&lt;td&gt;proto&lt;/td&gt;
&lt;td&gt;协议&lt;/td&gt;
&lt;td&gt;response&lt;/td&gt;
&lt;td&gt;rsp&lt;/td&gt;
&lt;td&gt;响应&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stream&lt;/td&gt;
&lt;td&gt;stm&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;header&lt;/td&gt;
&lt;td&gt;hdr&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;index&lt;/td&gt;
&lt;td&gt;idx&lt;/td&gt;
&lt;td&gt;索引&lt;/td&gt;
&lt;td&gt;decode&lt;/td&gt;
&lt;td&gt;deco&lt;/td&gt;
&lt;td&gt;解码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;frame&lt;/td&gt;
&lt;td&gt;frm&lt;/td&gt;
&lt;td&gt;帧率；框架&lt;/td&gt;
&lt;td&gt;encode&lt;/td&gt;
&lt;td&gt;enc&lt;/td&gt;
&lt;td&gt;编码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;clock&lt;/td&gt;
&lt;td&gt;clok&lt;/td&gt;
&lt;td&gt;时钟&lt;/td&gt;
&lt;td&gt;coding&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;译码；编码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;receive&lt;/td&gt;
&lt;td&gt;recv&lt;/td&gt;
&lt;td&gt;接收&lt;/td&gt;
&lt;td&gt;authentication&lt;/td&gt;
&lt;td&gt;auth&lt;/td&gt;
&lt;td&gt;校验&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;send&lt;/td&gt;
&lt;td&gt;send&lt;/td&gt;
&lt;td&gt;发送&lt;/td&gt;
&lt;td&gt;authentication code&lt;/td&gt;
&lt;td&gt;authcode&lt;/td&gt;
&lt;td&gt;校验码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;context&lt;/td&gt;
&lt;td&gt;ctx&lt;/td&gt;
&lt;td&gt;上下文&lt;/td&gt;
&lt;td&gt;unknown&lt;/td&gt;
&lt;td&gt;unk&lt;/td&gt;
&lt;td&gt;未知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;connect&lt;/td&gt;
&lt;td&gt;con&lt;/td&gt;
&lt;td&gt;连接&lt;/td&gt;
&lt;td&gt;extension&lt;/td&gt;
&lt;td&gt;ext&lt;/td&gt;
&lt;td&gt;扩展&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ethernet&lt;/td&gt;
&lt;td&gt;eth&lt;/td&gt;
&lt;td&gt;以太网&lt;/td&gt;
&lt;td&gt;expand&lt;/td&gt;
&lt;td&gt;expa&lt;/td&gt;
&lt;td&gt;扩展&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mailbox&lt;/td&gt;
&lt;td&gt;mbox&lt;/td&gt;
&lt;td&gt;邮箱&lt;/td&gt;
&lt;td&gt;field&lt;/td&gt;
&lt;td&gt;fld&lt;/td&gt;
&lt;td&gt;字段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mask&lt;/td&gt;
&lt;td&gt;msk&lt;/td&gt;
&lt;td&gt;掩码&lt;/td&gt;
&lt;td&gt;identifier&lt;/td&gt;
&lt;td&gt;id&lt;/td&gt;
&lt;td&gt;标识符&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;decode&lt;/td&gt;
&lt;td&gt;deco&lt;/td&gt;
&lt;td&gt;解码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;encode&lt;/td&gt;
&lt;td&gt;enc&lt;/td&gt;
&lt;td&gt;编码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&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;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;&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;construct&lt;/td&gt;
&lt;td&gt;cons&lt;/td&gt;
&lt;td&gt;构建&lt;/td&gt;
&lt;td&gt;select&lt;/td&gt;
&lt;td&gt;sel&lt;/td&gt;
&lt;td&gt;选择&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;control&lt;/td&gt;
&lt;td&gt;ctl&lt;/td&gt;
&lt;td&gt;控制&lt;/td&gt;
&lt;td&gt;delete&lt;/td&gt;
&lt;td&gt;del&lt;/td&gt;
&lt;td&gt;删除&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;execute&lt;/td&gt;
&lt;td&gt;exec&lt;/td&gt;
&lt;td&gt;执行&lt;/td&gt;
&lt;td&gt;insert&lt;/td&gt;
&lt;td&gt;ins&lt;/td&gt;
&lt;td&gt;插入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;register&lt;/td&gt;
&lt;td&gt;reg&lt;/td&gt;
&lt;td&gt;注册&lt;/td&gt;
&lt;td&gt;copy&lt;/td&gt;
&lt;td&gt;cpy&lt;/td&gt;
&lt;td&gt;复制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;click&lt;/td&gt;
&lt;td&gt;clk&lt;/td&gt;
&lt;td&gt;点击&lt;/td&gt;
&lt;td&gt;paste&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;粘贴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;back&lt;/td&gt;
&lt;td&gt;bk&lt;/td&gt;
&lt;td&gt;后退&lt;/td&gt;
&lt;td&gt;cut&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;剪切&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;disable&lt;/td&gt;
&lt;td&gt;dis&lt;/td&gt;
&lt;td&gt;使失效&lt;/td&gt;
&lt;td&gt;print&lt;/td&gt;
&lt;td&gt;Prn&amp;#x2F;prt&lt;/td&gt;
&lt;td&gt;打印&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;enable&lt;/td&gt;
&lt;td&gt;en&lt;/td&gt;
&lt;td&gt;使能&lt;/td&gt;
&lt;td&gt;input&lt;/td&gt;
&lt;td&gt;in&lt;/td&gt;
&lt;td&gt;输入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;effective&lt;/td&gt;
&lt;td&gt;eff&lt;/td&gt;
&lt;td&gt;有效的&lt;/td&gt;
&lt;td&gt;output&lt;/td&gt;
&lt;td&gt;out&lt;/td&gt;
&lt;td&gt;输出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;invalid&lt;/td&gt;
&lt;td&gt;inv&lt;/td&gt;
&lt;td&gt;无效的&lt;/td&gt;
&lt;td&gt;lock&lt;/td&gt;
&lt;td&gt;lck&lt;/td&gt;
&lt;td&gt;上锁&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;logic&lt;/td&gt;
&lt;td&gt;lgc&lt;/td&gt;
&lt;td&gt;逻辑的&lt;/td&gt;
&lt;td&gt;unlock&lt;/td&gt;
&lt;td&gt;unlk&lt;/td&gt;
&lt;td&gt;解锁&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;read&lt;/td&gt;
&lt;td&gt;r&lt;/td&gt;
&lt;td&gt;读&lt;/td&gt;
&lt;td&gt;scan&lt;/td&gt;
&lt;td&gt;sca&lt;/td&gt;
&lt;td&gt;扫描&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;write&lt;/td&gt;
&lt;td&gt;w&lt;/td&gt;
&lt;td&gt;写&lt;/td&gt;
&lt;td&gt;search&lt;/td&gt;
&lt;td&gt;srch&lt;/td&gt;
&lt;td&gt;搜索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&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;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;&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;iteration&lt;/td&gt;
&lt;td&gt;itr&lt;/td&gt;
&lt;td&gt;迭代；反复；重复&lt;/td&gt;
&lt;td&gt;initialization&lt;/td&gt;
&lt;td&gt;init&lt;/td&gt;
&lt;td&gt;初始化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;version&lt;/td&gt;
&lt;td&gt;ver&lt;/td&gt;
&lt;td&gt;版本&lt;/td&gt;
&lt;td&gt;program&lt;/td&gt;
&lt;td&gt;prg&lt;/td&gt;
&lt;td&gt;程序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;password&lt;/td&gt;
&lt;td&gt;psw&lt;/td&gt;
&lt;td&gt;密码&lt;/td&gt;
&lt;td&gt;system&lt;/td&gt;
&lt;td&gt;sys&lt;/td&gt;
&lt;td&gt;系统&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;permission&lt;/td&gt;
&lt;td&gt;perms&lt;/td&gt;
&lt;td&gt;许可&lt;/td&gt;
&lt;td&gt;android&lt;/td&gt;
&lt;td&gt;adr&lt;/td&gt;
&lt;td&gt;安卓操作系统&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;device&lt;/td&gt;
&lt;td&gt;dev&lt;/td&gt;
&lt;td&gt;设备&lt;/td&gt;
&lt;td&gt;application&lt;/td&gt;
&lt;td&gt;app&lt;/td&gt;
&lt;td&gt;应用程序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;administrator&lt;/td&gt;
&lt;td&gt;adm&lt;/td&gt;
&lt;td&gt;管理员&lt;/td&gt;
&lt;td&gt;driver&lt;/td&gt;
&lt;td&gt;drv&lt;/td&gt;
&lt;td&gt;驱动&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;manager&lt;/td&gt;
&lt;td&gt;mgr&lt;/td&gt;
&lt;td&gt;管理者，管理器&lt;/td&gt;
&lt;td&gt;update&lt;/td&gt;
&lt;td&gt;upd&lt;/td&gt;
&lt;td&gt;更新&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;standard&lt;/td&gt;
&lt;td&gt;std&lt;/td&gt;
&lt;td&gt;标准&lt;/td&gt;
&lt;td&gt;upgrade&lt;/td&gt;
&lt;td&gt;upg&lt;/td&gt;
&lt;td&gt;升级&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;library&lt;/td&gt;
&lt;td&gt;lib&lt;/td&gt;
&lt;td&gt;静态库&lt;/td&gt;
&lt;td&gt;environment&lt;/td&gt;
&lt;td&gt;env&lt;/td&gt;
&lt;td&gt;运行环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;database&lt;/td&gt;
&lt;td&gt;db&lt;/td&gt;
&lt;td&gt;数据库&lt;/td&gt;
&lt;td&gt;process&lt;/td&gt;
&lt;td&gt;proc&lt;/td&gt;
&lt;td&gt;进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dynamic&lt;/td&gt;
&lt;td&gt;dyna&lt;/td&gt;
&lt;td&gt;动态&lt;/td&gt;
&lt;td&gt;ready&lt;/td&gt;
&lt;td&gt;rdy&lt;/td&gt;
&lt;td&gt;就绪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;synchronization&lt;/td&gt;
&lt;td&gt;sync&lt;/td&gt;
&lt;td&gt;同步&lt;/td&gt;
&lt;td&gt;suspend&lt;/td&gt;
&lt;td&gt;susp&lt;/td&gt;
&lt;td&gt;挂起&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;asynchronization&lt;/td&gt;
&lt;td&gt;asyn&lt;/td&gt;
&lt;td&gt;异步&lt;/td&gt;
&lt;td&gt;status&lt;/td&gt;
&lt;td&gt;sts&lt;/td&gt;
&lt;td&gt;状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;link&lt;/td&gt;
&lt;td&gt;lnk&lt;/td&gt;
&lt;td&gt;链接&lt;/td&gt;
&lt;td&gt;signal&lt;/td&gt;
&lt;td&gt;sig&lt;/td&gt;
&lt;td&gt;信号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server&lt;/td&gt;
&lt;td&gt;svr&lt;/td&gt;
&lt;td&gt;服务&lt;/td&gt;
&lt;td&gt;semaphore&lt;/td&gt;
&lt;td&gt;sem&lt;/td&gt;
&lt;td&gt;信号量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;executable file&lt;/td&gt;
&lt;td&gt;exe&lt;/td&gt;
&lt;td&gt;可执行文件&lt;/td&gt;
&lt;td&gt;scheduler&lt;/td&gt;
&lt;td&gt;scher&lt;/td&gt;
&lt;td&gt;调度器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sequence&lt;/td&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;序列&lt;/td&gt;
&lt;td&gt;task&lt;/td&gt;
&lt;td&gt;tsk&lt;/td&gt;
&lt;td&gt;任务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;serialize&lt;/td&gt;
&lt;td&gt;seri&lt;/td&gt;
&lt;td&gt;序列化&lt;/td&gt;
&lt;td&gt;statistic&lt;/td&gt;
&lt;td&gt;stat&lt;/td&gt;
&lt;td&gt;统计&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;virus&lt;/td&gt;
&lt;td&gt;vir&lt;/td&gt;
&lt;td&gt;病毒&lt;/td&gt;
&lt;td&gt;process&lt;/td&gt;
&lt;td&gt;proc&lt;/td&gt;
&lt;td&gt;进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;ready&lt;/td&gt;
&lt;td&gt;rdy&lt;/td&gt;
&lt;td&gt;就绪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&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;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;&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;directory&lt;/td&gt;
&lt;td&gt;dir&lt;/td&gt;
&lt;td&gt;目录&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://so.csdn.net/so/search?q=bitmap&amp;spm=1001.2101.3001.7020&#34;&gt;bitmap&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bmp&lt;/td&gt;
&lt;td&gt;位图纹理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;list&lt;/td&gt;
&lt;td&gt;lst&lt;/td&gt;
&lt;td&gt;列表&lt;/td&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;img&lt;/td&gt;
&lt;td&gt;图像&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;log&lt;/td&gt;
&lt;td&gt;log&lt;/td&gt;
&lt;td&gt;日志&lt;/td&gt;
&lt;td&gt;picture&lt;/td&gt;
&lt;td&gt;pic&lt;/td&gt;
&lt;td&gt;图片&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;document&lt;/td&gt;
&lt;td&gt;doc&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;color&lt;/td&gt;
&lt;td&gt;clr&lt;/td&gt;
&lt;td&gt;颜色&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;text&lt;/td&gt;
&lt;td&gt;txt&lt;/td&gt;
&lt;td&gt;文本&lt;/td&gt;
&lt;td&gt;record&lt;/td&gt;
&lt;td&gt;rcd&lt;/td&gt;
&lt;td&gt;记录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;table&lt;/td&gt;
&lt;td&gt;tab或tbl&lt;/td&gt;
&lt;td&gt;表格&lt;/td&gt;
&lt;td&gt;dictionary&lt;/td&gt;
&lt;td&gt;dict&lt;/td&gt;
&lt;td&gt;词典、字典&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;manual&lt;/td&gt;
&lt;td&gt;man&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;specification&lt;/td&gt;
&lt;td&gt;spec&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;&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;&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;screen&lt;/td&gt;
&lt;td&gt;scr&lt;/td&gt;
&lt;td&gt;屏幕&lt;/td&gt;
&lt;td&gt;button&lt;/td&gt;
&lt;td&gt;btn&lt;/td&gt;
&lt;td&gt;按钮&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;display&lt;/td&gt;
&lt;td&gt;disp&lt;/td&gt;
&lt;td&gt;显示&lt;/td&gt;
&lt;td&gt;component&lt;/td&gt;
&lt;td&gt;com&lt;/td&gt;
&lt;td&gt;组件(多用于ui组件目录命名)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;util&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;window&lt;/td&gt;
&lt;td&gt;wnd&lt;/td&gt;
&lt;td&gt;窗口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;attribute&lt;/td&gt;
&lt;td&gt;attr&lt;/td&gt;
&lt;td&gt;属性&lt;/td&gt;
&lt;td&gt;dialog&lt;/td&gt;
&lt;td&gt;dlg&lt;/td&gt;
&lt;td&gt;对话框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;feature&lt;/td&gt;
&lt;td&gt;fea&lt;/td&gt;
&lt;td&gt;特征&lt;/td&gt;
&lt;td&gt;cursor&lt;/td&gt;
&lt;td&gt;csr&lt;/td&gt;
&lt;td&gt;光标&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bottom&lt;/td&gt;
&lt;td&gt;btm&lt;/td&gt;
&lt;td&gt;底部&lt;/td&gt;
&lt;td&gt;markdown&lt;/td&gt;
&lt;td&gt;md&lt;/td&gt;
&lt;td&gt;文本标记语言&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;descriptor&lt;/td&gt;
&lt;td&gt;desc&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;visible&lt;/td&gt;
&lt;td&gt;vis&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;&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;&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;frequency&lt;/td&gt;
&lt;td&gt;freq&lt;/td&gt;
&lt;td&gt;频率&lt;/td&gt;
&lt;td&gt;poweron&lt;/td&gt;
&lt;td&gt;pwron&lt;/td&gt;
&lt;td&gt;上电&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;voltage&lt;/td&gt;
&lt;td&gt;vol&lt;/td&gt;
&lt;td&gt;电压&lt;/td&gt;
&lt;td&gt;back electromotive force&lt;/td&gt;
&lt;td&gt;BEF&lt;/td&gt;
&lt;td&gt;反电动势&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;current&lt;/td&gt;
&lt;td&gt;cur&lt;/td&gt;
&lt;td&gt;电流&lt;/td&gt;
&lt;td&gt;speed&lt;/td&gt;
&lt;td&gt;spd&lt;/td&gt;
&lt;td&gt;速度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;power&lt;/td&gt;
&lt;td&gt;pwr&lt;/td&gt;
&lt;td&gt;功率&amp;#x2F;电源&lt;/td&gt;
&lt;td&gt;electric&lt;/td&gt;
&lt;td&gt;elec&lt;/td&gt;
&lt;td&gt;电子的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;trigger&lt;/td&gt;
&lt;td&gt;trig&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;threshold&lt;/td&gt;
&lt;td&gt;thold&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;switch&lt;/td&gt;
&lt;td&gt;sw&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;toggle&lt;/td&gt;
&lt;td&gt;tgl&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;&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;&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;resource&lt;/td&gt;
&lt;td&gt;res&lt;/td&gt;
&lt;td&gt;资源&lt;/td&gt;
&lt;td&gt;prefix&lt;/td&gt;
&lt;td&gt;pre&lt;/td&gt;
&lt;td&gt;前缀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;region&lt;/td&gt;
&lt;td&gt;rgn&lt;/td&gt;
&lt;td&gt;区域、领域&lt;/td&gt;
&lt;td&gt;reactive&lt;/td&gt;
&lt;td&gt;react&lt;/td&gt;
&lt;td&gt;有反应的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;group&lt;/td&gt;
&lt;td&gt;grp&lt;/td&gt;
&lt;td&gt;组&lt;/td&gt;
&lt;td&gt;recall&lt;/td&gt;
&lt;td&gt;rcl&lt;/td&gt;
&lt;td&gt;召回&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;assemble&lt;/td&gt;
&lt;td&gt;asm&lt;/td&gt;
&lt;td&gt;集合&lt;/td&gt;
&lt;td&gt;release&lt;/td&gt;
&lt;td&gt;rel&lt;/td&gt;
&lt;td&gt;发布&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;repeat&lt;/td&gt;
&lt;td&gt;rpt&lt;/td&gt;
&lt;td&gt;重复&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;action&lt;/td&gt;
&lt;td&gt;act&lt;/td&gt;
&lt;td&gt;动作&lt;/td&gt;
&lt;td&gt;duplicate&lt;/td&gt;
&lt;td&gt;dup&lt;/td&gt;
&lt;td&gt;重复&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;common&lt;/td&gt;
&lt;td&gt;comm&lt;/td&gt;
&lt;td&gt;通用&lt;/td&gt;
&lt;td&gt;repository&lt;/td&gt;
&lt;td&gt;repo&lt;/td&gt;
&lt;td&gt;仓库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dependency&lt;/td&gt;
&lt;td&gt;dep&lt;/td&gt;
&lt;td&gt;依赖&lt;/td&gt;
&lt;td&gt;reserve&lt;/td&gt;
&lt;td&gt;resv&lt;/td&gt;
&lt;td&gt;保留&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;debug&lt;/td&gt;
&lt;td&gt;dbg&lt;/td&gt;
&lt;td&gt;调试&lt;/td&gt;
&lt;td&gt;reset&lt;/td&gt;
&lt;td&gt;rst&lt;/td&gt;
&lt;td&gt;重置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;direct&lt;/td&gt;
&lt;td&gt;dirt&lt;/td&gt;
&lt;td&gt;直接的&lt;/td&gt;
&lt;td&gt;resume&lt;/td&gt;
&lt;td&gt;resu&lt;/td&gt;
&lt;td&gt;重新开始&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;engine&lt;/td&gt;
&lt;td&gt;eng&lt;/td&gt;
&lt;td&gt;引擎&lt;/td&gt;
&lt;td&gt;reverse&lt;/td&gt;
&lt;td&gt;revs&lt;/td&gt;
&lt;td&gt;反转&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;experiment&lt;/td&gt;
&lt;td&gt;exp&lt;/td&gt;
&lt;td&gt;实验&lt;/td&gt;
&lt;td&gt;schedule&lt;/td&gt;
&lt;td&gt;sch&lt;/td&gt;
&lt;td&gt;计划&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exposure&lt;/td&gt;
&lt;td&gt;expo&lt;/td&gt;
&lt;td&gt;曝光&lt;/td&gt;
&lt;td&gt;section&lt;/td&gt;
&lt;td&gt;sect&lt;/td&gt;
&lt;td&gt;节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;generate&lt;/td&gt;
&lt;td&gt;gen&lt;/td&gt;
&lt;td&gt;产生&lt;/td&gt;
&lt;td&gt;segment&lt;/td&gt;
&lt;td&gt;seg&lt;/td&gt;
&lt;td&gt;段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;handler&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;处理者&lt;/td&gt;
&lt;td&gt;strategy&lt;/td&gt;
&lt;td&gt;stra&lt;/td&gt;
&lt;td&gt;策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;marshal&lt;/td&gt;
&lt;td&gt;mar&lt;/td&gt;
&lt;td&gt;序列化&lt;/td&gt;
&lt;td&gt;change&lt;/td&gt;
&lt;td&gt;chg&lt;/td&gt;
&lt;td&gt;改变&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unmarshal&lt;/td&gt;
&lt;td&gt;unmar&lt;/td&gt;
&lt;td&gt;反序列化&lt;/td&gt;
&lt;td&gt;convert&lt;/td&gt;
&lt;td&gt;conv&lt;/td&gt;
&lt;td&gt;转换&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deserialize&lt;/td&gt;
&lt;td&gt;dese&lt;/td&gt;
&lt;td&gt;反序列化&lt;/td&gt;
&lt;td&gt;translate&lt;/td&gt;
&lt;td&gt;tran&lt;/td&gt;
&lt;td&gt;翻译，转换&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;manufacturer&lt;/td&gt;
&lt;td&gt;mft&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;positive&lt;/td&gt;
&lt;td&gt;posi&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;negative&lt;/td&gt;
&lt;td&gt;neg&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;neutral&lt;/td&gt;
&lt;td&gt;neut&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;quality&lt;/td&gt;
&lt;td&gt;qlty&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;properties&lt;/td&gt;
&lt;td&gt;prop&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;performance&lt;/td&gt;
&lt;td&gt;perf&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;product&lt;/td&gt;
&lt;td&gt;prod&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;profile&lt;/td&gt;
&lt;td&gt;pf&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;project&lt;/td&gt;
&lt;td&gt;proj&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;protect&lt;/td&gt;
&lt;td&gt;prot&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;proxy&lt;/td&gt;
&lt;td&gt;prx&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;public&lt;/td&gt;
&lt;td&gt;pub&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;&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;p&gt;&lt;strong&gt;常用反义词组&lt;/strong&gt;&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;add&lt;/td&gt;
&lt;td&gt;remove&lt;/td&gt;
&lt;td&gt;添加&amp;#x2F;移除&lt;/td&gt;
&lt;td&gt;min&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;最小&amp;#x2F;最大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;add&lt;/td&gt;
&lt;td&gt;delete&lt;/td&gt;
&lt;td&gt;添加&amp;#x2F;删除&lt;/td&gt;
&lt;td&gt;old&lt;/td&gt;
&lt;td&gt;new&lt;/td&gt;
&lt;td&gt;旧&amp;#x2F;新&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;begin&lt;/td&gt;
&lt;td&gt;end&lt;/td&gt;
&lt;td&gt;开始&amp;#x2F;最后&lt;/td&gt;
&lt;td&gt;start&lt;/td&gt;
&lt;td&gt;stop&lt;/td&gt;
&lt;td&gt;开始&amp;#x2F;停止&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;create&lt;/td&gt;
&lt;td&gt;destroy&lt;/td&gt;
&lt;td&gt;创建&amp;#x2F;破坏&lt;/td&gt;
&lt;td&gt;next&lt;/td&gt;
&lt;td&gt;previous&lt;/td&gt;
&lt;td&gt;下个&amp;#x2F;以前的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;insert&lt;/td&gt;
&lt;td&gt;delete&lt;/td&gt;
&lt;td&gt;插入&amp;#x2F;删除&lt;/td&gt;
&lt;td&gt;source&lt;/td&gt;
&lt;td&gt;target&lt;/td&gt;
&lt;td&gt;源头&amp;#x2F;目标&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;first&lt;/td&gt;
&lt;td&gt;last&lt;/td&gt;
&lt;td&gt;第一&amp;#x2F;最后&lt;/td&gt;
&lt;td&gt;show&lt;/td&gt;
&lt;td&gt;hide&lt;/td&gt;
&lt;td&gt;显示&amp;#x2F;隐藏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get&lt;/td&gt;
&lt;td&gt;release&lt;/td&gt;
&lt;td&gt;获得&amp;#x2F;释放&lt;/td&gt;
&lt;td&gt;send&lt;/td&gt;
&lt;td&gt;receive&lt;/td&gt;
&lt;td&gt;发送&amp;#x2F;接收&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;put&lt;/td&gt;
&lt;td&gt;get&lt;/td&gt;
&lt;td&gt;放下&amp;#x2F;获得&lt;/td&gt;
&lt;td&gt;source&lt;/td&gt;
&lt;td&gt;destination&lt;/td&gt;
&lt;td&gt;源头&amp;#x2F;目的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;increment&lt;/td&gt;
&lt;td&gt;decrement&lt;/td&gt;
&lt;td&gt;增加&amp;#x2F;减少&lt;/td&gt;
&lt;td&gt;cut&lt;/td&gt;
&lt;td&gt;paste&lt;/td&gt;
&lt;td&gt;剪切&amp;#x2F;粘贴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lock&lt;/td&gt;
&lt;td&gt;unlock&lt;/td&gt;
&lt;td&gt;上锁&amp;#x2F;解锁&lt;/td&gt;
&lt;td&gt;up&lt;/td&gt;
&lt;td&gt;down&lt;/td&gt;
&lt;td&gt;上&amp;#x2F;下&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;open&lt;/td&gt;
&lt;td&gt;close&lt;/td&gt;
&lt;td&gt;打开&amp;#x2F;关闭&lt;/td&gt;
&lt;td&gt;top&lt;/td&gt;
&lt;td&gt;btm&lt;/td&gt;
&lt;td&gt;顶部&amp;#x2F;底部&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2023/c98db97a/</guid>
            <title>RustDesk</title>
            <link>https://www.oikiou.top/2023/c98db97a/</link>
            <category>RustDesk</category>
            <pubDate>Sat, 16 Dec 2023 18:23:05 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;Server-搭建&#34;&gt;&lt;a href=&#34;#Server-搭建&#34; class=&#34;headerlink&#34; title=&#34;Server 搭建&#34;&gt;&lt;/a&gt;Server 搭建&lt;/h1&gt;&lt;p&gt;RustDesk Server OSS&lt;strong&gt;功能简单&lt;/strong&gt;，&lt;strong&gt;无需许可证&lt;/strong&gt;，RustDesk Server Pro&lt;strong&gt;功能更强&lt;/strong&gt;，&lt;strong&gt;需要许可证&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;参考官方&lt;a href=&#34;https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/&#34;&gt;文档&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;RustDesk-Server-OSS-搭建&#34;&gt;&lt;a href=&#34;#RustDesk-Server-OSS-搭建&#34; class=&#34;headerlink&#34; title=&#34;RustDesk Server OSS 搭建&#34;&gt;&lt;/a&gt;RustDesk Server OSS 搭建&lt;/h2&gt;&lt;p&gt;RustDesk Server OSS有两个程序&lt;code&gt;hbbs&lt;/code&gt;和&lt;code&gt;hbbr&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hbbs&lt;/code&gt;- RustDesk ID&amp;#x2F;Rendezvous 服务器&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hbbr&lt;/code&gt;- RustDesk 中继服务器&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;  默认情况下，&lt;/p&gt;
&lt;p&gt;  &lt;code&gt;hbbs&lt;/code&gt; 侦听 21115 (TCP)、21116 (TCP&amp;#x2F;UDP) 和 21118 (TCP)，&lt;/p&gt;
&lt;p&gt;  &lt;code&gt;hbbr&lt;/code&gt; 侦听 21117 (TCP) 、21119（TCP）。&lt;/p&gt;
&lt;p&gt;  请务必在防火墙中打开这些端口。 &lt;strong&gt;请注意，TCP 和 UDP 都应启用 21116。&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;  21115 用于 NAT 类型测试，21116&amp;#x2F;UDP 用于 ID 注册，心跳服务，21116&amp;#x2F;TCP用于TCP打洞和连接服务，21117用于Relay服务，21118和21119用于支持Web客户端。 &lt;/p&gt;
&lt;p&gt;  &lt;em&gt;如果不需要Web客户端（21118、21119）支持，可以禁用相应端口。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;TCP (&lt;strong&gt;21115、21116、21117、21118、21119&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;UDP (&lt;strong&gt;21116&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关闭防火墙对端口的封锁：&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;ufw allow 21115:21119/tcp&lt;br&gt;ufw allow 21116/udp&lt;br&gt;sudo ufw enable&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h3 id=&#34;服务器硬件要求&#34;&gt;&lt;a href=&#34;#服务器硬件要求&#34; class=&#34;headerlink&#34; title=&#34;服务器硬件要求&#34;&gt;&lt;/a&gt;服务器硬件要求&lt;/h3&gt;&lt;blockquote&gt;
&lt;h5 id=&#34;服务器要求&#34;&gt;&lt;a href=&#34;#服务器要求&#34; class=&#34;headerlink&#34; title=&#34;服务器要求&#34;&gt;&lt;/a&gt;服务器要求&lt;/h5&gt;&lt;p&gt;  硬件要求很低；基础云服务器最低配置就够了，对CPU和内存的要求也很低。您还可以使用 Raspberry Pi 或类似的东西。从网络规模来看，如果TCP打洞直连失败，会消耗中继流量。中继连接的流量在 30 K&amp;#x2F;s 到 3 M&amp;#x2F;s（1920x1080 屏幕）之间，具体取决于分辨率设置和屏幕更新。如果只是办公需求，流量在100K&amp;#x2F;s左右。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;hbbr-的运行&#34;&gt;&lt;a href=&#34;#hbbr-的运行&#34; class=&#34;headerlink&#34; title=&#34;hbbr 的运行&#34;&gt;&lt;/a&gt;hbbr 的运行&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;code&gt;hbbs&lt;/code&gt;第一次运行时，会自动生成一对加密的私钥和&lt;strong&gt;公钥&lt;/strong&gt;（分别位于&lt;code&gt;id_ed25519&lt;/code&gt;和&lt;code&gt;id_ed25519.pub&lt;/code&gt;运行目录下的文件），其主要目的是通信加密。&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt;公钥就是我们需要填入Client端的key&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  如果您想禁止没有密钥的用户建立非加密连接，请在运行时添加&lt;code&gt;-k _&lt;/code&gt;参数&lt;code&gt;hbbs&lt;/code&gt;和&lt;code&gt;hbbr&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;  &lt;em&gt;注意不要漏写了下划线&lt;/em&gt; 例如：&lt;/p&gt;
  &lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;./hbbs -r &amp;lt;relay-server-ip[:port]&amp;gt; -k _&lt;br&gt;./hbbr -k _&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;使用Docker搭建&#34;&gt;&lt;a href=&#34;#使用Docker搭建&#34; class=&#34;headerlink&#34; title=&#34;使用Docker搭建&#34;&gt;&lt;/a&gt;使用Docker搭建&lt;/h3&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;sudo docker image pull rustdesk/rustdesk-server&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;-v 映射文件夹 容器内 /root 目录会存放key文件等&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;hbbs 的 -r 参数是 服务器地址&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;hbbs 和 hbbr 的 -k 参数是 禁止没有密钥的用户建立非加密连接&lt;/span&gt;&lt;br&gt;sudo docker run --name hbbs -v ./data:/root -td -m 64M --restart=on-failure --net=host rustdesk/rustdesk-server hbbs -r &amp;lt;relay-server-ip[:port]&amp;gt; -k _&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-built_in&#34;&gt;sudo&lt;/span&gt; docker run --name hbbr -v ./data:/root -td -m 64M --restart=on-failure --net=host rustdesk/rustdesk-server hbbr -k _&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h1 id=&#34;客户端配置&#34;&gt;&lt;a href=&#34;#客户端配置&#34; class=&#34;headerlink&#34; title=&#34;客户端配置&#34;&gt;&lt;/a&gt;客户端配置&lt;/h1&gt;&lt;p&gt;在 RustDesk 客户端主主页中，单击 ID 旁边的菜单按钮 [ ⋮ ]，然后单击网络，您现在可以使用提升的权限解锁设置并设置您的 ID、中继、API 和密钥。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/c98db97a/network-config.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;在&lt;strong&gt;ID Server&lt;/strong&gt;输入框中输入&lt;code&gt;hbbs&lt;/code&gt;的域名或IP地址。&lt;/p&gt;
&lt;p&gt;另外两个地址可以留空，RustDesk会自动推导（如果没有专门设置），Relay Server指的是&lt;code&gt;hbbr&lt;/code&gt;（端口21117）。&lt;/p&gt;
&lt;p&gt;Key的数值：Docker中可以在&lt;code&gt;data&lt;/code&gt;文件夹找到&lt;code&gt;id_ed25519.pub&lt;/code&gt;文件，此文件内容即为key。&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2023/9c721b62/</guid>
            <title>USB</title>
            <link>https://www.oikiou.top/2023/9c721b62/</link>
            <category>embedded</category>
            <category>usb</category>
            <pubDate>Fri, 01 Dec 2023 18:12:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;USB-版本及发展历史&#34;&gt;&lt;a href=&#34;#USB-版本及发展历史&#34; class=&#34;headerlink&#34; title=&#34;USB 版本及发展历史&#34;&gt;&lt;/a&gt;USB 版本及发展历史&lt;/h1&gt;&lt;p&gt;USB接口自1994年推出以来，经过26年的发展，经过USB1.0&amp;#x2F;1.1、USB2.0、USB3.x，最终发展到了现在的USB4；传输速率也从最开始的1.5Mbps，大幅提高到了最新的40Gbps。&lt;br&gt;&lt;img src=&#34;/2023/9c721b62/image-20240621114302408.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;USB1-0&#34;&gt;&lt;a href=&#34;#USB1-0&#34; class=&#34;headerlink&#34; title=&#34;USB1.0&#34;&gt;&lt;/a&gt;USB1.0&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;1996年1月15日推出USB1.0接口规范&lt;/li&gt;
&lt;li&gt;规定低速传输速率为1.5Mbit&amp;#x2F;s&lt;/li&gt;
&lt;li&gt;对外提供供电电压为5V，最大电流500mA&lt;/li&gt;
&lt;li&gt;一般适用于鼠标、键盘等低速HID设备。&lt;/li&gt;
&lt;li&gt;支持热插拨&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;USB1-1&#34;&gt;&lt;a href=&#34;#USB1-1&#34; class=&#34;headerlink&#34; title=&#34;USB1.1&#34;&gt;&lt;/a&gt;USB1.1&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;1998年9月23日对原来的USB1.0进行升级，提出了USB1.1&lt;/li&gt;
&lt;li&gt;USB1.1规定了全速传输速率为12Mbit&amp;#x2F;s,并兼容USB1.0的1.5Mbit&amp;#x2F;s&lt;/li&gt;
&lt;li&gt;传输线缆最大度度3m&lt;/li&gt;
&lt;li&gt;对外提供供电电压为5V，最大电流500mA&lt;/li&gt;
&lt;li&gt;一般适用于鼠标、键盘、U盘，光驱等。&lt;/li&gt;
&lt;li&gt;一个USB接口理论上可以支持127个设备。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;USB2-0&#34;&gt;&lt;a href=&#34;#USB2-0&#34; class=&#34;headerlink&#34; title=&#34;USB2.0&#34;&gt;&lt;/a&gt;USB2.0&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;2000年4月27日由USB-IF组织提出了USB2.0总线协议规范&lt;/li&gt;
&lt;li&gt;具备480Mbit&amp;#x2F;s的高速传输速率，向下兼容低速1.5Mbit&amp;#x2F;s和全速12Mit&amp;#x2F;s&lt;/li&gt;
&lt;li&gt;传输线缆最大度度5m&lt;/li&gt;
&lt;li&gt;对外提供供电电压为5V，最大电流500mA&lt;/li&gt;
&lt;li&gt;通过HUB级联的方式，一个USB接口理论上可以扩展127个USB设备&lt;/li&gt;
&lt;li&gt;支持 4种传输方式：控制传输、中断传输、同步传输和块传输。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;USB3 的名字有些多&lt;/strong&gt;&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;USB3.0&lt;/td&gt;
&lt;td&gt;2008年11月17&lt;/td&gt;
&lt;td&gt;5Gbps&lt;/td&gt;
&lt;td&gt;SuperSpeed USB、USB 3.2 Gen 1、USB 3.1 Gen 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB3.1&lt;/td&gt;
&lt;td&gt;2013年7月&lt;/td&gt;
&lt;td&gt;10Gbps&lt;/td&gt;
&lt;td&gt;SuperSpeed USB 10Gbps、USB 3.2 Gen 2、USB 3.1 Gen 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB3.2&lt;/td&gt;
&lt;td&gt;2017年9月份&lt;/td&gt;
&lt;td&gt;20Gbps&lt;/td&gt;
&lt;td&gt;SuperSpeed USB 20Gbps、USB 3.2 Gen 2x2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&#34;USB3-0-USB-3-2-Gen-1-USB-3-1-Gen-1&#34;&gt;&lt;a href=&#34;#USB3-0-USB-3-2-Gen-1-USB-3-1-Gen-1&#34; class=&#34;headerlink&#34; title=&#34;USB3.0 &amp;#x2F; USB 3.2 Gen 1 &amp;#x2F; USB 3.1 Gen 1&#34;&gt;&lt;/a&gt;USB3.0 &amp;#x2F; USB 3.2 Gen 1 &amp;#x2F; USB 3.1 Gen 1&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;超高速USB3.0规范于2008年11月17日出USB-IF组织推出。&lt;/li&gt;
&lt;li&gt;提供更高的5.0Gbit&amp;#x2F;s的超高速传输速度，并向下兼容低速1.5Mbits&amp;#x2F;s、全速12Mbit&amp;#x2F;s和高速480Mbit&amp;#x2F;s传输速率&lt;/li&gt;
&lt;li&gt;对外提供供电电压为5V，最大电流900mA&lt;/li&gt;
&lt;li&gt;传输线缆最大度度3m&lt;/li&gt;
&lt;li&gt;增加了新的电源管理功能，支持待机、睡眠以及暂定模式，更加省电。&lt;/li&gt;
&lt;li&gt;全双工通讯。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;USB3-1-USB-3-2-Gen-2-USB-3-1-Gen-2&#34;&gt;&lt;a href=&#34;#USB3-1-USB-3-2-Gen-2-USB-3-1-Gen-2&#34; class=&#34;headerlink&#34; title=&#34;USB3.1 &amp;#x2F; USB 3.2 Gen 2 &amp;#x2F; USB 3.1 Gen 2&#34;&gt;&lt;/a&gt;USB3.1 &amp;#x2F; USB 3.2 Gen 2 &amp;#x2F; USB 3.1 Gen 2&lt;/h2&gt;&lt;p&gt;2013年7月份，USB 3.1发布，速度翻番至10Gbps，同时USB-IF就把USB 3.0改名为USB 3.1 Gen 1，新的USB 3.1则叫做USB 3.1 Gen 2。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2013年7月份发布&lt;/li&gt;
&lt;li&gt;速度翻番至10Gbps&lt;/li&gt;
&lt;li&gt;新增USB A&amp;#x2F;V影音传输。以更适合作为移动设备的输出接口，尤其是可逆的Type-C。&lt;/li&gt;
&lt;li&gt;将供电的最高允许标准提高到了20V&amp;#x2F;5A，供电100W。&lt;/li&gt;
&lt;li&gt;必须使用USB Type-C接口才能达到10Gbps的速度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;USB3-2-USB-3-2-Gen-2x2&#34;&gt;&lt;a href=&#34;#USB3-2-USB-3-2-Gen-2x2&#34; class=&#34;headerlink&#34; title=&#34;USB3.2 &amp;#x2F; USB 3.2 Gen 2x2&#34;&gt;&lt;/a&gt;USB3.2 &amp;#x2F; USB 3.2 Gen 2x2&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;2017年9月份，USB 3.2发布。&lt;/li&gt;
&lt;li&gt;据最新公布的规范，USB 3.0、USB 3.1的版本命名都将彻底消失，统一被划入USB 3.2的序列，三者分别再次改名叫做USB 3.2 Gen 1、USB 3.2 Gen 2、USB 3.2 Gen 2x2。&lt;/li&gt;
&lt;li&gt;它们还各自有一个市场推广命名，分别是SuperSpeed USB、SuperSpeed USB 10Gbps、SuperSpeed USB 20Gbps。&lt;br&gt;  之所以想出USB 3.2 Gen2x2这样的名字，大概是因为它使用了USB Type-C接口的上下两端全部针脚，速度得以翻番。&lt;/li&gt;
&lt;li&gt;必须使用USB Type-C接口才能达到20Gbps的速度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;USB-描述符&#34;&gt;&lt;a href=&#34;#USB-描述符&#34; class=&#34;headerlink&#34; title=&#34;USB 描述符&#34;&gt;&lt;/a&gt;USB 描述符&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;  USB是个通用的总线，端口都是统一的。但是USB设备却各种各样，例如USB鼠标，USB键盘，U盘等等，那么USB主机是如何识别出不同的设备的呢？这就要依赖于描述符了。&lt;/p&gt;
&lt;p&gt;  USB的描述符主要有&lt;strong&gt;设备描述符，配置描述符，接口描述符，端点描述符，字符串描述符，HID描述符，报告描述符&lt;/strong&gt;等等。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;USB各个描述符之间的关系&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  一个USB设备有一个&lt;strong&gt;设备描述符&lt;/strong&gt;，设备描述符里面决定了该设备有&lt;strong&gt;多少种配置&lt;/strong&gt;，每种配置描述符对应着配置描述符；&lt;/p&gt;
&lt;p&gt;  而在&lt;strong&gt;配置描述符&lt;/strong&gt;中又定义了该配置里面有&lt;strong&gt;多少个接口&lt;/strong&gt;，每个接口有对应的接口描述符；&lt;/p&gt;
&lt;p&gt;  在&lt;strong&gt;接口描述符&lt;/strong&gt;里面又定义了该接口有&lt;strong&gt;多少个端点&lt;/strong&gt;，每个端点对应一个端点描述符；&lt;/p&gt;
&lt;p&gt;  在&lt;strong&gt;端点描述符&lt;/strong&gt;定义了端点的大小，类型等等。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  由此我们可以看出，USB的描述符之间的关系是一层一层的，最上一层是设备描述符，下面是配置描述符，再下面是接口描述符，再下面是端点描述符。&lt;/p&gt;
&lt;p&gt;  在获取描述符时，先获取设备描述符，然后再获取配置描述符，根据配置描述符中的配置集合长度，一次将配置描述符、接口描述符、端点描述符一起一次读回。&lt;/p&gt;
&lt;p&gt;  其中可能还会有获取设备序列号，厂商字符串，产品字符串等。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;各个描述符的编号&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs c&#34;&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; DEVICE_DESCRIPTOR               0x01  &lt;span class=&#34;hljs-comment&#34;&gt;//设备描述符   &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; CONFIGURATION_DESCRIPTOR        0x02  &lt;span class=&#34;hljs-comment&#34;&gt;//配置描述符   &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; STRING_DESCRIPTOR               0x03  &lt;span class=&#34;hljs-comment&#34;&gt;//字符串描述符   &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; INTERFACE_DESCRIPTOR            0x04  &lt;span class=&#34;hljs-comment&#34;&gt;//接口描述符   &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; ENDPOINT_DESCRIPTOR             0x05  &lt;span class=&#34;hljs-comment&#34;&gt;//端点描述符  &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;&lt;img src=&#34;/2023/9c721b62/v2-43379ad330f4acd76ce885f2e1359458_720w.webp&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/9c721b62/usbdes.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/9c721b62/image-20240620151939825.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;设备描述符-0x01-Device-Descriptor&#34;&gt;&lt;a href=&#34;#设备描述符-0x01-Device-Descriptor&#34; class=&#34;headerlink&#34; title=&#34;设备描述符 0x01 Device Descriptor&#34;&gt;&lt;/a&gt;设备描述符 0x01 Device Descriptor&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/2023/9c721b62/dev.png&#34; alt=&#34;设备描述符&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs c&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;// 定义标准的设备描述符结构&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-keyword&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;hljs-class&#34;&gt;&lt;span class=&#34;hljs-keyword&#34;&gt;struct&lt;/span&gt; _&lt;span class=&#34;hljs-title&#34;&gt;DEVICE_DCESCRIPTOR_STRUCT&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;    BYTE blength;            &lt;span class=&#34;hljs-comment&#34;&gt;// 设备描述符的字节数大小&lt;/span&gt;&lt;br&gt;    BYTE bDescriptorType;    &lt;span class=&#34;hljs-comment&#34;&gt;// 设备描述符类型编号&lt;/span&gt;&lt;br&gt;    WORD bcdUSB;             &lt;span class=&#34;hljs-comment&#34;&gt;// USB版本号&lt;/span&gt;&lt;br&gt;    BYTE bDeviceClass;       &lt;span class=&#34;hljs-comment&#34;&gt;// USB分配的设备类代码&lt;/span&gt;&lt;br&gt;    BYTE bDeviceSubClass;    &lt;span class=&#34;hljs-comment&#34;&gt;// USB分配的子类代码&lt;/span&gt;&lt;br&gt;    BYTE bDeviceProtocol;    &lt;span class=&#34;hljs-comment&#34;&gt;// USB分配的设备协议代码&lt;/span&gt;&lt;br&gt;    BYTE bMaxPacketSize0;    &lt;span class=&#34;hljs-comment&#34;&gt;// 端点0的最大包大小&lt;/span&gt;&lt;br&gt;    WORD idVendor;           &lt;span class=&#34;hljs-comment&#34;&gt;// 厂商编号&lt;/span&gt;&lt;br&gt;    WORD idProduct;          &lt;span class=&#34;hljs-comment&#34;&gt;// 产品编号&lt;/span&gt;&lt;br&gt;    WORD bcdDevice;          &lt;span class=&#34;hljs-comment&#34;&gt;// 设备出厂编号&lt;/span&gt;&lt;br&gt;    BYTE iManufacturer;      &lt;span class=&#34;hljs-comment&#34;&gt;// 设备厂商字符串的索引&lt;/span&gt;&lt;br&gt;    BYTE iProduct;           &lt;span class=&#34;hljs-comment&#34;&gt;// 描述产品字符串的索引&lt;/span&gt;&lt;br&gt;    BYTE iSerialNumber;      &lt;span class=&#34;hljs-comment&#34;&gt;// 描述设备序列号字符串的索引&lt;/span&gt;&lt;br&gt;    BYTE bNumConfigurations; &lt;span class=&#34;hljs-comment&#34;&gt;// 可能的配置数量&lt;/span&gt;&lt;br&gt;&amp;#125; DEVICE_DESCRIPTOR_STRUCT, *pDEVICE_DESCRIPTOR_STRUCT;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;// 实际的设备描述符示例&lt;/span&gt;&lt;br&gt;DEVICE_DESCRIPTOR_STRUCT device_descriptor = &amp;#123;&lt;br&gt;.blength           =&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(DEVICE_DESCRIPTOR_STRUCT),&lt;span class=&#34;hljs-comment&#34;&gt;// 设备描述符的字节数大小，这里是18字节&lt;/span&gt;&lt;br&gt;.bDescriptorType   =DEVICE_DESCRIPTOR,  &lt;span class=&#34;hljs-comment&#34;&gt;// 设备描述符类型编号，设备描述符是01&lt;/span&gt;&lt;br&gt;.bcdUSB            =&lt;span class=&#34;hljs-number&#34;&gt;0x1001&lt;/span&gt;, &lt;span class=&#34;hljs-comment&#34;&gt;// USB版本号，这里是USB01.10，即USB1.1。由于51是大端模式，所以高低字节交换&lt;/span&gt;&lt;br&gt;.bDeviceClass      =&lt;span class=&#34;hljs-number&#34;&gt;0x00&lt;/span&gt;,   &lt;span class=&#34;hljs-comment&#34;&gt;// USB分配的设备类代码，0表示类型在接口描述符中定义&lt;/span&gt;&lt;br&gt;.bDeviceSubClass   =&lt;span class=&#34;hljs-number&#34;&gt;0x00&lt;/span&gt;,   &lt;span class=&#34;hljs-comment&#34;&gt;// USB分配的子类代码，上面一项为0时，本项也要设置为0&lt;/span&gt;&lt;br&gt;.bDeviceProtocol   =&lt;span class=&#34;hljs-number&#34;&gt;0x00&lt;/span&gt;,   &lt;span class=&#34;hljs-comment&#34;&gt;// USB分配的设备协议代码，上面一项为0时，本项也要设置为0&lt;/span&gt;&lt;br&gt;.bMaxPacketSize0   =&lt;span class=&#34;hljs-number&#34;&gt;0x10&lt;/span&gt;,   &lt;span class=&#34;hljs-comment&#34;&gt;// 端点0的最大包大小，这里为16字节&lt;/span&gt;&lt;br&gt;.idVendor          =&lt;span class=&#34;hljs-number&#34;&gt;0x7104&lt;/span&gt;, &lt;span class=&#34;hljs-comment&#34;&gt;// 厂商编号，这个是需要跟USB组织申请的ID号，表示厂商代号。&lt;/span&gt;&lt;br&gt;.idProduct         =&lt;span class=&#34;hljs-number&#34;&gt;0xf0ff&lt;/span&gt;, &lt;span class=&#34;hljs-comment&#34;&gt;// 该产品的编号，跟厂商编号一起配合使用，让主机注册该设备并加载相应的驱动程序&lt;/span&gt;&lt;br&gt;.bcdDevice         =&lt;span class=&#34;hljs-number&#34;&gt;0x0100&lt;/span&gt;, &lt;span class=&#34;hljs-comment&#34;&gt;// 设备出厂编号&lt;/span&gt;&lt;br&gt;.iManufacturer     =&lt;span class=&#34;hljs-number&#34;&gt;0x01&lt;/span&gt;,   &lt;span class=&#34;hljs-comment&#34;&gt;// 设备厂商字符串的索引，在获取字符串描述符时，使用该索引号来识别不同的字符串&lt;/span&gt;&lt;br&gt;.iProduct          =&lt;span class=&#34;hljs-number&#34;&gt;0x02&lt;/span&gt;,   &lt;span class=&#34;hljs-comment&#34;&gt;// 描述产品字符串的索引，同上&lt;/span&gt;&lt;br&gt;.iSerialNumber     =&lt;span class=&#34;hljs-number&#34;&gt;0x03&lt;/span&gt;,   &lt;span class=&#34;hljs-comment&#34;&gt;// 描述设备序列号字符串的索引，同上&lt;/span&gt;&lt;br&gt;.bNumConfigurations=&lt;span class=&#34;hljs-number&#34;&gt;0x01&lt;/span&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;// 可能的配置数为1，即该设备只有一个配置&lt;/span&gt;&lt;br&gt;&amp;#125;;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bLength&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是设备描述符的总长度，以字节为单位。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bDescriptorType&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代表了本描述符的类型。&lt;/li&gt;
&lt;li&gt;用于描述设备的描述符 是0x01。&lt;ul&gt;
&lt;li&gt;其他描述符的数值及含义&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;/2023/9c721b62/d976ff82852a45ea8fc59183689cbd5b.png&#34; alt=&#34;在这里插入图片描述&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bcdUSB&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;显示了设备支持的USB版本，通常是最新版本。&lt;/li&gt;
&lt;li&gt;这是一个&lt;a href=&#34;https://so.csdn.net/so/search?q=%E4%BA%8C%E8%BF%9B%E5%88%B6&amp;spm=1001.2101.3001.7020&#34;&gt;二进制&lt;/a&gt;代码形式的十进制数据，采用0xAABC的形式，其中A是主版本号，B是次版本号，C是子次版本号。&lt;/li&gt;
&lt;li&gt;例如，USB2.0设备拥有0x0200值，USB1.1设备拥有0x0110值。通常，主机将使用bcdUSB以确定需要加载的USB驱动器。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bDeviceClass&lt;/strong&gt;、&lt;strong&gt;bDeviceSubClass&lt;/strong&gt;、&lt;strong&gt;bDeviceProtocol&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;USB-IF区分设备类分了三个等级（类-子类-协议码）其中，&lt;ul&gt;
&lt;li&gt;类包含人机交互类、图像类、无线类、音频类等等，&lt;/li&gt;
&lt;li&gt;子类比如音频类的音频控制、音频流等等，&lt;/li&gt;
&lt;li&gt;协议比如人机接口类中的鼠标、键盘、&lt;a href=&#34;https://so.csdn.net/so/search?q=%E8%A7%A6%E6%91%B8%E5%B1%8F&amp;spm=1001.2101.3001.7020&#34;&gt;触摸屏&lt;/a&gt;等，&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;blockquote&gt;
&lt;p&gt;  为何会有这么多USB的Class分类，子分类，设备协议。&lt;br&gt;  我们要知道，USB协议设计的目的，就是为实现通用，用单一的USB接口取代之前种类繁多的各种其他接口。而为了取代其他各种接口，那意味着就要实现各种设备所对应的各种功能。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bMaxPackeSize0&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;端点一次最大传多少个字节。&lt;/li&gt;
&lt;li&gt;根据设备，数据包的大小可以为 8 个字节、 16 个字节、 32 个字节和 64 个字节。&lt;/li&gt;
&lt;li&gt;USB协议里有规定，端点0最低8字节，端点的最大传输大小和USB速度等级以及传输类型有关，&lt;strong&gt;控制传输一般使用端点0&lt;/strong&gt;，低速最大8字节，全速和高速最大传输64字节：&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;idVendor&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代表着设备的生产商ID,由USB设备生产商向USB-IF官方来统一管理和申请。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;idProduct&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代表着该生产商生产的产品编号，同一厂商下的不同idProduct代表着该公司不同的产品系列。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bcdDevice&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是一个BCD编码格式，代表着设备的出产编号，或者同一产品的版本更新迭代。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;iManufacturer&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;描述厂商的字符串的索引，为0则表示没有。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;iProduct&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;描述产品的字符串的索引，为0则表示没有。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;iSerialNumber&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;产品序列号字符串的索引，为0则表示没有。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bNumConfigurations&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;指示设备有多少个配置，前面提到过，一个USB可能有多个配置，一般USB产品都是1个配置。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;配置描述符-0x02-Configuration-Descriptor&#34;&gt;&lt;a href=&#34;#配置描述符-0x02-Configuration-Descriptor&#34; class=&#34;headerlink&#34; title=&#34;配置描述符 0x02 Configuration Descriptor&#34;&gt;&lt;/a&gt;配置描述符 0x02 Configuration Descriptor&lt;/h2&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;br&gt;Byte&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;bLength&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该描述符的长度 &amp;#x3D; 9 个字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;bDescriptorType&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;描述符类型 &amp;#x3D; 配置（02h）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;wTotalLength&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;总长度包括接口和端点描述符在内&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;bNumInterfaces&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;本配置中接口的数量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;bConfigurationValue&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;SET_CONFIGURATION 请求所使用的配置值，用于选择该配置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;iConfiguration&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;描述该配置的字符串索引&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;bmAttributes&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;位 7：预留（设置为 1） &lt;br&gt;位 6：自供电 &lt;br&gt;位 5：远程唤醒&lt;br&gt;位 4:0：保留&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;bMaxPower&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;本配置所需的最大功耗（单位为 2 mA）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bLength&lt;/strong&gt; 1字节，表示配置描述符的长度，配置描述符的长度是9字节。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bDescriptor&lt;/strong&gt; 1字节，表示描述符的类型，配置描述符的类型编码为 0x02。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;wTotalLength&lt;/strong&gt; 2字节，是整个配置描述符集合的总长度。包括配置描述符，接口描述符，端点描述符和类特殊描述符（如果有）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bNumInterfaces&lt;/strong&gt; 1字节，则定义了在该指定配置中接口总数。最小为 1 个接口，通常功能单一的设备只有一个接口（如鼠标），而复合设备具有多个接口（如音频设备）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bConfigurationValue&lt;/strong&gt; 1字节，表示该配置的值，设置配置请求时会发送一个配置值，如果某个配置的bConfigurationValue和它相匹配，就表示该配置被激活。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;iConfiguration&lt;/strong&gt; 1字节，描述该配置的字符串的索引，如果该值为0，表示没有字符串来描述它。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bmAttributes&lt;/strong&gt; 1字节，定义了 USB 设备的一些特性。 位7保留，必须设置为1，位6表示供电方式，设置为 0表示设备由总线供电，设置为 1 表示设备自供电。位5表示是否支持远程唤醒，设置为 1表示支持远程唤醒，设置为 0 表示不支持远程唤醒。位4~位0设置为0。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bMaxPower&lt;/strong&gt; 1字节，表示设备需要从总线获取的最大电流量，以 2 mA 为单位。如需要200mA的最大电流，则该字段的值为100。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;字符串描述符-0x03&#34;&gt;&lt;a href=&#34;#字符串描述符-0x03&#34; class=&#34;headerlink&#34; title=&#34;字符串描述符 0x03&#34;&gt;&lt;/a&gt;字符串描述符 0x03&lt;/h2&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;bLength&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该描述符的长度 &amp;#x3D; 7 个字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;bDescriptorType&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;描述符类型 &amp;#x3D; STRING （03h）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2..n&lt;/td&gt;
&lt;td&gt;bString 或 wLangID&lt;/td&gt;
&lt;td&gt;变化&lt;/td&gt;
&lt;td&gt;Unicode 编码字符串 或 LANGID 代码&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;字符串描述符是可选的，字符串描述符用于描述一些方便人们阅读的信息，比如制造商、设备名称啥的。如果一个设备没有字符串描述符，那么其他描述符中和字符串有关的索引值都必须为 0。&lt;/p&gt;
&lt;h2 id=&#34;接口描述符-0x04-Interface-Descriptor&#34;&gt;&lt;a href=&#34;#接口描述符-0x04-Interface-Descriptor&#34; class=&#34;headerlink&#34; title=&#34;接口描述符 0x04 Interface Descriptor&#34;&gt;&lt;/a&gt;接口描述符 0x04 Interface Descriptor&lt;/h2&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;bLength&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该描述符的长度 &amp;#x3D; 9 个字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;bDescriptorType&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;描述符类型 &amp;#x3D; 接口（04h）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;bInterfaceNumber&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该接口基于零的索引&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;bAlternateSetting&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;备用设置值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;bNumEndpoints&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该接口所使用的端点数量（不包含 EP0）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;bInterfaceClass&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;接口类别&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;bInterfaceSubclass&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;接口子类别&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;bInterfaceProtocol&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;接口协议&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;iInterface&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该接口字符串描述符索引&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;bLength&lt;/strong&gt; 1字节，表示接口描述符的长度，标准的接口描述符的长度为9字节。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bDescriptorType&lt;/strong&gt; 1字节，表示描述符的类型，接口描述符的类型编码为 0x04。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bInterfaceNumber&lt;/strong&gt; 1字节，表示该接口的编号，如果一个配置具有多个接口，每个接口的编号都不相同，从0开始依次递增对一个配置的接口进行编号。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bAlternateSetting&lt;/strong&gt; 1字节，接口的备用编号，很少用到，设置为0。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bNumEndpoints&lt;/strong&gt; 1字节，表示该接口的端点数（不包括0端点）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bInterfaceClass、bInterfaceSubClass、bInterfaceProtocol&lt;/strong&gt; 均为1字节，分别表示接口所使用的类，子类以及协议，由USB协会规定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;iInterface&lt;/strong&gt; 1字节，描述该接口的字符串的索引值，如果为0，表示没有字符串。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;bInterfaceClass&lt;/strong&gt;、&lt;strong&gt;bDeviceClass&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Base Class&lt;/th&gt;
&lt;th&gt;Descriptor Usage&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;00h&lt;/td&gt;
&lt;td&gt;Device&lt;/td&gt;
&lt;td&gt;Use class information in the Interface Descriptors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;01h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Audio USB音频，参见UAC规范&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;02h&lt;/td&gt;
&lt;td&gt;Both&lt;/td&gt;
&lt;td&gt;Communications and &lt;a href=&#34;https://www.usbzh.com/article/detail-842.html&#34;&gt;CDC&lt;/a&gt; Control 网卡、调制解调器、串列端口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;03h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://www.usbzh.com/article/detail-76.html&#34;&gt;HID&lt;/a&gt; (Human Interface Device)，键盘、鼠标 参见&lt;a href=&#34;https://www.usbzh.com/article/detail-76.html&#34;&gt;HID&lt;/a&gt;规范&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;05h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Physical 控制杆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;06h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Image 影像扫描仪、Picture Transfer Protocol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;07h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Printer 打印机&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;08h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Mass Storage U盘、移动硬盘、存储卡读卡器、数字相机&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09h&lt;/td&gt;
&lt;td&gt;Device&lt;/td&gt;
&lt;td&gt;Hub &lt;a href=&#34;https://www.usbzh.com/article/detail-25.html&#34;&gt;集线器&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0Ah&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://www.usbzh.com/article/detail-842.html&#34;&gt;CDC&lt;/a&gt;-Data 调制解调器、网络卡、ISDN、传真&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0Bh&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Smart Card 读卡器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0Dh&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Content Security&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0Eh&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Video USB视频，&lt;a href=&#34;https://www.usbzh.com/article/detail-80.html&#34;&gt;UVC&lt;/a&gt;摄像头，参见&lt;a href=&#34;https://www.usbzh.com/article/detail-80.html&#34;&gt;UVC&lt;/a&gt;规范&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0Fh&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Personal Healthcare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Audio&amp;#x2F;Video Devices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11h&lt;/td&gt;
&lt;td&gt;Device&lt;/td&gt;
&lt;td&gt;Billboard Device Class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;USB Type-C Bridge Class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DCh&lt;/td&gt;
&lt;td&gt;Both&lt;/td&gt;
&lt;td&gt;Diagnostic Device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E0h&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Wireless Controller 蓝牙&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EFh&lt;/td&gt;
&lt;td&gt;Both&lt;/td&gt;
&lt;td&gt;Miscellaneous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FEh&lt;/td&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Application Specific 红外线资料桥接器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FFh&lt;/td&gt;
&lt;td&gt;Both&lt;/td&gt;
&lt;td&gt;Vendor Specific 自定义USB设备&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;更多信息参考 &lt;a href=&#34;https://www.usb.org/defined-class-codes&#34;&gt;USB.org&lt;/a&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;h2 id=&#34;端点描述符-0x05-Endpoint-Descriptor&#34;&gt;&lt;a href=&#34;#端点描述符-0x05-Endpoint-Descriptor&#34; class=&#34;headerlink&#34; title=&#34;端点描述符 0x05 Endpoint Descriptor&#34;&gt;&lt;/a&gt;端点描述符 0x05 Endpoint Descriptor&lt;/h2&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;br&gt;Byte&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;bLength&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该描述符长度 &amp;#x3D; 7 个字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;bDescriptorType&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;描述符类型 &amp;#x3D; 端点（05h）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;bEndpointAddress&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;位 3…0&lt;/strong&gt;：端点数量 &lt;br/&gt;&lt;strong&gt;位 6…4&lt;/strong&gt;：预留，复位为零 &lt;br/&gt;&lt;strong&gt;位 7&lt;/strong&gt;：端点的方向。控制端点可以忽略该位。 &lt;br/&gt;0 &amp;#x3D; OUT 端点 (主机到设备) &lt;br/&gt;1 &amp;#x3D; IN 端点 (设备到主机)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;bmAttributes&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;位 1…0&lt;/strong&gt;：传输类型 &lt;br/&gt;00 &amp;#x3D; 控制传输 &lt;br/&gt;01 &amp;#x3D; 同步传输 &lt;br/&gt;10 &amp;#x3D; 批量传输 &lt;br/&gt;11 &amp;#x3D; 中断传输 &lt;br/&gt;如果该端点不是同步端点，那么位 5 到位 2 将被预留，必须将这些位设置为零。如果该端点是同步的，这些位将按如下内容定义： &lt;br/&gt;&lt;strong&gt;位 3…2&lt;/strong&gt;：同步类型 &lt;br/&gt;00 &amp;#x3D; 无同步 &lt;br/&gt;01 &amp;#x3D; 异步 &lt;br/&gt;10 &amp;#x3D; 自适应 &lt;br/&gt;11 &amp;#x3D; 同步 &lt;br/&gt;&lt;strong&gt;位 5…4&lt;/strong&gt;：用途类型 &lt;br/&gt;00 &amp;#x3D; 数据端点 &lt;br/&gt;01 &amp;#x3D; 反馈端点 &lt;br/&gt;10 &amp;#x3D; 隐式反馈数据端点 &lt;br/&gt;数值 11 表示保留&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;wMaxPacketSize&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;该端点的数据包最大尺寸&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;bInterval&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;中断端点的轮询间隔，单位为 ms（对于同步端点，该间隔为 1 ms；控制或批量端点可能忽略该字段）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;bLength&lt;/strong&gt; 1字节，表示端点描述符的长度，标准的端点描述符的长度为7字节。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bDescriptorType&lt;/strong&gt; 1字节，表示描述符的类型，端点描述符的类型编码为 0x05。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bEndpointAddress&lt;/strong&gt; 1字节，表示该端点的地址和方向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bmAttributes&lt;/strong&gt; 1字节，表示该端点的属性，详细看上表。&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transfer Type&lt;/strong&gt; &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;控制CONTROL&lt;/strong&gt; 控制端点被用来控制对 USB 设备的不同部分访问。&lt;em&gt;通常用作配置设备、获取设备信息、发送命令到设备或获取设备状态报告&lt;/em&gt;。这些端点通常较小。&lt;em&gt;每个 USB 设备都有一个控制端点称为”端点 0”, 被 USB 核心用来在插入时配置设备&lt;/em&gt;。USB协议保证总有足够的带宽留给控制端点传送数据到设备.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中断INTERRUPT&lt;/strong&gt;每当 USB 主机向设备请求数据时，中断端点以固定的速率传送&lt;em&gt;小量的数据&lt;/em&gt;。此为USB 键盘和鼠标的主要的数据传送方法。它还用以传送数据到 USB 设备来控制设备。&lt;em&gt;通常不用来传送大量数据&lt;/em&gt;。USB协议保证总有足够的带宽留给中断端点传送数据到设备.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;批量BULK&lt;/strong&gt;  批量端点用以传送大量数据。这些端点常比中断端点大得多. 它们普遍用于&lt;em&gt;不能有任何数据丢失的数据&lt;/em&gt;。USB 协议&lt;em&gt;不保证传输在特定时间范围内完成&lt;/em&gt;。如果总线上没有足够的空间来发送整个BULK包，它被分为多个包进行传输。这些端点普遍用于打印机、USB Mass Storage和USB网络设备上。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;等时ISOCHRONOUS&lt;/strong&gt; 等时端点也批量传送大量数据, 但是这个数据&lt;em&gt;不被保证能送达&lt;/em&gt;。这些端点用在可以处理数据丢失的设备中，并且更多依赖于保持持续的数据流。如音频和视频设备等等。&lt;/li&gt;
&lt;li&gt;对比总结：&lt;em&gt;控制&lt;/em&gt;和&lt;em&gt;批量&lt;/em&gt;端点用于异步数据传送，而&lt;em&gt;中断&lt;/em&gt;和&lt;em&gt;同步&lt;/em&gt;端点是周期性的。这意味着这些端点被设置来在固定的时间连续传送数据，USB 核心为它们保留了相应的带宽。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wMaxPacketSize&lt;/strong&gt; 2字节，表示该端点的数据包最大长度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bInterval&lt;/strong&gt; 1字节&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个端点描述符都规定了该端点所支持的最大数据包长 (wMaxPacketSize)，主机每次发送数据包，都不能超过端点的最大包长，各种端点的最大包长如下表：&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;控制端点&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;8&amp;#x2F;16&amp;#x2F;32&amp;#x2F;64&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;实时端点&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;1023&lt;/td&gt;
&lt;td&gt;1024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;中断端点&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;1024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;批量端点&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;8&amp;#x2F;16&amp;#x2F;32&amp;#x2F;64&lt;/td&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h1 id=&#34;HID&#34;&gt;&lt;a href=&#34;#HID&#34; class=&#34;headerlink&#34; title=&#34;HID&#34;&gt;&lt;/a&gt;HID&lt;/h1&gt;&lt;h1 id=&#34;UVC&#34;&gt;&lt;a href=&#34;#UVC&#34; class=&#34;headerlink&#34; title=&#34;UVC&#34;&gt;&lt;/a&gt;UVC&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;UVC，全称为：USB video(device) class,是微软与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准，目前已成为USB org标准之一。&lt;/p&gt;
&lt;/blockquote&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2023/6dfa9920/</guid>
            <title>OrangePi</title>
            <link>https://www.oikiou.top/2023/6dfa9920/</link>
            <category>linux</category>
            <pubDate>Thu, 23 Nov 2023 16:12:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;OrangePi-3B-系统安装&#34;&gt;&lt;a href=&#34;#OrangePi-3B-系统安装&#34; class=&#34;headerlink&#34; title=&#34;OrangePi 3B 系统安装&#34;&gt;&lt;/a&gt;OrangePi 3B 系统安装&lt;/h1&gt;&lt;p&gt;…&lt;/p&gt;
&lt;p&gt;系统镜像：&lt;/p&gt;
&lt;p&gt;EN: &lt;a href=&#34;http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html&#34;&gt;http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CN: &lt;a href=&#34;http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html&#34;&gt;http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;系统&#34;&gt;&lt;a href=&#34;#系统&#34; class=&#34;headerlink&#34; title=&#34;系统&#34;&gt;&lt;/a&gt;系统&lt;/h1&gt;&lt;h2 id=&#34;用户&#34;&gt;&lt;a href=&#34;#用户&#34; class=&#34;headerlink&#34; title=&#34;用户&#34;&gt;&lt;/a&gt;用户&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;root&lt;/td&gt;
&lt;td&gt;orangepi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;orangepi&lt;/td&gt;
&lt;td&gt;orangepi&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&#34;硬件配置&#34;&gt;&lt;a href=&#34;#硬件配置&#34; class=&#34;headerlink&#34; title=&#34;硬件配置&#34;&gt;&lt;/a&gt;硬件配置&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;strong&gt;选择 System -&amp;gt; Hardware&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  请注意，uart2_m0 默认是作为系统的调试串口，如果打开了 uart2 的配置，调试串口的功能会无法使用&lt;/p&gt;
&lt;p&gt;  i2c3_m0 和 uart3_m0 是引脚复用的，两者不能同时打开&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt;配置完成需要重启生效&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;sudo orangepi-config&lt;br&gt;&lt;br&gt;reboot&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 id=&#34;网络&#34;&gt;&lt;a href=&#34;#网络&#34; class=&#34;headerlink&#34; title=&#34;网络&#34;&gt;&lt;/a&gt;网络&lt;/h2&gt;&lt;h3 id=&#34;WLAN&#34;&gt;&lt;a href=&#34;#WLAN&#34; class=&#34;headerlink&#34; title=&#34;WLAN&#34;&gt;&lt;/a&gt;WLAN&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;  请不要通过修改&amp;#x2F;etc&amp;#x2F;network&amp;#x2F;interfaces 配置文件的方式来连接 WIFI，通过这种方式连接 WIFI 网络使用会有问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;命令行版&#34;&gt;&lt;a href=&#34;#命令行版&#34; class=&#34;headerlink&#34; title=&#34;命令行版&#34;&gt;&lt;/a&gt;命令行版&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;首先使用&lt;code&gt;nmcli dev wifi&lt;/code&gt;命令扫描周围的 WIFI 热点&lt;/li&gt;
&lt;li&gt;然后使用 nmcli 命令连接扫描到的 WIFI 热点 &lt;code&gt;nmcli dev wifi connect wifi_name password wifi_passwd&lt;/code&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;wifi_name&lt;/code&gt; 需要换成想连接的 WIFI 热点的名字&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wifi_passwd&lt;/code&gt; 需要换成想连接的 WIFI 热点的密码&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;ip addr show wlan0&lt;/code&gt; 命令可以查看 wifi 的 IP 地址&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;UI版&#34;&gt;&lt;a href=&#34;#UI版&#34; class=&#34;headerlink&#34; title=&#34;UI版&#34;&gt;&lt;/a&gt;UI版&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;在命令行中输入 &lt;code&gt;nmtui&lt;/code&gt; 命令打开 wifi 连接的界面&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2023/a3ad4999/</guid>
            <title>查看Apk安装包的签名</title>
            <link>https://www.oikiou.top/2023/a3ad4999/</link>
            <category>apk</category>
            <category>java</category>
            <pubDate>Mon, 20 Nov 2023 17:47:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;查看apk安装包的签名&#34;&gt;&lt;a href=&#34;#查看apk安装包的签名&#34; class=&#34;headerlink&#34; title=&#34;查看apk安装包的签名&#34;&gt;&lt;/a&gt;查看apk安装包的签名&lt;/h1&gt;&lt;p&gt;首先，确保你已经安装了Java开发工具包（JDK），以便使用其中的工具。&lt;/p&gt;
&lt;p&gt;查看Android apk的签名信息方式有两种&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;直接查看apk的签名信息（推荐）&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;pre&gt;&lt;code class=&#34;shell&#34;&gt;keytool -list -printcert -jarfile wechat.apk 
&lt;figure class=&#34;highlight stata&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs stata&#34;&gt;&lt;br&gt;2.   通过apk中的RSA文件查看签名信息&lt;br&gt;&lt;br&gt;     1.   将apk后缀改为.&lt;span class=&#34;hljs-keyword&#34;&gt;zip&lt;/span&gt;，然后解压（**apk其实是一个用&lt;span class=&#34;hljs-keyword&#34;&gt;zip&lt;/span&gt;压缩的文件**），再进入&lt;span class=&#34;hljs-keyword&#34;&gt;META&lt;/span&gt;-&lt;span class=&#34;hljs-keyword&#34;&gt;INF&lt;/span&gt;目录，找到RSA文件&lt;br&gt;&lt;br&gt;     2.   ```&lt;span class=&#34;hljs-keyword&#34;&gt;shell&lt;/span&gt;&lt;br&gt;          keytool -printcert -&lt;span class=&#34;hljs-keyword&#34;&gt;file&lt;/span&gt; COM_TENC.RSA &lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2023/c65a4228/</guid>
            <title>Frp</title>
            <link>https://www.oikiou.top/2023/c65a4228/</link>
            <category>frp</category>
            <pubDate>Fri, 03 Nov 2023 19:12:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;背景介绍&#34;&gt;&lt;a href=&#34;#背景介绍&#34; class=&#34;headerlink&#34; title=&#34;背景介绍&#34;&gt;&lt;/a&gt;背景介绍&lt;/h1&gt;&lt;p&gt;frp 是一款高性能的反向代理应用，专注于内网穿透。它支持多种协议，包括 TCP、UDP、HTTP、HTTPS 等，并且具备 P2P 通信功能。使用 frp，您可以安全、便捷地将内网服务暴露到公网，通过拥有公网 IP 的节点进行中转。&lt;/p&gt;
&lt;blockquote&gt;
&lt;h1 id=&#34;特性&#34;&gt;&lt;a href=&#34;#特性&#34; class=&#34;headerlink&#34; title=&#34;特性&#34;&gt;&lt;/a&gt;特性&lt;/h1&gt;&lt;p&gt;  通过在具有公网 IP 的节点上部署 frp 服务端，您可以轻松地将内网服务穿透到公网，并享受以下专业特性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多种协议支持：客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。&lt;/li&gt;
&lt;li&gt;TCP 连接流式复用：在单个连接上承载多个请求，减少连接建立时间，降低请求延迟。&lt;/li&gt;
&lt;li&gt;代理组间的负载均衡。&lt;/li&gt;
&lt;li&gt;端口复用：多个服务可以通过同一个服务端端口暴露。&lt;/li&gt;
&lt;li&gt;P2P 通信：流量不必经过服务器中转，充分利用带宽资源。&lt;/li&gt;
&lt;li&gt;客户端插件：提供多个原生支持的客户端插件，如静态文件查看、HTTPS&amp;#x2F;HTTP 协议转换、HTTP、SOCKS5 代理等，以便满足各种需求。&lt;/li&gt;
&lt;li&gt;服务端插件系统：高度可扩展的服务端插件系统，便于根据自身需求进行功能扩展。&lt;/li&gt;
&lt;li&gt;用户友好的 UI 页面：提供服务端和客户端的用户界面，使配置和监控变得更加方便。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;工作原理&#34;&gt;&lt;a href=&#34;#工作原理&#34; class=&#34;headerlink&#34; title=&#34;工作原理&#34;&gt;&lt;/a&gt;工作原理&lt;/h2&gt;&lt;p&gt;  frp 主要由两个组件组成：客户端(frpc) 和 服务端(frps)。通常情况下，服务端部署在具有公网 IP 地址的机器上，而客户端部署在需要穿透的内网服务所在的机器上。&lt;/p&gt;
&lt;p&gt;  由于内网服务缺乏公网 IP 地址，因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps，frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器，从而实现通信。&lt;/p&gt;
&lt;h2 id=&#34;代理&#34;&gt;&lt;a href=&#34;#代理&#34; class=&#34;headerlink&#34; title=&#34;代理&#34;&gt;&lt;/a&gt;代理&lt;/h2&gt;&lt;p&gt;  在 frp 中，一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理，以满足不同的需求。&lt;/p&gt;
&lt;h2 id=&#34;代理类型&#34;&gt;&lt;a href=&#34;#代理类型&#34; class=&#34;headerlink&#34; title=&#34;代理类型&#34;&gt;&lt;/a&gt;代理类型&lt;/h2&gt;&lt;p&gt;  frp 支持多种代理类型，以适应不同的使用场景。以下是一些常见的代理类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP&lt;/strong&gt;：提供纯粹的 TCP 端口映射，使服务端能够根据不同的端口将请求路由到不同的内网服务。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP&lt;/strong&gt;：提供纯粹的 UDP 端口映射，与 TCP 代理类似，但用于 UDP 流量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP&lt;/strong&gt;：专为 HTTP 应用设计，支持修改 Host Header 和增加鉴权等额外功能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTPS&lt;/strong&gt;：类似于 HTTP 代理，但专门用于处理 HTTPS 流量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;STCP&lt;/strong&gt;：提供安全的 TCP 内网代理，要求在被访问者和访问者的机器上都部署 frpc，不需要在服务端暴露端口。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUDP&lt;/strong&gt;：提供安全的 UDP 内网代理，与 STCP 类似，需要在被访问者和访问者的机器上都部署 frpc，不需要在服务端暴露端口。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XTCP&lt;/strong&gt;：点对点内网穿透代理，与 STCP 类似，但流量不需要经过服务器中转。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TCPMUX&lt;/strong&gt;：支持服务端 TCP 端口的多路复用，允许通过同一端口访问不同的内网服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;部署&#34;&gt;&lt;a href=&#34;#部署&#34; class=&#34;headerlink&#34; title=&#34;部署&#34;&gt;&lt;/a&gt;部署&lt;/h1&gt;&lt;blockquote&gt;
&lt;h2 id=&#34;下载&#34;&gt;&lt;a href=&#34;#下载&#34; class=&#34;headerlink&#34; title=&#34;下载&#34;&gt;&lt;/a&gt;下载&lt;/h2&gt;&lt;p&gt;  您可以从 GitHub 的 &lt;a href=&#34;https://github.com/fatedier/frp/releases&#34;&gt;Release&lt;/a&gt; 页面中下载最新版本的客户端和服务器二进制文件。所有文件都打包在一个压缩包中，还包含了一份完整的配置参数说明。&lt;/p&gt;
&lt;h2 id=&#34;部署-1&#34;&gt;&lt;a href=&#34;#部署-1&#34; class=&#34;headerlink&#34; title=&#34;部署&#34;&gt;&lt;/a&gt;部署&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;解压下载的压缩包。&lt;/li&gt;
&lt;li&gt;将 &lt;code&gt;frpc&lt;/code&gt; 复制到内网服务所在的机器上。&lt;/li&gt;
&lt;li&gt;将 &lt;code&gt;frps&lt;/code&gt; 复制到拥有公网 IP 地址的机器上，并将它们放在任意目录。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;开始使用！&#34;&gt;&lt;a href=&#34;#开始使用！&#34; class=&#34;headerlink&#34; title=&#34;开始使用！&#34;&gt;&lt;/a&gt;开始使用！&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;编写配置文件，目前支持的文件格式包括 TOML&amp;#x2F;YAML&amp;#x2F;JSON，旧的 INI 格式仍然支持，但已经不再推荐。&lt;/li&gt;
&lt;li&gt;使用以下命令启动服务器：&lt;code&gt;./frps -c ./frps.toml&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;使用以下命令启动客户端：&lt;code&gt;./frpc -c ./frpc.toml&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;如果需要在后台长期运行，建议结合其他工具，如 &lt;code&gt;systemd&lt;/code&gt; 和 &lt;code&gt;supervisor&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;配置&#34;&gt;&lt;a href=&#34;#配置&#34; class=&#34;headerlink&#34; title=&#34;配置&#34;&gt;&lt;/a&gt;配置&lt;/h1&gt;&lt;p&gt;&lt;a href=&#34;https://gofrp.org/zh-cn/docs/examples/&#34;&gt;配置示例&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  具体配置可以参考官方文档，写的挺详细的，不过提示一点，配置文件的配置项有顺序要求，需要注意。&lt;/p&gt;
&lt;p&gt;  例如&lt;code&gt;frpc&lt;/code&gt;的配置中&lt;code&gt;auth.token&lt;/code&gt; 需要放在全局配置里面，不能放在&lt;code&gt;[[proxies]]&lt;/code&gt;等等配置选项后面。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;配置文件参考&#34;&gt;&lt;a href=&#34;#配置文件参考&#34; class=&#34;headerlink&#34; title=&#34;配置文件参考&#34;&gt;&lt;/a&gt;配置文件参考&lt;/h2&gt;&lt;h3 id=&#34;frps&#34;&gt;&lt;a href=&#34;#frps&#34; class=&#34;headerlink&#34; title=&#34;frps&#34;&gt;&lt;/a&gt;frps&lt;/h3&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml&#34;&gt;frps&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight ini&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;87&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;88&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;89&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;90&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;91&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;92&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;93&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;94&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;95&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;96&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;97&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;98&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;99&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;100&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;101&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;102&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;103&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;104&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;105&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;106&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;107&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;108&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;109&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;110&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;111&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;112&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;113&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;114&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;115&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;116&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;117&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;118&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;119&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;120&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;121&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;122&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;123&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;124&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;125&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;126&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;127&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;128&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;129&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;130&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;131&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;132&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;133&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;134&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;135&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;136&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;137&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;138&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;139&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;140&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;141&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;142&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;143&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;144&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;145&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;146&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;147&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;148&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;149&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;150&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;151&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;152&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;153&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;154&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;155&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;156&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;157&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;158&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;159&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;160&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;161&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;162&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;163&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;164&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs ini&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# This configuration file is for reference only. Please do not use this configuration directly to run the program as it may have various issues.&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# A literal address or host name for IPv6 must be enclosed&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# in square brackets, as in &amp;quot;[::1]:80&amp;quot;, &amp;quot;[ipv6-host]:http&amp;quot; or &amp;quot;[ipv6-host%zone]:80&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# For single &amp;quot;bindAddr&amp;quot; field, no need square brackets, like `bindAddr = &amp;quot;::&amp;quot;`.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;bindAddr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;0.0.0.0&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;bindPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;7000&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# udp port used for kcp protocol, it can be same with &amp;#x27;bindPort&amp;#x27;.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# if not set, kcp is disabled in frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;kcpBindPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;7000&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# udp port used for quic protocol.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# if not set, quic is disabled in frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# quicBindPort = 7002&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Specify which address proxy will listen for, default value is same with bindAddr&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# proxyBindAddr = &amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# quic protocol options&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.quic.keepalivePeriod = 10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.quic.maxIdleTimeout = 30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.quic.maxIncomingStreams = 100000&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Heartbeat configure, it&amp;#x27;s not recommended to modify the default value&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# The default value of heartbeatTimeout is 90. Set negative value to disable it.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.heartbeatTimeout = 90&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Pool count in each proxy will keep no more than maxPoolCount.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.maxPoolCount&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If tcp stream multiplexing is used, default is true&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tcpMux = true&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Specify keep alive interval for tcp mux.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# only valid if tcpMux is true.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tcpMuxKeepaliveInterval = 60&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpKeepalive specifies the interval between keep-alive probes for an active network connection between frpc and frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If negative, keep-alive probes are disabled.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tcpKeepalive = 7200&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.force specifies whether to only accept TLS-encrypted connections. By default, the value is false.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.tls.force&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.certFile = &amp;quot;server.crt&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.keyFile = &amp;quot;server.key&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.trustedCaFile = &amp;quot;ca.crt&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If you want to support virtual host, you must set the http port for listening (optional)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# &lt;span class=&#34;hljs-doctag&#34;&gt;Note:&lt;/span&gt; http port and https port can be same with bindPort&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;vhostHTTPPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;vhostHTTPSPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;443&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Response header timeout(seconds) for vhost http server, default is 60s&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# vhostHTTPTimeout = 60&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpmuxHTTPConnectPort specifies the port that the server listens for TCP&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# HTTP CONNECT requests. If the value is 0, the server will not multiplex TCP&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# requests on one single port. If it&amp;#x27;s not - it will listen on this value for&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# HTTP CONNECT requests. By default, this value is 0.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpmuxHTTPConnectPort = 1337&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If tcpmuxPassthrough is true, frps won&amp;#x27;t do any update on traffic.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpmuxPassthrough = false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Configure the web server to enable the dashboard for frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# dashboard is available only if webServer.port is set.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.addr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.port&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;7500&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.user&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;admin&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.password&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;admin&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# webServer.tls.certFile = &amp;quot;server.crt&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# webServer.tls.keyFile = &amp;quot;server.key&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# dashboard assets directory(only for debug mode)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# webServer.assetsDir = &amp;quot;./static&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Enable golang pprof handlers in dashboard listener.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Dashboard port must be set first&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.pprofEnable&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# enablePrometheus will export prometheus metrics on webServer in /metrics api.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;enablePrometheus&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# console or real logFile path like ./frps.log&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.to&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;./frps.log&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# trace, debug, info, warn, error&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.level&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;info&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.maxDays&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# disable log colors when log.to is console, default is false&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.disablePrintColor&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# DetailedErrorsToClient defines whether to send the specific error (with debug info) to frpc. By default, this value is true.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;detailedErrorsToClient&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth.method specifies what authentication method to use authenticate frpc with frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If &amp;quot;token&amp;quot; is specified - token will be read into login message.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If &amp;quot;oidc&amp;quot; is specified - OIDC (Open ID Connect) token will be issued using OIDC settings. By default, this value is &amp;quot;token&amp;quot;.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.method&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;token&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth.additionalScopes specifies additional scopes to include authentication information.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Optional values are HeartBeats, NewWorkConns.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth.additionalScopes = [&amp;quot;HeartBeats&amp;quot;, &amp;quot;NewWorkConns&amp;quot;]&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth token&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.token&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;12345678&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc issuer specifies the issuer to verify OIDC tokens with.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.issuer&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc audience specifies the audience OIDC tokens should contain when validated.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.audience&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc skipExpiryCheck specifies whether to skip checking if the OIDC token is expired.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.skipExpiryCheck&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc skipIssuerCheck specifies whether to skip checking if the OIDC token&amp;#x27;s issuer claim matches the issuer specified in OidcIssuer.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.skipIssuerCheck&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# userConnTimeout specifies the maximum time to wait for a work connection.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# userConnTimeout = 10&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Only allow frpc to bind ports you list. By default, there won&amp;#x27;t be any limit.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;allowPorts&lt;/span&gt; = [&lt;br&gt;  &amp;#123; start = &lt;span class=&#34;hljs-number&#34;&gt;2000&lt;/span&gt;, end = &lt;span class=&#34;hljs-number&#34;&gt;3000&lt;/span&gt; &amp;#125;,&lt;br&gt;  &amp;#123; single = &lt;span class=&#34;hljs-number&#34;&gt;3001&lt;/span&gt; &amp;#125;,&lt;br&gt;  &amp;#123; single = &lt;span class=&#34;hljs-number&#34;&gt;3003&lt;/span&gt; &amp;#125;,&lt;br&gt;  &amp;#123; start = &lt;span class=&#34;hljs-number&#34;&gt;4000&lt;/span&gt;, end = &lt;span class=&#34;hljs-number&#34;&gt;50000&lt;/span&gt; &amp;#125;&lt;br&gt;]&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Max ports can be used for each client, default value is 0 means no limit&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;maxPortsPerClient&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If subDomainHost is not empty, you can set subdomain when type is http or https in frpc&amp;#x27;s configure file&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# When subdomain is test, the host used by routing is test.frps.com&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;subDomainHost&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;frps.com&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# custom 404 page for HTTP requests&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# custom404Page = &amp;quot;/path/to/404.html&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# specify udp packet size, unit is byte. If not set, the default value is 1500.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# This parameter should be same between client and server.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# It affects the udp and sudp proxy.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;udpPacketSize&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;1500&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Retention time for NAT hole punching strategy data.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;natholeAnalysisDataReserveHours&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;168&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# ssh tunnel gateway&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If you want to enable this feature, the bindPort parameter is required, while others are optional.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# By default, this feature is disabled. It will be enabled if bindPort is greater than 0.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.bindPort = 2200&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.privateKeyFile = &amp;quot;/home/frp-user/.ssh/id_rsa&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.autoGenPrivateKeyPath = &amp;quot;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.authorizedKeysFile = &amp;quot;/home/frp-user/.ssh/authorized_keys&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-section&#34;&gt;[[httpPlugins]]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;user-manager&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;addr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1:9000&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;path&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;/handler&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;ops&lt;/span&gt; = [&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;Login&amp;quot;&lt;/span&gt;]&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-section&#34;&gt;[[httpPlugins]]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;port-manager&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;addr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1:9001&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;path&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;/handler&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;ops&lt;/span&gt; = [&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;NewProxy&amp;quot;&lt;/span&gt;]&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&#34;frpc&#34;&gt;&lt;a href=&#34;#frpc&#34; class=&#34;headerlink&#34; title=&#34;frpc&#34;&gt;&lt;/a&gt;frpc&lt;/h3&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml&#34;&gt;frpc&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight ini&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;87&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;88&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;89&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;90&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;91&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;92&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;93&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;94&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;95&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;96&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;97&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;98&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;99&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;100&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;101&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;102&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;103&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;104&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;105&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;106&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;107&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;108&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;109&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;110&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;111&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;112&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;113&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;114&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;115&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;116&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;117&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;118&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;119&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;120&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;121&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;122&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;123&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;124&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;125&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;126&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;127&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;128&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;129&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;130&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;131&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;132&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;133&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;134&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;135&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;136&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;137&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;138&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;139&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;140&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;141&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;142&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;143&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;144&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;145&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;146&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;147&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;148&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;149&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;150&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;151&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;152&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;153&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;154&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;155&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;156&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;157&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;158&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;159&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;160&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;161&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;162&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;163&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;164&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs ini&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# This configuration file is for reference only. Please do not use this configuration directly to run the program as it may have various issues.&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# A literal address or host name for IPv6 must be enclosed&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# in square brackets, as in &amp;quot;[::1]:80&amp;quot;, &amp;quot;[ipv6-host]:http&amp;quot; or &amp;quot;[ipv6-host%zone]:80&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# For single &amp;quot;bindAddr&amp;quot; field, no need square brackets, like `bindAddr = &amp;quot;::&amp;quot;`.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;bindAddr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;0.0.0.0&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;bindPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;7000&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# udp port used for kcp protocol, it can be same with &amp;#x27;bindPort&amp;#x27;.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# if not set, kcp is disabled in frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;kcpBindPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;7000&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# udp port used for quic protocol.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# if not set, quic is disabled in frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# quicBindPort = 7002&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Specify which address proxy will listen for, default value is same with bindAddr&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# proxyBindAddr = &amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# quic protocol options&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.quic.keepalivePeriod = 10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.quic.maxIdleTimeout = 30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.quic.maxIncomingStreams = 100000&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Heartbeat configure, it&amp;#x27;s not recommended to modify the default value&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# The default value of heartbeatTimeout is 90. Set negative value to disable it.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.heartbeatTimeout = 90&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Pool count in each proxy will keep no more than maxPoolCount.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.maxPoolCount&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If tcp stream multiplexing is used, default is true&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tcpMux = true&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Specify keep alive interval for tcp mux.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# only valid if tcpMux is true.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tcpMuxKeepaliveInterval = 60&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpKeepalive specifies the interval between keep-alive probes for an active network connection between frpc and frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If negative, keep-alive probes are disabled.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tcpKeepalive = 7200&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.force specifies whether to only accept TLS-encrypted connections. By default, the value is false.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.tls.force&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.certFile = &amp;quot;server.crt&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.keyFile = &amp;quot;server.key&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# transport.tls.trustedCaFile = &amp;quot;ca.crt&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If you want to support virtual host, you must set the http port for listening (optional)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# &lt;span class=&#34;hljs-doctag&#34;&gt;Note:&lt;/span&gt; http port and https port can be same with bindPort&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;vhostHTTPPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;vhostHTTPSPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;443&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Response header timeout(seconds) for vhost http server, default is 60s&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# vhostHTTPTimeout = 60&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpmuxHTTPConnectPort specifies the port that the server listens for TCP&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# HTTP CONNECT requests. If the value is 0, the server will not multiplex TCP&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# requests on one single port. If it&amp;#x27;s not - it will listen on this value for&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# HTTP CONNECT requests. By default, this value is 0.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpmuxHTTPConnectPort = 1337&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If tcpmuxPassthrough is true, frps won&amp;#x27;t do any update on traffic.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcpmuxPassthrough = false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Configure the web server to enable the dashboard for frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# dashboard is available only if webServer.port is set.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.addr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.port&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;7500&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.user&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;admin&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.password&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;admin&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# webServer.tls.certFile = &amp;quot;server.crt&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# webServer.tls.keyFile = &amp;quot;server.key&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# dashboard assets directory(only for debug mode)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# webServer.assetsDir = &amp;quot;./static&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Enable golang pprof handlers in dashboard listener.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Dashboard port must be set first&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.pprofEnable&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# enablePrometheus will export prometheus metrics on webServer in /metrics api.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;enablePrometheus&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# console or real logFile path like ./frps.log&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.to&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;./frps.log&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# trace, debug, info, warn, error&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.level&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;info&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.maxDays&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# disable log colors when log.to is console, default is false&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;log.disablePrintColor&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# DetailedErrorsToClient defines whether to send the specific error (with debug info) to frpc. By default, this value is true.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;detailedErrorsToClient&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth.method specifies what authentication method to use authenticate frpc with frps.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If &amp;quot;token&amp;quot; is specified - token will be read into login message.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If &amp;quot;oidc&amp;quot; is specified - OIDC (Open ID Connect) token will be issued using OIDC settings. By default, this value is &amp;quot;token&amp;quot;.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.method&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;token&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth.additionalScopes specifies additional scopes to include authentication information.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Optional values are HeartBeats, NewWorkConns.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth.additionalScopes = [&amp;quot;HeartBeats&amp;quot;, &amp;quot;NewWorkConns&amp;quot;]&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth token&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.token&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;12345678&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc issuer specifies the issuer to verify OIDC tokens with.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.issuer&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc audience specifies the audience OIDC tokens should contain when validated.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.audience&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc skipExpiryCheck specifies whether to skip checking if the OIDC token is expired.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.skipExpiryCheck&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# oidc skipIssuerCheck specifies whether to skip checking if the OIDC token&amp;#x27;s issuer claim matches the issuer specified in OidcIssuer.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.oidc.skipIssuerCheck&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;false&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# userConnTimeout specifies the maximum time to wait for a work connection.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# userConnTimeout = 10&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Only allow frpc to bind ports you list. By default, there won&amp;#x27;t be any limit.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;allowPorts&lt;/span&gt; = [&lt;br&gt;  &amp;#123; start = &lt;span class=&#34;hljs-number&#34;&gt;2000&lt;/span&gt;, end = &lt;span class=&#34;hljs-number&#34;&gt;3000&lt;/span&gt; &amp;#125;,&lt;br&gt;  &amp;#123; single = &lt;span class=&#34;hljs-number&#34;&gt;3001&lt;/span&gt; &amp;#125;,&lt;br&gt;  &amp;#123; single = &lt;span class=&#34;hljs-number&#34;&gt;3003&lt;/span&gt; &amp;#125;,&lt;br&gt;  &amp;#123; start = &lt;span class=&#34;hljs-number&#34;&gt;4000&lt;/span&gt;, end = &lt;span class=&#34;hljs-number&#34;&gt;50000&lt;/span&gt; &amp;#125;&lt;br&gt;]&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Max ports can be used for each client, default value is 0 means no limit&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;maxPortsPerClient&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If subDomainHost is not empty, you can set subdomain when type is http or https in frpc&amp;#x27;s configure file&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# When subdomain is test, the host used by routing is test.frps.com&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;subDomainHost&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;frps.com&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# custom 404 page for HTTP requests&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# custom404Page = &amp;quot;/path/to/404.html&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# specify udp packet size, unit is byte. If not set, the default value is 1500.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# This parameter should be same between client and server.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# It affects the udp and sudp proxy.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;udpPacketSize&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;1500&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Retention time for NAT hole punching strategy data.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;natholeAnalysisDataReserveHours&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;168&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# ssh tunnel gateway&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# If you want to enable this feature, the bindPort parameter is required, while others are optional.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# By default, this feature is disabled. It will be enabled if bindPort is greater than 0.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.bindPort = 2200&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.privateKeyFile = &amp;quot;/home/frp-user/.ssh/id_rsa&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.autoGenPrivateKeyPath = &amp;quot;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# sshTunnelGateway.authorizedKeysFile = &amp;quot;/home/frp-user/.ssh/authorized_keys&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-section&#34;&gt;[[httpPlugins]]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;user-manager&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;addr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1:9000&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;path&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;/handler&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;ops&lt;/span&gt; = [&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;Login&amp;quot;&lt;/span&gt;]&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-section&#34;&gt;[[httpPlugins]]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;port-manager&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;addr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1:9001&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;path&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;/handler&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;ops&lt;/span&gt; = [&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;NewProxy&amp;quot;&lt;/span&gt;]&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;


&lt;h2 id=&#34;一个当前使用的配置参考&#34;&gt;&lt;a href=&#34;#一个当前使用的配置参考&#34; class=&#34;headerlink&#34; title=&#34;一个当前使用的配置参考&#34;&gt;&lt;/a&gt;一个当前使用的配置参考&lt;/h2&gt;&lt;p&gt;Frps&lt;/p&gt;
&lt;figure class=&#34;highlight ini&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs ini&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Server Addr&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;bindAddr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;x.x.x.x&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;bindPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;32700&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;vhostHTTPPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;32080&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;vhostHTTPSPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;32443&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Web Server&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 监控网页&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.addr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;x.x.x.x&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.port&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;32777&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.user&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;user&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;webServer.password&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# auth&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 鉴权&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.method&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;token&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.additionalScopes&lt;/span&gt; = [&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;NewWorkConns&amp;quot;&lt;/span&gt;]&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.token&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# allow port&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 配置允许使用的端口范围&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;allowPorts&lt;/span&gt; = [&lt;br&gt;  &amp;#123; start = &lt;span class=&#34;hljs-number&#34;&gt;32005&lt;/span&gt;, end = &lt;span class=&#34;hljs-number&#34;&gt;32032&lt;/span&gt; &amp;#125;,&lt;br&gt;  &amp;#123; single = &lt;span class=&#34;hljs-number&#34;&gt;32064&lt;/span&gt; &amp;#125;&lt;br&gt;]&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# subdomain&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 可以通过特定的子域名访问&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;subdomainHost&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;x.xxx.top&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;Frpc&lt;/p&gt;
&lt;figure class=&#34;highlight ini&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs ini&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Server Addr&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;serverAddr&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;x.x.x.x&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;serverPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;32700&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 用户名配置，避免proxies.name的重名&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;user&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;pandora&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 鉴权&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.method&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;token&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;auth.token&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# tcp 代理&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-section&#34;&gt;[[proxies]]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;tcp&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;localIP&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;localPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;5000&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;remotePort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;32005&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 加密&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.useEncryption&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.useCompression&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;healthCheck.type&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;tcp&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# https 代理&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-section&#34;&gt;[[proxies]]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;nas_https&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;https&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;localIP&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;localPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;5001&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.useEncryption&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;transport.useCompression&lt;/span&gt; = &lt;span class=&#34;hljs-literal&#34;&gt;true&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 域名配置&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;customDomains&lt;/span&gt; = [&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;a.x.xxx.top&amp;quot;&lt;/span&gt;]&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# p2p 打洞&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-section&#34;&gt;[[proxies]]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;name&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;p2p_nas&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;type&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;xtcp&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;secretKey&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;localIP&lt;/span&gt; = &lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-attr&#34;&gt;localPort&lt;/span&gt; = &lt;span class=&#34;hljs-number&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;





 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2023/96364bb6/</guid>
            <title>踩坑记 BSS段的初始化</title>
            <link>https://www.oikiou.top/2023/96364bb6/</link>
            <category>embedded</category>
            <pubDate>Fri, 20 Oct 2023 19:23:05 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;前言&#34;&gt;&lt;a href=&#34;#前言&#34; class=&#34;headerlink&#34; title=&#34;前言&#34;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;接手一个项目，调试全靠串口日志，测试同事测试产品的时候无法拿到日志，刚好产品RAM够大，且刚好有SD卡。所以就诞生了将日志缓存在RAM上，在特定条件下将它写到SD卡上的想法。&lt;/p&gt;
&lt;p&gt;开工。&lt;/p&gt;
&lt;p&gt;写完代码之后发现机器&lt;strong&gt;偶尔会无法启动&lt;/strong&gt;，无法开机，无任何日志。&lt;/p&gt;
&lt;p&gt;有的时候是&lt;strong&gt;烧录完成代码后重启无法启动&lt;/strong&gt;，有些情况下是&lt;strong&gt;烧录完成代码后运行正常，放置一段时间后无法启动&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;有时候有些无法启动的机器&lt;strong&gt;放置一段时间又成功启动&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;一段一段代码，屏蔽，编译，验证，发现一个非常无法理解的事，&lt;code&gt;TFCardLogBufferPut&lt;/code&gt;函数注释后设备可以正常启动。&lt;/p&gt;
&lt;p&gt;看代码：&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs c&#34;&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; TF_CARD_LOG_BUFFER_SIZE     (64*1024ul)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;uint8_t&lt;/span&gt; tfCardLogBuffer[TF_CARD_LOG_BUFFER_SIZE] = &amp;#123;&lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;&amp;#125;;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;uint32_t&lt;/span&gt; tfCardLogBufferIndex = &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;TFCardLogBufferPut&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(&lt;span class=&#34;hljs-type&#34;&gt;uint8_t&lt;/span&gt; data)&lt;/span&gt; &amp;#123;&lt;br&gt;    tfCardLogBuffer[tfCardLogBufferIndex] = data;&lt;br&gt;    tfCardLogBufferIndex++;&lt;br&gt;    &lt;span class=&#34;hljs-keyword&#34;&gt;if&lt;/span&gt;( tfCardLogBufferIndex&amp;gt;=(&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer)/&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer[&lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;]))&lt;span class=&#34;hljs-number&#34;&gt;-1&lt;/span&gt; ) &amp;#123;&lt;br&gt;        tfCardLogBufferIndex = &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;;&lt;br&gt;    &amp;#125;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;我实在无法理解，这段代码是如何导致设备无法启动的，后面搁置了一段时间，遂归结于小众芯片不完善导致。&lt;/p&gt;
&lt;p&gt;但是后面这个需求实在是过于旺盛，遂重新开始验证代码。&lt;/p&gt;
&lt;p&gt;当时代码是这样的：&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs c&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;// main.c&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(&lt;span class=&#34;hljs-type&#34;&gt;int&lt;/span&gt; argc, &lt;span class=&#34;hljs-type&#34;&gt;char&lt;/span&gt; **argv)&lt;/span&gt; &amp;#123;&lt;br&gt;    &lt;br&gt;    hal_uartInit();&lt;br&gt;    ax32xx_uart0SendByte(&lt;span class=&#34;hljs-string&#34;&gt;&amp;#x27;a&amp;#x27;&lt;/span&gt;);&lt;br&gt;    ax32xx_uart0SendByte(&lt;span class=&#34;hljs-string&#34;&gt;&amp;#x27;b&amp;#x27;&lt;/span&gt;);&lt;br&gt;    hal_uartSendData(&lt;span class=&#34;hljs-string&#34;&gt;&amp;#x27;1&amp;#x27;&lt;/span&gt;);&lt;br&gt;    hal_uartSendData(&lt;span class=&#34;hljs-string&#34;&gt;&amp;#x27;2&amp;#x27;&lt;/span&gt;);&lt;br&gt;    ax32xx_uart0SendByte(&lt;span class=&#34;hljs-string&#34;&gt;&amp;#x27;c&amp;#x27;&lt;/span&gt;);&lt;br&gt;    &lt;br&gt;    hal_sysInit();&lt;br&gt;    &lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;//.... some code here&lt;/span&gt;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;// uart.c&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;hal_uartSendData&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(u8 data)&lt;/span&gt;&lt;br&gt;&amp;#123;&lt;br&gt;    ax32xx_uart0SendByte(data);&lt;br&gt;    &lt;br&gt;    TFCardLogBufferPut(data);&lt;br&gt;&amp;#125;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;ax32xx_uart0SendByte&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(u8 data)&lt;/span&gt;&lt;br&gt;&amp;#123;&lt;br&gt;    R_UART_DATA0 = data;&lt;br&gt;    &lt;span class=&#34;hljs-keyword&#34;&gt;while&lt;/span&gt;((R_UART_PEND0 &amp;amp; &lt;span class=&#34;hljs-number&#34;&gt;0x2&lt;/span&gt;)==&lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;);&lt;br&gt;    R_UART_PEND0 |= &lt;span class=&#34;hljs-number&#34;&gt;1&lt;/span&gt;;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta&#34;&gt;#&lt;span class=&#34;hljs-keyword&#34;&gt;define&lt;/span&gt; TF_CARD_LOG_BUFFER_SIZE     (64*1024ul)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;uint8_t&lt;/span&gt; tfCardLogBuffer[TF_CARD_LOG_BUFFER_SIZE] = &amp;#123;&lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;&amp;#125;;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;uint32_t&lt;/span&gt; tfCardLogBufferIndex = &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;TFCardLogBufferPut&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(&lt;span class=&#34;hljs-type&#34;&gt;uint8_t&lt;/span&gt; data)&lt;/span&gt; &amp;#123;&lt;br&gt;    tfCardLogBuffer[tfCardLogBufferIndex] = data;&lt;br&gt;    tfCardLogBufferIndex = (tfCardLogBufferIndex&amp;gt;=(&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer)/&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer[&lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;]))&lt;span class=&#34;hljs-number&#34;&gt;-1&lt;/span&gt;) ? &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt; : tfCardLogBufferIndex+&lt;span class=&#34;hljs-number&#34;&gt;1&lt;/span&gt;;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;运行后日志是这样的：&lt;/p&gt;
&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs log&#34;&gt;# 正常运行 的日志&lt;br&gt;ab12c ...&lt;br&gt;&lt;br&gt;# 无法启动 的日志&lt;br&gt;ab1&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;后面我就猜想了很多：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个soc不能支持这么大的数值 64KB&lt;/li&gt;
&lt;li&gt;这个位置的内存被改写了&lt;/li&gt;
&lt;li&gt;和冷启动热启动有关&lt;/li&gt;
&lt;li&gt;芯片异常&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后面我猜想，试试把&lt;code&gt;TFCardLogBufferPut&lt;/code&gt;函数里面的&lt;code&gt;tfCardLogBufferIndex&lt;/code&gt;的数值和&lt;code&gt;data&lt;/code&gt;数值输出出来看看。&lt;/p&gt;
&lt;p&gt;这一看不得了，越界了！&lt;/p&gt;
&lt;p&gt;代码：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/96364bb6/image-20231020190520640.png&#34; alt=&#34;image-20231020190520640&#34;&gt;&lt;/p&gt;
&lt;p&gt;输出日志：&lt;/p&gt;
&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs log&#34;&gt;ab1z31m00327300&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;





&lt;p&gt;这个&lt;code&gt;tfCardLogBufferIndex&lt;/code&gt;越界了啊！而且初始化赋0并没有成功！这就非常坑爹了！&lt;/p&gt;
&lt;p&gt;后面尝试在调用这个函数之前再次赋0，发现程序运行正常，设备也正常启动。&lt;/p&gt;
&lt;p&gt;查看map文件这个数组和变量也是存放在BSS段的，这就非常令人费解了。&lt;/p&gt;
&lt;p&gt;看到这里我直接就怀疑，就是这个芯片的锅。&lt;/p&gt;
&lt;p&gt;但是别急这还不是让人最震惊的！后面还有让人更加鼻血飙升的。&lt;/p&gt;
&lt;p&gt;最后找FAE排查问题很久，最后发现BSS段在&lt;code&gt;hal_sysInit&lt;/code&gt;函数内初始化。&lt;/p&gt;
&lt;p&gt;看代码：&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs c&#34;&gt;&lt;span class=&#34;hljs-type&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;ax32xx_sysInit&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(u32 *saddr,u32 *eaddr)&lt;/span&gt;&lt;br&gt;&amp;#123;&lt;br&gt;	debg(&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;sys init\n&amp;quot;&lt;/span&gt;);			&lt;span class=&#34;hljs-comment&#34;&gt;// 这个debg会调用 hal_uartSendData 函数输出日志&lt;/span&gt;&lt;br&gt;    &lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;//...&lt;/span&gt;&lt;br&gt;    &lt;br&gt;	ax32xx_wdtClear();&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;//-----cache set&lt;/span&gt;&lt;br&gt;	ax32xx_sysIcacheInit();&lt;br&gt;	ax32xx_sysDcacheInit();	&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;//-----bss clear&lt;/span&gt;&lt;br&gt;	ax32xx_sysBSSClear();&lt;br&gt;    &lt;br&gt;    &lt;span class=&#34;hljs-comment&#34;&gt;// ...&lt;/span&gt;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;实在是震惊，无法理解这个RAM的初始化为什么放在main函数里面，实在无法理解进入main函数了，c语言环境都没有OK。&lt;/p&gt;
&lt;p&gt;最烦的就是这种xx芯片，总是会有一些让人血压飙升的操作。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  参考ARM MDK在编译的时候BSS初始化的操作是放在&lt;code&gt;__main&lt;/code&gt;函数里面，需要注意的是这个&lt;code&gt;__main&lt;/code&gt;不是c语言里面的&lt;code&gt;main&lt;/code&gt;函数，它是从MDK自带的库文件里链接的一个函数。这个&lt;code&gt;__main&lt;/code&gt;函数会初始化这些段，并调用&lt;code&gt;__rt_entry&lt;/code&gt;，最终在&lt;code&gt;__rt_entry&lt;/code&gt;中将会调用c语言里面的&lt;code&gt;main&lt;/code&gt;函数。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;教训总结&#34;&gt;&lt;a href=&#34;#教训总结&#34; class=&#34;headerlink&#34; title=&#34;教训总结&#34;&gt;&lt;/a&gt;教训总结&lt;/h1&gt;&lt;p&gt;在对数组进行访问的时候一定要先检查范围。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs c&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;// 原函数&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;TFCardLogBufferPut&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(&lt;span class=&#34;hljs-type&#34;&gt;uint8_t&lt;/span&gt; data)&lt;/span&gt; &amp;#123;&lt;br&gt;    tfCardLogBuffer[tfCardLogBufferIndex] = data;&lt;br&gt;    tfCardLogBufferIndex = (tfCardLogBufferIndex&amp;gt;=(&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer)/&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer[&lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;]))&lt;span class=&#34;hljs-number&#34;&gt;-1&lt;/span&gt;) ? &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt; : tfCardLogBufferIndex+&lt;span class=&#34;hljs-number&#34;&gt;1&lt;/span&gt;;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;// 改后&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-type&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;hljs-title function_&#34;&gt;TFCardLogBufferPut&lt;/span&gt;&lt;span class=&#34;hljs-params&#34;&gt;(&lt;span class=&#34;hljs-type&#34;&gt;uint8_t&lt;/span&gt; data)&lt;/span&gt; &amp;#123;&lt;br&gt;    &lt;span class=&#34;hljs-keyword&#34;&gt;if&lt;/span&gt;( tfCardLogBufferIndex&amp;gt;=(&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer)/&lt;span class=&#34;hljs-keyword&#34;&gt;sizeof&lt;/span&gt;(tfCardLogBuffer[&lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;]))&lt;span class=&#34;hljs-number&#34;&gt;-1&lt;/span&gt; ) &amp;#123;&lt;br&gt;        tfCardLogBufferIndex = &lt;span class=&#34;hljs-number&#34;&gt;0&lt;/span&gt;;&lt;br&gt;    &amp;#125;&lt;br&gt;    tfCardLogBuffer[tfCardLogBufferIndex] = data;&lt;br&gt;    tfCardLogBufferIndex++;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://www.oikiou.top/2023/52f35219/</guid>
            <title>ProxmoxVE</title>
            <link>https://www.oikiou.top/2023/52f35219/</link>
            <category>pve</category>
            <category>virtual</category>
            <pubDate>Thu, 24 Aug 2023 22:57:15 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;ProxmoxVE&#34;&gt;&lt;a href=&#34;#ProxmoxVE&#34; class=&#34;headerlink&#34; title=&#34;ProxmoxVE&#34;&gt;&lt;/a&gt;ProxmoxVE&lt;/h1&gt;&lt;h2 id=&#34;一些前置知识&#34;&gt;&lt;a href=&#34;#一些前置知识&#34; class=&#34;headerlink&#34; title=&#34;一些前置知识&#34;&gt;&lt;/a&gt;一些前置知识&lt;/h2&gt;&lt;h3 id=&#34;qcow2-raw-vmdk-磁盘格式的区别&#34;&gt;&lt;a href=&#34;#qcow2-raw-vmdk-磁盘格式的区别&#34; class=&#34;headerlink&#34; title=&#34;qcow2 raw vmdk 磁盘格式的区别&#34;&gt;&lt;/a&gt;qcow2 raw vmdk 磁盘格式的区别&lt;/h3&gt;&lt;p&gt;KVM 虚拟化中使用的镜像格式通常为 RAW 和 QCOW2 两种格式.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2 id=&#34;RAW-img&#34;&gt;&lt;a href=&#34;#RAW-img&#34; class=&#34;headerlink&#34; title=&#34;RAW (img)&#34;&gt;&lt;/a&gt;RAW (img)&lt;/h2&gt;&lt;p&gt;  RAW 的原意是「未被加工的」, 所以 RAW 格式镜像文件又被称为 &lt;em&gt;原始镜像&lt;/em&gt; 或 &lt;em&gt;裸设备镜像&lt;/em&gt;, 从这些称谓可以看出, RAW 格式镜像文件能够直接当作一个块设备, 以供 GuestOS 使用. 也就是说 KVM 的 GuestOS 可以直接从 RAW 镜像中启动, 就如 HostOS 直接从硬盘中启动一般.&lt;/p&gt;
&lt;ul&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;
&lt;li&gt;占用空间取决于实际使用的数据量，类似于物理磁盘。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  &lt;strong&gt;块设备&lt;/strong&gt;: IO 设备中的一类, 将信息存储在固定大小的块中, 并且每个块都有自己的地址, 常用的块设备有硬盘.&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt;因为 RAW 镜像文件赤裸裸的特性带来了下列好处:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 dd 指令创建一个 File 就能够模拟 RAW 镜像文件&lt;/li&gt;
&lt;li&gt;性能较 QCOW2 要更高 (I&amp;#x2F;O 效率更高25%左右)&lt;/li&gt;
&lt;li&gt;支持裸设备的原生特性, 例如: 直接挂载&lt;/li&gt;
&lt;li&gt;能够随意转换格式, 甚至作为其他两种格式转换时的中间格式&lt;/li&gt;
&lt;li&gt;能够使用 dd 指令来追加 RAW 镜像文件的空间&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  &lt;strong&gt;相对的, RAW 镜像文件也具有一个非常大的缺陷, 就是不支持快照.&lt;/strong&gt; 所以才有了后来 QCOW 和 QCOW2 的发展.&lt;/p&gt;
&lt;h2 id=&#34;QCOW2-QEMU-COW-2&#34;&gt;&lt;a href=&#34;#QCOW2-QEMU-COW-2&#34; class=&#34;headerlink&#34; title=&#34;QCOW2 (QEMU-COW 2)&#34;&gt;&lt;/a&gt;QCOW2 (QEMU-COW 2)&lt;/h2&gt;&lt;p&gt;  (摘自官方文档)QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller images on filesystems that don’t support sparse files, optional AES encryption, and optional zlib compression&lt;br&gt;  QEMU-COW 镜像文件具有一系列特性, 支持包括 &lt;strong&gt;多重快照&lt;/strong&gt;(能够创建基于之前镜像的新镜像, 速度更快), &lt;strong&gt;占用更小的存储空间&lt;/strong&gt;(不支持稀疏特性, 不会预先分配指定 Size 的存储空间), &lt;strong&gt;可选的 AES 加密方式&lt;/strong&gt;, &lt;strong&gt;可选的 zlib 压缩方式&lt;/strong&gt; 等功能.&lt;/p&gt;
&lt;p&gt;  QCOW2 镜像格式是 KVM-QEMU 支持的磁盘镜像格式之一, &lt;strong&gt;其表现形式为在一个系统文件中模拟一个具有一定 Size 的块设备.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持快照功能，允许在不增加存储空间的前提下创建多个虚拟机状态的快照。&lt;/li&gt;
&lt;li&gt;支持压缩，可以减少存储空间的使用。&lt;/li&gt;
&lt;li&gt;支持加密，以保护虚拟机磁盘数据的安全性。&lt;/li&gt;
&lt;li&gt;支持Copy-on-Write，只有当数据被修改时才会占用新的存储空间。&lt;/li&gt;
&lt;li&gt;性能接近RAW格式，但提供了更多的高级功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;VMDK-Virtual-Machine-Disk&#34;&gt;&lt;a href=&#34;#VMDK-Virtual-Machine-Disk&#34; class=&#34;headerlink&#34; title=&#34;VMDK (Virtual Machine Disk)&#34;&gt;&lt;/a&gt;VMDK (Virtual Machine Disk)&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;主要由VMware使用，支持多种VMware产品。&lt;/li&gt;
&lt;li&gt;支持动态分配和固定大小的虚拟硬盘。&lt;/li&gt;
&lt;li&gt;与VMware的虚拟化环境紧密集成，提供了良好的性能和稳定性。&lt;/li&gt;
&lt;li&gt;支持快照功能，但与QCOW2的快照实现不同。&lt;/li&gt;
&lt;li&gt;通常不用于非VMware环境，与其他虚拟化平台的兼容性有限。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;网卡怎么选-VirtIO-E1000-RTL8139&#34;&gt;&lt;a href=&#34;#网卡怎么选-VirtIO-E1000-RTL8139&#34; class=&#34;headerlink&#34; title=&#34;网卡怎么选 VirtIO E1000 RTL8139&#34;&gt;&lt;/a&gt;网卡怎么选 VirtIO E1000 RTL8139&lt;/h3&gt;&lt;p&gt;“&lt;strong&gt;RTL8139&lt;/strong&gt;”（古董级别，性能较差，古老系统使用）速率可以达到100Mb&amp;#x2F;s，这个网卡的兼容性最好。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;   这个网卡模式是qemu-kvm默认的模拟网卡类型，RTL8139是Realtek半导体公司的一个10&amp;#x2F;100M网卡系列，是曾经非常流行（当然现在看来有点古老）且兼容性好的网卡，几乎所有的现代操作系统都对RTL8139网卡驱动的提供支持。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“&lt;strong&gt;E1000&lt;/strong&gt;”（水桶选手，千兆速率，各项都很均衡）速率可以达到1Gb&amp;#x2F;s，这个网卡的兼容性较好。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  提供Intel e1000系列的网卡模拟，纯的QEMU（非qemu-kvm）默认就是提供Intel e1000系列的虚拟网卡。&lt;/p&gt;
&lt;p&gt;  英特尔&lt;code&gt;e1000&lt;/code&gt;甚至为相当古老和不知名的操作系统提供了驱动程序。但物理 e1000 网卡的硬件相当复杂，因此会因为需要对其进行仿真而产生一些开销。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“&lt;strong&gt;VirtIO&lt;/strong&gt;” （性能之王，兼容极差）速率可以达到10Gb&amp;#x2F;s，这个网卡的兼容性最差，很多系统需要安装特定驱动才能使用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  是支持半虚拟化IO（virtio）的设备。&lt;/p&gt;
&lt;p&gt;  如果您在虚拟机内运行的内容都支持&lt;code&gt;virtio&lt;/code&gt;，它可能会为您提供最佳性能，因为它允许虚拟机跳过大多数相关步骤模拟虚拟网卡并控制虚拟硬件，主机利用实际物理网卡的硬件功能，最大限度地提高虚拟机流量的效益。&lt;/p&gt;
&lt;p&gt;  VirtIO驱动下载&lt;br&gt;  VirtIO windows的驱动文件可以在这里下载：&lt;br&gt;  &lt;a href=&#34;https://github.com/virtio-win/virtio-win-pkg-scripts&#34;&gt;https://github.com/virtio-win/virtio-win-pkg-scripts&lt;/a&gt;&lt;br&gt;  &lt;a href=&#34;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&#34;&gt;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;硬盘接口怎么选-IDE-SATA-SCSI-VirtIO&#34;&gt;&lt;a href=&#34;#硬盘接口怎么选-IDE-SATA-SCSI-VirtIO&#34; class=&#34;headerlink&#34; title=&#34;硬盘接口怎么选 IDE SATA SCSI VirtIO&#34;&gt;&lt;/a&gt;硬盘接口怎么选 IDE SATA SCSI VirtIO&lt;/h3&gt;&lt;p&gt;IDE 速度最差，兼容性较好，比较古老的接口了&lt;/p&gt;
&lt;p&gt;SATA 速度不错，兼容性也可以。&lt;/p&gt;
&lt;p&gt;SCSI （通常称为VirtIO SCSI ）&lt;/p&gt;
&lt;p&gt;VirtIO （通常称为VirtIO Block）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  一般来说，不鼓励使用&lt;code&gt;IDE&lt;/code&gt;或 ，&lt;code&gt;SATA&lt;/code&gt;因为它们相对较慢。在其最佳实践指南中，Proxmox 建议使用 VirtIO SCSI，即&lt;code&gt;SCSI&lt;/code&gt;连接到&lt;code&gt;VirtIO SCSI&lt;/code&gt;控制器的总线（在最新的 Proxmox 版本上默认选择）。这是假设您在具有快速磁盘阵列的服务器上运行 Proxmox，稍后会详细介绍。&lt;/p&gt;
&lt;p&gt;  使用&lt;code&gt;SCSI&lt;/code&gt;或&lt;code&gt;VirtIO&lt;/code&gt;。差异可以忽略不计，但两者都远远优于&lt;code&gt;SATA&lt;/code&gt;。Proxmox 建议使用，&lt;code&gt;SCSI&lt;/code&gt;因为它更新且维护得更好。&lt;/p&gt;
&lt;p&gt;  &lt;img src=&#34;/2023/52f35219/bus-types-table.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;  &lt;img src=&#34;/2023/52f35219/image-41.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;即local-lvm对应&amp;#x2F;dev&amp;#x2F;pve&amp;#x2F;data，&amp;#x2F;var&amp;#x2F;lib&amp;#x2F;vz&amp;#x2F;template&amp;#x2F;iso&lt;/p&gt;
&lt;p&gt;默认存在local目录，对应&amp;#x2F;var&amp;#x2F;lib&amp;#x2F;vz&lt;/p&gt;
&lt;h2 id=&#34;一些教程&#34;&gt;&lt;a href=&#34;#一些教程&#34; class=&#34;headerlink&#34; title=&#34;一些教程&#34;&gt;&lt;/a&gt;一些教程&lt;/h2&gt;&lt;p&gt;PVE 安装 &lt;a href=&#34;https://www.right.com.cn/forum/thread-8159418-1-1.html&#34;&gt;https://www.right.com.cn/forum/thread-8159418-1-1.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PVE 的群晖安装 &lt;a href=&#34;https://post.smzdm.com/p/a8x84l27/&#34;&gt;https://post.smzdm.com/p/a8x84l27/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/mokou/p/17042705.html&#34;&gt;https://www.cnblogs.com/mokou/p/17042705.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://post.smzdm.com/p/apv5xvk9/&#34;&gt;https://post.smzdm.com/p/apv5xvk9/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;群晖引导 &lt;a href=&#34;https://github.com/fbelavenuto/arpl&#34;&gt;https://github.com/fbelavenuto/arpl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wp.gxnas.com/12245.html&#34;&gt;https://wp.gxnas.com/12245.html&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;安装&#34;&gt;&lt;a href=&#34;#安装&#34; class=&#34;headerlink&#34; title=&#34;安装&#34;&gt;&lt;/a&gt;安装&lt;/h1&gt;&lt;p&gt; 准备工作&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;确保符合安装软件的最低要求&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;CPU: 64bit (Intel EMT64 or AMD64)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pve.proxmox.com/wiki/FAQ#Supported_CPU_chips&#34; title=&#34;FAQ&#34;&gt;Intel VT&amp;#x2F;AMD-V capable CPU&lt;/a&gt;&amp;#x2F;Mainboard for KVM full virtualization support&lt;/li&gt;
&lt;li&gt;RAM: 1 GB RAM, plus additional RAM needed for guests&lt;/li&gt;
&lt;li&gt;Hard drive with at least 16 GiB of space, plus additional space needed for guests&lt;/li&gt;
&lt;li&gt;One network card (NIC)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;下载PVE的ISO镜像&lt;br&gt;  &lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/proxmox/iso/&#34;&gt;https://mirrors.tuna.tsinghua.edu.cn/proxmox/iso/&lt;/a&gt;&lt;br&gt;  &lt;a href=&#34;https://www.proxmox.com/downloads&#34;&gt;https://www.proxmox.com/downloads&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;准备一个u盘&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;将ISO写入u盘&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rufus&lt;/li&gt;
&lt;li&gt;Win32DiskImager&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;使电脑从u盘启动&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;重启设备，正式进入安装流程&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;这里有两种安装方式&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图形化界面安装 (Graphical)（首选，用户体验更佳，交互更简单）&lt;/li&gt;
&lt;li&gt;终端UI界面安装 (Terminal UI)（备选，兼容性强，遇到非常新、非常旧的cpu，第一种方法无法使用的情况下就可以选用这种方式）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;硬盘格式&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这里有好几种硬盘格式可选。EXT4、XFS、ZFS 和 BTRFS。我只有一两个硬盘，数据相对不是特别的重要，就选默认的ext4了。&lt;ul&gt;
&lt;li&gt;几种格式的对比。&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.proxmox.com/threads/choose-between-ext4-xfs-zfs-and-btrfs-why.135128/&#34;&gt;Choose between EXT4, XFS, ZFS and BTRFS ? Why ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linux.cn/article-7083-1.html&#34;&gt;如何选择文件系统：EXT4、Btrfs 和 XFS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;系统将会自动安装，安装后会自动重启&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;ping&lt;/code&gt;对应地址，重启后不久正常通信后即可访问&lt;code&gt;pve ip:8006&lt;/code&gt;进入管理界面&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;重启后，PVE显示器也会提示管理地址。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;至此安装结束&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;推荐安装完成后再安装上一个PVETools。参考下文。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;Cmd&#34;&gt;&lt;a href=&#34;#Cmd&#34; class=&#34;headerlink&#34; title=&#34;Cmd&#34;&gt;&lt;/a&gt;Cmd&lt;/h1&gt;&lt;h2 id=&#34;虚拟机-操作指令&#34;&gt;&lt;a href=&#34;#虚拟机-操作指令&#34; class=&#34;headerlink&#34; title=&#34;虚拟机 操作指令&#34;&gt;&lt;/a&gt;虚拟机 操作指令&lt;/h2&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;87&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;取得虚拟机当前状态&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;pvesh get /nodes/&amp;lt;节点&lt;span class=&#34;hljs-built_in&#34;&gt;id&lt;/span&gt;&amp;gt;/qemu/&amp;lt;虚拟机&lt;span class=&#34;hljs-built_in&#34;&gt;id&lt;/span&gt;&amp;gt;/status/current&lt;/span&gt;&lt;br&gt;pvesh get /nodes/pve/qemu/107/status/current&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;关闭虚拟机&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;pvesh create /nodes/&amp;lt;节点&lt;span class=&#34;hljs-built_in&#34;&gt;id&lt;/span&gt;&amp;gt;/qemu/&amp;lt;虚拟机&lt;span class=&#34;hljs-built_in&#34;&gt;id&lt;/span&gt;&amp;gt;/status/stop&lt;/span&gt;&lt;br&gt;pvesh create /nodes/pve/qemu/107/status/stop&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;启动虚拟机&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;pvesh create /nodes/&amp;lt;节点&lt;span class=&#34;hljs-built_in&#34;&gt;id&lt;/span&gt;&amp;gt;/qemu/&amp;lt;虚拟机&lt;span class=&#34;hljs-built_in&#34;&gt;id&lt;/span&gt;&amp;gt;/status/start&lt;/span&gt;&lt;br&gt;pvesh create /nodes/pve/qemu/107/status/start&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;qm &amp;lt;命令&amp;gt; &amp;lt;vmid&amp;gt; [选项]&lt;br&gt;qm [create|set] &amp;lt;vmid&amp;gt;  # 创建虚拟机&lt;br&gt;    --memory  &amp;lt;MBYTES&amp;gt;    memory in MB (64 - 8192)&lt;br&gt;    --sockets &amp;lt;N&amp;gt;         set number of CPU sockets &amp;lt;N&amp;gt;&lt;br&gt;    --cores &amp;lt;N&amp;gt;           set cores per socket to &amp;lt;N&amp;gt;&lt;br&gt;    --ostype NAME         specify OS type&lt;br&gt;    --onboot [yes|no]     start at boot&lt;br&gt;    --keyboard XX         set vnc keyboard layout&lt;br&gt;    --cpuunits &amp;lt;num&amp;gt;      CPU weight for a VM&lt;br&gt;    --name &amp;lt;text&amp;gt;         set a name for the VM&lt;br&gt;    --description &amp;lt;text&amp;gt;  set VM description&lt;br&gt;    --boot [a|c|d|n]      specify boot order&lt;br&gt;    --bootdisk &amp;lt;disk&amp;gt;     enable booting from &amp;lt;disk&amp;gt;&lt;br&gt;    --acpi (yes|no)       enable/disable ACPI&lt;br&gt;    --kvm (yes|no)        enable/disable KVM&lt;br&gt;    --tdf (yes|no)        enable/disable time drift fix&lt;br&gt;    --localtime (yes|no)  set the RTC to local time&lt;br&gt;    --vga (gd5446|vesa)   specify VGA type&lt;br&gt;    --vlan[0-9u]          MODEL=XX:XX:XX:XX:XX:XX[,MODEL=YY:YY:YY:YY:YY:YY]&lt;br&gt;    --ide&amp;lt;N&amp;gt;              [volume=]volume,[,media=cdrom|disk]&lt;br&gt;                          [,cyls=c,heads=h,secs=s[,trans=t]]&lt;br&gt;                          [,cache=none|writethrough|writeback]&lt;br&gt;                          [,snapshot=on|off][,cache=on|off][,format=f]&lt;br&gt;                          [,werror=enospc|ignore|report|stop]&lt;br&gt;                          [,rerror=ignore|report|stop]&lt;br&gt;                          [,backup=no|yes]&lt;br&gt;    --ide&amp;lt;N&amp;gt; &amp;lt;GBYTES&amp;gt;     create new disk&lt;br&gt;    --ide&amp;lt;N&amp;gt; delete       remove drive - destroy image&lt;br&gt;    --ide&amp;lt;N&amp;gt; undef        remove drive - keep image&lt;br&gt;    --cdrom &amp;lt;file&amp;gt;        is an alias for --ide2 &amp;lt;file&amp;gt;,media=cdrom&lt;br&gt;    --scsi&amp;lt;N&amp;gt;             [volume=]volume,[,media=cdrom|disk]&lt;br&gt;                          [,cyls=c,heads=h,secs=s[,trans=t]]&lt;br&gt;                          [,snapshot=on|off][,format=f]&lt;br&gt;                          [,cache=none|writethrough|writeback]&lt;br&gt;                          [,werror=enospc|ignore|report|stop]&lt;br&gt;                          [,backup=no|yes]&lt;br&gt;    --scsi&amp;lt;N&amp;gt; &amp;lt;GBYTES&amp;gt;    create new disk&lt;br&gt;    --scsi&amp;lt;N&amp;gt; delete      remove drive - destroy image&lt;br&gt;    --scsi&amp;lt;N&amp;gt; undef       remove drive - keep image&lt;br&gt;    --virtio&amp;lt;N&amp;gt;           [volume=]volume,[,media=cdrom|disk]&lt;br&gt;                          [,cyls=c,heads=h,secs=s[,trans=t]]&lt;br&gt;                          [,snapshot=on|off][,format=f]&lt;br&gt;                          [,cache=none|writethrough|writeback]&lt;br&gt;                          [,werror=enospc|ignore|report|stop]&lt;br&gt;                          [,rerror=ignore|report|stop]&lt;br&gt;                          [,backup=no|yes]&lt;br&gt;    --virtio&amp;lt;N&amp;gt; &amp;lt;GBYTES&amp;gt;  create new disk&lt;br&gt;    --virtio&amp;lt;N&amp;gt; delete    remove drive - destroy image&lt;br&gt;    --virtio&amp;lt;N&amp;gt; undef     remove drive - keep image&lt;br&gt;    &lt;br&gt;qm monitor &amp;lt;vmid&amp;gt;         # 连接到虚拟机控制监视器&lt;br&gt;qm start &amp;lt;vmid&amp;gt;               # 启动实例&lt;br&gt;qm shutdown &amp;lt;vmid&amp;gt;      # 优雅停止实例 发送关机命令&lt;br&gt;qm wait &amp;lt;vmid&amp;gt; [time]   wait until vm is stopped&lt;br&gt;qm stop &amp;lt;vmid&amp;gt;               # 停止实例 强制停止&lt;br&gt;qm reset &amp;lt;vmid&amp;gt;              # 重启实例 相当于stop然后再start&lt;br&gt;qm suspend &amp;lt;vmid&amp;gt;        # 暂停实例&lt;br&gt;qm resume &amp;lt;vmid&amp;gt;         # 恢复实例&lt;br&gt;qm cad &amp;lt;vmid&amp;gt;               #发送按键 ctrl-alt-delete&lt;br&gt;qm destroy &amp;lt;vmid&amp;gt;        # 销毁实例（删除所有已使用/拥有的卷）&lt;br&gt;qm unlock &amp;lt;vmid&amp;gt;         # 清除迁移/备份锁&lt;br&gt;qm status &amp;lt;vmid&amp;gt;          # 显示实例状态&lt;br&gt;qm cdrom &amp;lt;vmid&amp;gt; [&amp;lt;device&amp;gt;] &amp;lt;path&amp;gt;  set cdrom path. &amp;lt;device is ide2 by default&amp;gt;&lt;br&gt;qm cdrom &amp;lt;vmid&amp;gt; [&amp;lt;device&amp;gt;] eject   eject cdrom&lt;br&gt;qm unlink &amp;lt;vmid&amp;gt; &amp;lt;volume&amp;gt;  delete unused disk images&lt;br&gt;qm vncproxy &amp;lt;vmid&amp;gt; &amp;lt;ticket&amp;gt;  open vnc proxy&lt;br&gt;qm vnc &amp;lt;vmid&amp;gt;           start (X11) vncviewer (experimental)&lt;br&gt;qm showcmd &amp;lt;vmid&amp;gt;     # 显示命令行（调试信息）&lt;br&gt;qm list                             # 列出所有虚拟机&lt;br&gt;qm startall                       # 启动所有虚拟机 当onboot=1时&lt;br&gt;qm stopall [timeout]       # 停止所有虚拟机（默认超时为3分钟）&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h2 id=&#34;集群-操作指令&#34;&gt;&lt;a href=&#34;#集群-操作指令&#34; class=&#34;headerlink&#34; title=&#34;集群 操作指令&#34;&gt;&lt;/a&gt;集群 操作指令&lt;/h2&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;查看集群资源状况&lt;/span&gt;&lt;br&gt;pvesh get /cluster/resources&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;pvesr list			# 列出存储复制作业&lt;br&gt;ha-manager status   # 查看HA状态&lt;br&gt;pvecm nodes    		# 查看集群节点&lt;br&gt;pvecm status    	# 查看集群状态&lt;br&gt;pveperf&lt;br&gt;pve-firewall compile  	# 查看防火墙规则&lt;br&gt;pve-firewall localnet  	# 输出本地网络信息&lt;br&gt;pve-firewall restart    # 重启防火墙&lt;br&gt;pve-firewall stop      	# 停止防火墙&lt;br&gt;pve-firewall start      # 启动防火墙&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;







&lt;h1 id=&#34;Note&#34;&gt;&lt;a href=&#34;#Note&#34; class=&#34;headerlink&#34; title=&#34;Note&#34;&gt;&lt;/a&gt;Note&lt;/h1&gt;&lt;h2 id=&#34;PVE-Tools-的安装&#34;&gt;&lt;a href=&#34;#PVE-Tools-的安装&#34; class=&#34;headerlink&#34; title=&#34;PVE Tools 的安装&#34;&gt;&lt;/a&gt;PVE Tools 的安装&lt;/h2&gt;&lt;p&gt;Github地址：&lt;a href=&#34;https://github.com/ivanhao/pvetools&#34;&gt;https://github.com/ivanhao/pvetools&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装软件出现-401-Unauthorized&#34;&gt;&lt;a href=&#34;#安装软件出现-401-Unauthorized&#34; class=&#34;headerlink&#34; title=&#34;安装软件出现 401  Unauthorized&#34;&gt;&lt;/a&gt;安装软件出现 401  Unauthorized&lt;/h2&gt;&lt;figure class=&#34;highlight awk&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs awk&#34;&gt;E: Failed to fetch https:&lt;span class=&#34;hljs-regexp&#34;&gt;//&lt;/span&gt;enterprise.proxmox.com&lt;span class=&#34;hljs-regexp&#34;&gt;/debian/&lt;/span&gt;pve&lt;span class=&#34;hljs-regexp&#34;&gt;/dists/&lt;/span&gt;buster/InRelease  &lt;span class=&#34;hljs-number&#34;&gt;401&lt;/span&gt;  Unauthorized [IP: &lt;span class=&#34;hljs-number&#34;&gt;212.224&lt;/span&gt;.&lt;span class=&#34;hljs-number&#34;&gt;123.70&lt;/span&gt; &lt;span class=&#34;hljs-number&#34;&gt;443&lt;/span&gt;]&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;在pve管理界面内，更新，存储库&lt;ul&gt;
&lt;li&gt;将带&lt;code&gt;enterprise&lt;/code&gt;字样的库禁用。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;apt-update-订阅库不可用的问题&#34;&gt;&lt;a href=&#34;#apt-update-订阅库不可用的问题&#34; class=&#34;headerlink&#34; title=&#34;apt update 订阅库不可用的问题&#34;&gt;&lt;/a&gt;apt update 订阅库不可用的问题&lt;/h2&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;Err:5 https://enterprise.proxmox.com/debian/ceph-quincy bookworm InRelease  401  Unauthorized [IP: 51.79.228.122 443]&lt;br&gt;Hit:6 http://security.debian.org bookworm-security InRelease&lt;br&gt;Reading package lists... Done&lt;br&gt;E: Failed to fetch https://enterprise.proxmox.com/debian/ceph-quincy/dists/bookworm/InRelease  401  Unauthorized [IP: 51.79.228.122 443]&lt;br&gt;E: The repository &amp;#x27;https://enterprise.proxmox.com/debian/ceph-quincy bookworm In Release&amp;#x27; is not signed.&lt;br&gt;N: Updating from such a repository can&amp;#x27;t be done securely, and is therefore disa bled by default.&lt;br&gt;N: See apt-secure(8) manpage for repository creation and user configuration details.&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;The &lt;strong&gt;apt&lt;/strong&gt; package manager on the fresh Proxmox host is configured to download packages from &lt;strong&gt;Enterprise Repository&lt;/strong&gt; by default. You must have a paid subscription to use this repo. If you don’t have paid subscription you should switch to &lt;strong&gt;No-Subscription Repository&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;  新 Proxmox 主机上的 &lt;strong&gt;apt&lt;/strong&gt; 包管理器默认配置为从 &lt;strong&gt;Enterprise Repository 企业存储库&lt;/strong&gt; 下载包。 您必须付费订阅才能使用此存储库。 如果您没有付费订阅，您应该切换到&lt;strong&gt;No-Subscription Repository 无订阅存储库&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Either delete &lt;code&gt;/etc/apt/sources.list.d/pve-enterprise.list&lt;/code&gt; file or comment all lines in this file with &lt;code&gt;#&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Create new file &lt;code&gt;/etc/apt/sources.list.d/pve-no-subscription.list&lt;/code&gt; with content:&lt;/p&gt;
&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;deb http://download.proxmox.com/debian/pve buster pve-no-subscription&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# PVE 8.0&lt;/span&gt;&lt;br&gt;deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 镜像源&lt;/span&gt;&lt;br&gt;deb http://mirrors.ustc.edu.cn/proxmox/debian/pve/ bookworm pve-no-subscription&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 id=&#34;apt-update-的时候-NO-PUBKEY-问题&#34;&gt;&lt;a href=&#34;#apt-update-的时候-NO-PUBKEY-问题&#34; class=&#34;headerlink&#34; title=&#34;apt update 的时候 NO_PUBKEY 问题&#34;&gt;&lt;/a&gt;apt update 的时候 NO_PUBKEY 问题&lt;/h2&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;The following signatures couldn&amp;#x27;t be verified because the public key is not available: NO_PUBKEY 7BF2812E8A6E88E0&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shel&#34;&gt;apt-get install gnupg2 -y&lt;br&gt;wget http://download.proxmox.com/debian/key.asc &lt;br&gt;apt-key add key.asc&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;





&lt;h2 id=&#34;修改PVE的管理地址&#34;&gt;&lt;a href=&#34;#修改PVE的管理地址&#34; class=&#34;headerlink&#34; title=&#34;修改PVE的管理地址&#34;&gt;&lt;/a&gt;修改PVE的管理地址&lt;/h2&gt;&lt;h3 id=&#34;无法进入web管理界面&#34;&gt;&lt;a href=&#34;#无法进入web管理界面&#34; class=&#34;headerlink&#34; title=&#34;无法进入web管理界面&#34;&gt;&lt;/a&gt;无法进入web管理界面&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;编辑 interface 文件&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;vi /etc/network/interfaces&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt; 通过键盘上下左右移动到address这行的IP地址，按一次i进入修改状态，修改为新的IP地址，如果需要网关则修改gateway这行，修改完成确认无误后按一次ESC键输入“:wq”回车保存退出。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;修改显示&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight awk&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs awk&#34;&gt;vi &lt;span class=&#34;hljs-regexp&#34;&gt;/etc/i&lt;/span&gt;ssue&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt; 通过键盘上下左右移动到https:&amp;#x2F;&amp;#x2F;这行的IP地址，按一次i进入修改状态，修改为新的IP地址，端口8006不要改，修改完成确认无误后按一次ESC键输入“:wq”回车保存退出。&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;修改 hosts 文件&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;vi /etc/hosts&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt; 通过键盘上下左右移动到第2行的IP地址，按一次i进入修改状态，修改为新的IP地址，修改完成确认无误后按一次ESC键输入“:wq”回车保存退出。&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;strong&gt;reboot&lt;/strong&gt;，重启PVE！&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;可以进入web管理界面&#34;&gt;&lt;a href=&#34;#可以进入web管理界面&#34; class=&#34;headerlink&#34; title=&#34;可以进入web管理界面&#34;&gt;&lt;/a&gt;可以进入web管理界面&lt;/h3&gt;&lt;p&gt;如果是PVE版本大于等于6.1，则可以使用web管理页面的网络选项菜单中修改vmbr0的IP，修改完成后，点击应用配置生效即可。此操作无需重启服务器即可应用新IP。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/52f35219/2983653-20221011173336293-1137047342.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;修改显示的访问的链接地址。&lt;br&gt;重启后的提示语还是显示原来的https:&amp;#x2F;&amp;#x2F;旧IP:8006。这个要是以后忘了就容易出问题。可以更改&amp;#x2F;etc&amp;#x2F;hosts文件，也可以在web管理页面主机处修改，修改完记得保存。此操作修改完需要重启才可刷新显示提示语。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/52f35219/2983653-20221011173352327-326543372.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;qemu-img-img转换为qcow2&#34;&gt;&lt;a href=&#34;#qemu-img-img转换为qcow2&#34; class=&#34;headerlink&#34; title=&#34;qemu-img img转换为qcow2&#34;&gt;&lt;/a&gt;qemu-img img转换为qcow2&lt;/h2&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;转换&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-string&#34;&gt;&amp;#x27;-f&amp;#x27;&lt;/span&gt; first image format&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;[-O output_fmt]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;-c 参数可以启用镜像文件压缩&lt;/span&gt;&lt;br&gt;qemu-img convert -f raw -O qcow2 file.img tofile.qcow2&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;导入&lt;/span&gt; &lt;br&gt;qm importdisk 101 xxxfile.qcow2 local-lvm --format qcow2&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;


&lt;h2 id=&#34;PVE-导入img磁盘文件-qm-importovf-qm-importovf&#34;&gt;&lt;a href=&#34;#PVE-导入img磁盘文件-qm-importovf-qm-importovf&#34; class=&#34;headerlink&#34; title=&#34;PVE 导入img磁盘文件 qm importovf qm importovf&#34;&gt;&lt;/a&gt;PVE 导入img磁盘文件 qm importovf qm importovf&lt;/h2&gt;&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Create a new VM using parameters &lt;span class=&#34;hljs-built_in&#34;&gt;read&lt;/span&gt; from an OVF manifest&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;An &lt;span class=&#34;hljs-built_in&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;hljs-keyword&#34;&gt;for&lt;/span&gt; qm disk import.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;          &amp;lt;虚拟机ID&amp;gt; &amp;lt;清单&amp;gt;      &amp;lt;存储&amp;gt; [选项]&lt;/span&gt;&lt;br&gt;qm importovf &amp;lt;vmid&amp;gt; &amp;lt;manifest&amp;gt; &amp;lt;storage&amp;gt; [OPTIONS]&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;示例&lt;/span&gt;&lt;br&gt;qm importdisk 102 /var/lib/vz/template/iso/openwrt.img local-lvm&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;


&lt;h2 id=&#34;PVE-将虚拟机硬盘文件导出&#34;&gt;&lt;a href=&#34;#PVE-将虚拟机硬盘文件导出&#34; class=&#34;headerlink&#34; title=&#34;PVE 将虚拟机硬盘文件导出&#34;&gt;&lt;/a&gt;PVE 将虚拟机硬盘文件导出&lt;/h2&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 语法：qemu-img convert -f &amp;lt;源格式&amp;gt; -O vmdk -o subformat=streamOptimized &amp;lt;源路径&amp;gt; &amp;lt;目标路径&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 示例 1：转换 LVM 硬盘&lt;/span&gt;&lt;br&gt;qemu-img convert -f raw -O vmdk -o subformat=streamOptimized /dev/pve/vm-100-disk-0 /mnt/nfs/vm-100-disk-0.vmdk&lt;br&gt;&lt;br&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# 示例 2：转换 QCOW2 硬盘&lt;/span&gt;&lt;br&gt;qemu-img convert -f qcow2 -O vmdk -o subformat=streamOptimized /var/lib/vz/images/100/vm-100-disk-0.qcow2 /mnt/nfs/vm-100-disk-0.vmdk&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-f &amp;lt;源格式&amp;gt;&lt;/code&gt;：源硬盘格式（&lt;code&gt;raw&lt;/code&gt;、&lt;code&gt;qcow2&lt;/code&gt; 等）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-O vmdk&lt;/code&gt;：输出为 VMDK 格式。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o subformat=streamOptimized&lt;/code&gt;：生成 ESXi 兼容的精简格式（Thin Provisioned）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pvetools工具安装省电后无法睿频&#34;&gt;&lt;a href=&#34;#pvetools工具安装省电后无法睿频&#34; class=&#34;headerlink&#34; title=&#34;pvetools工具安装省电后无法睿频&#34;&gt;&lt;/a&gt;pvetools工具安装省电后无法睿频&lt;/h2&gt;&lt;h2 id=&#34;自动调整运行频率&#34;&gt;&lt;a href=&#34;#自动调整运行频率&#34; class=&#34;headerlink&#34; title=&#34;自动调整运行频率&#34;&gt;&lt;/a&gt;自动调整运行频率&lt;/h2&gt;&lt;p&gt;网上有很多教程会修改&lt;code&gt;vi /etc/default/grub&lt;/code&gt;文件，将&lt;code&gt;driver&lt;/code&gt;改成&lt;code&gt;acpi-cpufreq&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我的CPU是J4125，在&lt;code&gt;intel_cpufreq&lt;/code&gt;下也可以使用&lt;code&gt;conservative ondemand userspace powersave performance schedutil&lt;/code&gt;这些模式。所有就没有去修改。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.51cto.com/picker/5020502&#34;&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;安装&lt;/span&gt;&lt;br&gt;apt-get install cpufrequtils&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;查看cpu当前信息&lt;/span&gt;&lt;br&gt;cpufreq-info&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;查看可以使用的模式&lt;/span&gt;&lt;br&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;例如J4125这里会输出  conservative ondemand userspace powersave performance schedutil&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;查看当前运行的模式&lt;/span&gt;&lt;br&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;cpu运行自动配置文件&lt;code&gt;/etc/init.d/cpufrequtils&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个文件在开机的时候会自动调用，自动运行&lt;ul&gt;
&lt;li&gt;这个文件主要的内容就是运行&lt;code&gt;cpufreq-set&lt;/code&gt;指令调整运行模式和频率&lt;/li&gt;
&lt;li&gt;这个文件会优先读取和使用&lt;code&gt;/etc/default/cpufrequtils&lt;/code&gt;文件的内容&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;编辑这个文件&lt;code&gt;vi /etc/init.d/cpufrequtils&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;修改频率 模式 保存&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;重启&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;87&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;88&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;89&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;90&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;91&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;92&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;93&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;94&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;95&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;96&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;97&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;98&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;99&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;100&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;!/bin/sh&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;## BEGIN INIT INFO&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Provides:       cpufrequtils&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Required-Start: &lt;span class=&#34;hljs-variable&#34;&gt;$remote_fs&lt;/span&gt; loadcpufreq&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Required-Stop:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Default-Start:  2 3 4 5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Default-Stop:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Short-Description: &lt;span class=&#34;hljs-built_in&#34;&gt;set&lt;/span&gt; CPUFreq kernel parameters&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Description: utilities to deal with CPUFreq Linux&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;      kernel support&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;## END INIT INFO&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;/span&gt;&lt;br&gt;DESC=&amp;quot;CPUFreq Utilities&amp;quot;&lt;br&gt;&lt;br&gt;PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br&gt;CPUFREQ_SET=/usr/bin/cpufreq-set&lt;br&gt;CPUFREQ_INFO=/usr/bin/cpufreq-info&lt;br&gt;CPUFREQ_OPTIONS=&amp;quot;&amp;quot;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;use lsb-base&lt;/span&gt;&lt;br&gt;. /lib/lsb/init-functions&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;Which governor to use. Must be one of the governors listed &lt;span class=&#34;hljs-keyword&#34;&gt;in&lt;/span&gt;:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;  &lt;span class=&#34;hljs-built_in&#34;&gt;cat&lt;/span&gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# and which limits to set. Both MIN_SPEED and MAX_SPEED must be values&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;listed &lt;span class=&#34;hljs-keyword&#34;&gt;in&lt;/span&gt;:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;  &lt;span class=&#34;hljs-built_in&#34;&gt;cat&lt;/span&gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;a value of 0 &lt;span class=&#34;hljs-keyword&#34;&gt;for&lt;/span&gt; any of the two variables will disabling the use of&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;that &lt;span class=&#34;hljs-built_in&#34;&gt;limit&lt;/span&gt; variable.&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# WARNING: the correct kernel module must already be loaded or compiled in.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# Set ENABLE to &amp;quot;true&amp;quot; to let the script run at boot time.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-comment&#34;&gt;# eg:   ENABLE=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;      GOVERNOR=&lt;span class=&#34;hljs-string&#34;&gt;&amp;quot;ondemand&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;      MAX_SPEED=1000&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;      MIN_SPEED=500&lt;/span&gt;&lt;br&gt;&lt;br&gt;ENABLE=&amp;quot;true&amp;quot;&lt;br&gt;GOVERNOR=&amp;quot;ondemand&amp;quot;&lt;br&gt;MAX_SPEED=&amp;quot;0&amp;quot;&lt;br&gt;MIN_SPEED=&amp;quot;0&amp;quot;&lt;br&gt;&lt;br&gt;check_governor_avail() &amp;#123;&lt;br&gt;        info=&amp;quot;/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors&amp;quot;&lt;br&gt;        if [ -f $info ] &amp;amp;&amp;amp; grep -q &amp;quot;\&amp;lt;$GOVERNOR\&amp;gt;&amp;quot; $info ; then&lt;br&gt;                return 0;&lt;br&gt;        fi&lt;br&gt;        return 1;&lt;br&gt;&amp;#125;&lt;br&gt;&lt;br&gt;[ -x $CPUFREQ_SET ] || exit 0&lt;br&gt;&lt;br&gt;if [ -f /etc/default/cpufrequtils ] ; then&lt;br&gt;        . /etc/default/cpufrequtils&lt;br&gt;fi&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;&lt;span class=&#34;hljs-keyword&#34;&gt;if&lt;/span&gt; not enabled &lt;span class=&#34;hljs-keyword&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;hljs-built_in&#34;&gt;exit&lt;/span&gt; gracefully&lt;/span&gt;&lt;br&gt;[ &amp;quot;$ENABLE&amp;quot; = &amp;quot;true&amp;quot; ] || exit 0&lt;br&gt;&lt;br&gt;if [ -n &amp;quot;$MAX_SPEED&amp;quot; ] &amp;amp;&amp;amp; [ $MAX_SPEED != &amp;quot;0&amp;quot; ] ; then&lt;br&gt;        CPUFREQ_OPTIONS=&amp;quot;$CPUFREQ_OPTIONS --max $MAX_SPEED&amp;quot;&lt;br&gt;fi&lt;br&gt;&lt;br&gt;if [ -n &amp;quot;$MIN_SPEED&amp;quot; ] &amp;amp;&amp;amp; [ $MIN_SPEED != &amp;quot;0&amp;quot; ] ; then&lt;br&gt;        CPUFREQ_OPTIONS=&amp;quot;$CPUFREQ_OPTIONS --min $MIN_SPEED&amp;quot;&lt;br&gt;fi&lt;br&gt;&lt;br&gt;if [ -n &amp;quot;$GOVERNOR&amp;quot; ] ; then&lt;br&gt;        CPUFREQ_OPTIONS=&amp;quot;$CPUFREQ_OPTIONS --governor $GOVERNOR&amp;quot;&lt;br&gt;fi&lt;br&gt;&lt;br&gt;CPUS=$(cat /proc/stat|sed -ne &amp;#x27;s/^cpu\([[:digit:]]\+\).*/\1/p&amp;#x27;)&lt;br&gt;RETVAL=0&lt;br&gt;case &amp;quot;$1&amp;quot; in&lt;br&gt;        start|force-reload|restart|reload)&lt;br&gt;                log_action_begin_msg &amp;quot;$DESC: Setting $GOVERNOR CPUFreq governor&amp;quot;&lt;br&gt;                if check_governor_avail ; then&lt;br&gt;                        for cpu in $CPUS ; do&lt;br&gt;                                log_action_cont_msg &amp;quot;CPU$&amp;#123;cpu&amp;#125;&amp;quot;&lt;br&gt;                                $CPUFREQ_SET --cpu $cpu $CPUFREQ_OPTIONS 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null || \&lt;br&gt;                                        RETVAL=$?&lt;br&gt;                        done&lt;br&gt;                        log_action_end_msg $RETVAL &amp;quot;&amp;quot;&lt;br&gt;                else&lt;br&gt;                        log_action_cont_msg &amp;quot;disabled, governor not available&amp;quot;&lt;br&gt;                        log_action_end_msg $RETVAL&lt;br&gt;                fi&lt;br&gt;                ;;&lt;br&gt;        stop)&lt;br&gt;                ;;&lt;br&gt;        *)&lt;br&gt;                echo &amp;quot;Usage: $0 &amp;#123;start|stop|restart|reload|force-reload&amp;#125;&amp;quot;&lt;br&gt;                exit 1&lt;br&gt;esac&lt;br&gt;&lt;br&gt;exit 0&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 id=&#34;pve-合并local-lvm和local分区&#34;&gt;&lt;a href=&#34;#pve-合并local-lvm和local分区&#34; class=&#34;headerlink&#34; title=&#34;pve 合并local-lvm和local分区&#34;&gt;&lt;/a&gt;pve 合并local-lvm和local分区&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_52960369/article/details/135450871&#34;&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;备份虚拟机磁盘文件&lt;ol&gt;
&lt;li&gt;web备份&lt;ol&gt;
&lt;li&gt;数据中心-存储-local-编辑-内容-添加“容器”和“磁盘镜像”属性&lt;/li&gt;
&lt;li&gt;虚拟机-选定某一个虚拟机-硬件-硬盘-磁盘操作-移动存储-local&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;命令迁移 &lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;示例：迁移 VM ID 为 100 的 scsi0 磁盘到 &lt;span class=&#34;hljs-built_in&#34;&gt;local&lt;/span&gt;&lt;/span&gt;&lt;br&gt;qm move_disk 100 scsi0 local --format qcow2&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;迁移 ISO 文件&lt;/span&gt;&lt;br&gt;mv /var/lib/vz/template/iso/* /var/lib/vz/iso/&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;迁移备份文件&lt;/span&gt;&lt;br&gt;mv /var/lib/vz/dump/* /var/lib/vz/backups/&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;lsblk 查看一下分区结构&lt;/span&gt; &lt;br&gt;lsblk&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;备份一下 虚拟机的磁盘文件。。。 这一步我没做。。。。。 悲剧了&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;删除 local-lvm 千万注意备份一下 pve/data/ 目录下的 disk 虚拟磁盘文件 PVE8.2.2我照着这么操作直接把磁盘文件给删掉了，我人都傻了。。。。。&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;后面几个就是在删除磁盘文件&lt;/span&gt;&lt;br&gt;lvremove pve/data&lt;br&gt;Removing pool pve/data will remove 3 dependent volume(s). Proceed? [y/n]: y&lt;br&gt;Do you really want to remove active logical volume pve/vm-220-disk-0? [y/n]: y&lt;br&gt;  Logical volume &amp;quot;vm-220-disk-0&amp;quot; successfully removed.&lt;br&gt;Do you really want to remove active logical volume pve/vm-300-disk-0? [y/n]: y&lt;br&gt;  Logical volume &amp;quot;vm-300-disk-0&amp;quot; successfully removed.&lt;br&gt;Do you really want to remove active logical volume pve/vm-220-disk-1? [y/n]: y&lt;br&gt;  Logical volume &amp;quot;vm-220-disk-1&amp;quot; successfully removed.&lt;br&gt;Do you really want to remove active logical volume pve/data? [y/n]: y&lt;br&gt;  Logical volume &amp;quot;data&amp;quot; successfully removed.&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;扩展&lt;span class=&#34;hljs-built_in&#34;&gt;local&lt;/span&gt;&lt;/span&gt;&lt;br&gt;lvextend -l +100%FREE -r pve/root&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;查看状态&lt;/span&gt;&lt;br&gt;lsblk&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;在管理页面删除local-LVM（数据中心-存储）&lt;br&gt;&lt;img src=&#34;/2023/52f35219/image-20240808094958418.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;修改 local 的属性将local-lvm的功能加上去。（也可勾选所有可选项）&lt;/p&gt;
&lt;h2 id=&#34;安装群晖&#34;&gt;&lt;a href=&#34;#安装群晖&#34; class=&#34;headerlink&#34; title=&#34;安装群晖&#34;&gt;&lt;/a&gt;安装群晖&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://post.smzdm.com/p/a2036n3n/&#34;&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建虚拟机&lt;ul&gt;
&lt;li&gt;操作系统&lt;ul&gt;
&lt;li&gt;不需要使用介质&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;系统&lt;ul&gt;
&lt;li&gt;机型，这里大部分教程推荐使用 &lt;code&gt;q35&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;q35&lt;/code&gt;比默认的&lt;code&gt;i440fx&lt;/code&gt;机型更新，性能更好&lt;/li&gt;
&lt;li&gt;也有人说&lt;code&gt;i440fx&lt;/code&gt;兼容性更好，有些小bug在&lt;code&gt;i440fx&lt;/code&gt;上不会出现。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;其他默认即可&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;磁盘&lt;ul&gt;
&lt;li&gt;这里需要注意群晖只支持&lt;code&gt;sata&lt;/code&gt;，无法支持性能更强的&lt;code&gt;scsi&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;后面将引导转换为磁盘的时候也需要注意接口要是&lt;code&gt;sata&lt;/code&gt;的。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CPU&lt;ul&gt;
&lt;li&gt;类型&lt;ul&gt;
&lt;li&gt;host 代表使用和主机一样的CPU信息和架构（通用性差，性能更优）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;内存&lt;/li&gt;
&lt;li&gt;网络&lt;ul&gt;
&lt;li&gt;网络这里有些引导不支持&lt;code&gt;VirtlO&lt;/code&gt;，就要要改为&lt;code&gt;E1000&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;添加引导&lt;ul&gt;
&lt;li&gt;将引导&lt;code&gt;*.img&lt;/code&gt;文件上传到PVE内&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;qm importdisk&lt;/code&gt; 指令导入img文件用作磁盘&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#PVE%20%E5%AF%BC%E5%85%A5img%E7%A3%81%E7%9B%98%E6%96%87%E4%BB%B6%20qm%20importovf%20qm%20importovf&#34;&gt;PVE 导入img磁盘文件 qm importovf qm importovf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;将虚拟机内&lt;code&gt;未使用&lt;/code&gt;的磁盘改为&lt;code&gt;sata&lt;/code&gt;接口，并添加到虚拟机内&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;硬盘直通&lt;ul&gt;
&lt;li&gt;。。。。。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;args: -device &amp;#x27;qemu-xhci,addr=0x18&amp;#x27; -drive &amp;#x27;id=synoboot,file=/root/synoboot.img,if=none,format=raw&amp;#x27; -device &amp;#x27;usb-storage,id=synoboot,drive=synoboot,bootindex=1&amp;#x27;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;关闭虚拟机，编辑虚拟机配置文件 &amp;#x2F;etc&amp;#x2F;pve&amp;#x2F;qemu-server&amp;#x2F;100.conf ，100是对应虚拟机ID，在顶部添加大佬的这一段代码，img路径改成对应的路径。改完后WebUI没有显示的，禁用掉其他启动项，直接启动虚拟机即可&lt;/p&gt;
&lt;h2 id=&#34;硬盘直通&#34;&gt;&lt;a href=&#34;#硬盘直通&#34; class=&#34;headerlink&#34; title=&#34;硬盘直通&#34;&gt;&lt;/a&gt;硬盘直通&lt;/h2&gt;&lt;p&gt;参考资料：&lt;br&gt;&lt;a href=&#34;https://foxi.buduanwang.vip/virtualization/1754.html/&#34;&gt;Proxmox VE pve硬盘直通&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PVE的直通分为两种&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直通控制器（sata控制器、nvme控制器）&lt;ul&gt;
&lt;li&gt;接近裸机性能，损耗非常低&lt;/li&gt;
&lt;li&gt;是一个物理磁盘，虚拟机可以获取真实硬盘信息，具有smart属性。&lt;/li&gt;
&lt;li&gt;磁盘由虚拟机管理，虚拟机可以获取磁盘控制权&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;要求PVE系统不能安装在控制器下属磁盘内&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;直通单个硬盘或者分区&lt;ul&gt;
&lt;li&gt;CPU性能越好，越接近裸机性能，损耗较低&lt;/li&gt;
&lt;li&gt;硬盘会在虚拟机内会认为是一个qemu-hdd&lt;/li&gt;
&lt;li&gt;磁盘由PVE管理&lt;/li&gt;
&lt;li&gt;限制&lt;ul&gt;
&lt;li&gt;sata最大6个&lt;/li&gt;
&lt;li&gt;ide最大3个&lt;/li&gt;
&lt;li&gt;scsi最大128个&lt;/li&gt;
&lt;li&gt;virtio-blk最大32个&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;列出当前的所有磁盘&lt;/strong&gt;&lt;br&gt;我们可以通过下面命令，列出当前的硬盘列表&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;nvme开头的是nvme硬盘，ata开头是走sata或者ata通道的设备。scsi是scsi设备-阵列卡raid或者是直通卡上的硬盘。&lt;/p&gt;
&lt;h3 id=&#34;直通单个硬盘-分区&#34;&gt;&lt;a href=&#34;#直通单个硬盘-分区&#34; class=&#34;headerlink&#34; title=&#34;直通单个硬盘&amp;amp;分区&#34;&gt;&lt;/a&gt;直通单个硬盘&amp;amp;分区&lt;/h3&gt;&lt;p&gt;我们可以通过&lt;code&gt;qm set &amp;lt;vmid&amp;gt; --scsi[n] /dev/disk/by-id/xxxxxxx&lt;/code&gt; 进行直通。&lt;code&gt;qm set &amp;lt;vmid&amp;gt; --delete scsi[n]&lt;/code&gt;来取消直通。&lt;br&gt;vmid指的是虚拟机ID；–scsi[n]指的是接口（同样的还有scsi、sata、ide、virtio），n指的是端口号；&amp;#x2F;dev….指的是需要直通的硬盘&amp;amp;分区路径&lt;/p&gt;
&lt;p&gt;实例：&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;qm set 220 --sata1 /dev/disk/by-id/ata-Netac_SSD_512GB_AA20230802512G645320&lt;br&gt;&lt;br&gt;qm set 101 --scsi1 /dev/disk/by-id/nvme-INTEL_SSDPE2KX020T8_BTLJ039307142P0BGN&lt;br&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;建议为scsi设备，这样性能理论上是最优秀的。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;qm help set&lt;/code&gt; 可以获取帮助信息。&lt;/p&gt;
&lt;h3 id=&#34;直通控制器&#34;&gt;&lt;a href=&#34;#直通控制器&#34; class=&#34;headerlink&#34; title=&#34;直通控制器&#34;&gt;&lt;/a&gt;直通控制器&lt;/h3&gt;&lt;p&gt;磁盘控制器直通之后，虚拟机可以获得全部的磁盘属性。&lt;/p&gt;
&lt;p&gt;需要注意的是，你需要多个磁盘控制器，且Proxmox VE系统安装在非需要直通的硬盘控制器上，否则会将系统直通给虚拟机，导致系统崩溃。&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;查看PCI控制器&lt;/span&gt;&lt;br&gt;lspci&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;查看硬盘分布情况&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;有pve-root的，便是pve所在的硬盘&lt;/span&gt;&lt;br&gt;lsblk&lt;br&gt;&lt;br&gt;ls -la /sys/dev/block/|grep -v loop |grep -v dm&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;需要按照这个教程开启硬件直通功能&lt;br&gt;&lt;a href=&#34;https://foxi.buduanwang.vip/virtualization/pve/561.html/&#34;&gt;https://foxi.buduanwang.vip/virtualization/pve/561.html/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;开启后在控制面板直接添加PCI设备即可。&lt;br&gt;&lt;img src=&#34;/2023/52f35219/image-20240729150809676.png&#34;&gt;&lt;br&gt;&lt;img src=&#34;/2023/52f35219/image-20240729150802776.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;Guest-Agent-的安装&#34;&gt;&lt;a href=&#34;#Guest-Agent-的安装&#34; class=&#34;headerlink&#34; title=&#34;Guest Agent 的安装&#34;&gt;&lt;/a&gt;Guest Agent 的安装&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;GuestAgent是什么&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;Guest Agent 的主要作用&lt;/strong&gt;：增强管理功能（从 PVE 管理界面进行关机、重启、暂停；宿主可实时获取虚拟机的系统信息；部分场景下支持热增删 CPU、内存）；提升兼容性与性能；数据安全与备份；&lt;br&gt;&lt;strong&gt;注意&lt;/strong&gt;：Guest Agent 作为运行在虚拟机内的进程，若存在漏洞（如历史版本的 &lt;code&gt;qemu-guest-agent&lt;/code&gt; 曾被曝出远程代码执行漏洞），可能被攻击者利用，进而渗透至宿主或其他虚拟机。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;是否需要安装？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;推荐安装&lt;/strong&gt;：生产环境中的虚拟机、需要频繁管理或备份的场景，建议安装以获取完整功能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可选场景&lt;/strong&gt;：仅运行简单任务的轻量级虚拟机（如测试环境），可根据需求决定是否安装。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;虚拟机内系统安装Guest Agent&lt;/strong&gt;&lt;br&gt;Linux&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;apt install qemu-guest-agent -y&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Windows&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;virtio驱动光盘中找到 qemu-ga-x86_64.msi 文件进行安装&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;PVE启用Guest Agent&lt;/strong&gt;&lt;br&gt;点击虚拟机，左侧边栏里的“选项”，找到“QEMU Guest Agent”双击，在弹出的窗口中勾选“使用QEMU Guest Agent”，下方Type保持默认的VirtlO，点击OK保存即可。&lt;br&gt;&lt;img src=&#34;/2023/52f35219/file-20250523103958923.png&#34;&gt;&lt;br&gt;&lt;strong&gt;用法&lt;/strong&gt;&lt;br&gt;在PVE的shell里输入命令，即可通过QEMU Guest Agent控制客户机&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;vmid就是虚拟机的ID&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;hljs-meta prompt_&#34;&gt;# &lt;/span&gt;&lt;span class=&#34;language-bash&#34;&gt;cmd就是你要执行的的命令&lt;/span&gt;&lt;br&gt; qm agent &amp;lt;vmid&amp;gt; &amp;lt;cmd&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;常用命令：&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;code class=&#34;hljs shell&#34;&gt;fsfreeze-freeze &lt;br&gt;fsfreeze-status&lt;br&gt;fsfreeze-thaw&lt;br&gt;fstrim                      #查看ssd-trim&lt;br&gt;get-fsinfo                  #查看磁盘信息&lt;br&gt;get-host-name               #查看主机名&lt;br&gt;get-memory-block-info       #查看内存块信息&lt;br&gt;get-memory-blocks           #查看内存&lt;br&gt;get-osinfo                  #查看系统信息&lt;br&gt;get-time                    #查看时间&lt;br&gt;get-timezone                #查看时区&lt;br&gt;get-users                   #用户&lt;br&gt;get-vcpus                   #查看CPU数量&lt;br&gt;info                        #查看支持的命令&lt;br&gt;network-get-interfaces      #查看网络   &lt;br&gt;shutdown                    #关机&lt;br&gt;suspend-disk                #休眠&lt;br&gt;suspend-hybrid              &lt;br&gt;suspend-ram                 &lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

 ]]></description>
        </item>
    </channel>
</rss>
