【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解
EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解
一、什么是 EBNF?
Extended Backus-Naur Form (EBNF)是一种形式化的语法,用于指定编程语言或其他形式化语言的结构。它是Backus-Naur形式(BNF)的扩展,最初由John Backus和Peter Naur开发,用于描述Algol编程语言的语法。它主要用于:
- 编程语言的语法描述(如 Pascal、Ada、Java);
- 编译器和解释器的语法规则输入;
- 自然语言/命令式语言语法建模;
- 自定义 DSL(领域特定语言)的构建;
- 配置语法定义与语义分析工具生成器(如 ANTLR、Bison、PEG.js)中的语法规则定义。
相比传统的 BNF,EBNF 引入了更直观、结构化的写法,并支持更丰富的表达形式(如可选、重复、分组等),更便于人类编写与理解。
二、EBNF 文件基本结构
EBNF 文件一般由一组**规则定义(Rule Definitions)**组成,每条规则描述一种语法结构。
基本语法格式如下:
规则名 = 表达式 ;
规则名
是非终结符(由字母或下划线开头)=
表示定义表达式
描述语法结构;
表示定义结束
例如:
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
三、EBNF 核心语法符号说明
符号 | 含义 | 示例 | ||
---|---|---|---|---|
= | 定义规则 | A = B ; | ||
" | 字符串字面量 | "hello" | ||
` | ` | 多选一(或) | `A = “yes” | “no” ;` |
() | 分组 | `A = (“yes” | “no”) “!” ;` | |
[] | 可选(0 或 1 次) | A = ["hello"] "world" ; | ||
{} | 可重复(0 次以上) | A = {"ha"} ; | ||
' ' | 字符字面量(与 " 等价) | 'a' | ||
(* ... *) | 注释 | (* 这是一条注释 *) |
这些符号共同构建了 EBNF 的表达力,使其足以描述复杂的语法结构。
四、EBNF 与 BNF 的区别对比
特性 | BNF | EBNF |
---|---|---|
可选元素 | 不支持 | 使用 [] |
重复结构 | 不支持 | 使用 {} |
分组 | 支持(使用 () ) | 支持 |
注释 | 通常不支持 | 支持 (* ... *) |
可读性 | 稍差 | 更强,可读性好 |
表达力 | 需要辅助符号 | 原生支持多种语法结构 |
因此,在现代语法定义中,EBNF 更被广泛采用,尤其适合人工编写和工具解析。
五、典型应用场景
-
编程语言语法定义
如 W3C 使用 EBNF 描述 XML、HTML 结构;Java 语言规范也采用类似格式定义语法结构。 -
语法分析工具
如 ANTLR、PEG.js 等语法分析生成器,支持 EBNF 风格的语法定义。 -
命令解析与语音建模
在语音识别、指令解析等场景中,EBNF 可用于约束可识别的指令格式。 -
DSL 构建
定义领域专用语言的语法结构,如构建自定义配置文件、规则引擎、机器人指令等。
六、EBNF 实用语法示例
1. 定义整数
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
integer = [ "-" ] digit { digit } ;
支持:123、-456、0
2. 表达式语法定义(加减乘除)
expression = term { ("+" | "-") term } ;
term = factor { ("*" | "/") factor } ;
factor = number | "(" expression ")" ;
number = digit { digit } ;
支持:(1+2)3、5-4/2、(8+9)(7-3)
3. 时间语句定义
hour = "00" | "01" | "02" | ... | "23" ;
minute = "00" | "01" | ... | "59" ;
time = hour ":" minute ;
支持:14:30、00:00、23:59
4. 自然语言命令示例
greeting = "hello" | "hi" | "hey" ;
command = greeting [ "," ] "computer" [ "!" ] ;
支持语句:“hello computer”、“hi, computer!”、“hey computer!”
七、语义映射与工具支持(可选扩展)
虽然 EBNF 本身只定义结构,但在实际工程中,它经常与语义标签、语义动作结合使用,如:
expression = term { ("+" | "-") term } ; (* 加减运算 *)
通过配套的语义分析工具,如 ANTLR、YACC、PEG 语法等,可实现从 EBNF 到 AST(抽象语法树)结构的转换。
常用工具包括:
工具 | 特点 |
---|---|
ANTLR | 支持 Java、C#、Python 等,EBNF 风格,生成解析器 |
YACC/Bison | 用于 C/C++,常配合 Lex |
PEG.js | JS 中基于 PEG 的语法定义 |
EBNF Visualizer | 可视化展示语法树结构,在线工具丰富 |
八、示例
计算器
(* 定义数字 *)
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
number = digit { digit } ;(* 加减乘除表达式 *)
expression = term { ("+" | "-") term } ;
term = factor { ("*" | "/") factor } ;
factor = number | "(" expression ")" ;
支持输入:
3+5
(2+4)*6
10/(5-3)
解析器可据此生成语法树,并进行后续求值、代码生成等处理。
思必驰的XBNF
XBNF文件编写说明:https://www.duiopen.com/docs/ct_XBNF
xbnf文件采用 ebnf 语法作为基础语法,开发者通过编辑该文件用以限定识别范围同时规定输出的语义项格式。
示例如下:
#打开本地APP的指令
$APP_NAME=(我的程序|测试程序|当前程序|当前应用);
$OPEN=(打开|开启|关闭|退出) $APP_NAME;#打电话发短信指令
$CONTACTS=(小老弟 | 大表哥);
$CALL_A=[帮我] (打电话|发短信) 给 $CONTACTS;
$CALL_B=[帮我] 给 $CONTACTS (打电话|发短信);#计时指令
$TIME=[帮我|我要] (开始 | 停止) 计时;#调节指令
$ADJUST_SETTING = (亮度 | 音量);
$ADJUST_A= [帮我|我要] (调低 | 调高) $ADJUST_SETTING;$ADJUST_B= $ADJUST_SETTING [调] (高 | 低) [一点];
$ADJUST_C= (大 | 小)声说话;#查看指令
$SEARCH_ITEM=(天气 | 时间);
$SEARCH=[帮我] 查看 $SEARCH_ITEM;#退出(中止语音)
$EXIT_AI = (滚[开] | 退下 | 拜拜 | 再见);#返回桌面
$RETURN_HOME = [回到 | 返回] (桌面 | 主菜单);$CMD_EXCUTE= ($OPEN | $CALL_A | $CALL_B | $TIME | $ADJUST_A | $ADJUST_B | $ADJUST_C | $SEARCH | $EXIT_AI | $RETURN_HOME);
( \<s\> ( $CMD_EXCUTE ) \<\/s\> )
九、书写规范与建议
- 规则命名统一风格,建议小写加下划线或驼峰;
- 保持模块化,将重复结构定义为独立规则;
- 注释清晰,便于协作与维护;
- 分组优先级明确,用括号明确逻辑;
十、总结
EBNF 作为一种严谨且直观的语法描述语言,其清晰的结构、强大的表达能力、广泛的工具支持,使其在各类语言构建、解析器开发、语义规则建模中广泛应用。
本文带你:
- 了解了 EBNF 的定义与与 BNF 的区别;
- 掌握了核心语法结构与写法;
- 了解了多种实际应用场景;
- 学习了多个实用示例与完整文件案例;
- 掌握了调试与工具支持技巧。
无论你是构建 DSL、写解析器,还是参与语音交互、编译器设计,EBNF 都是你必须掌握的基础工具之一。
相关文章:
【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解
EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解 一、什么是 EBNF? Extended Backus-Naur Form (EBNF)是一种形式化的语法,用于指定编程语言或其他形式化语言的结构。它是Backus-Naur形式(BNF)的扩展,最初…...
Go语言运算符详解
文章目录 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级注意事项 Go语言提供了与其他语言类似的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。这些运算符即可满足基本的运算需求。 1. 算…...
MySQL用户管理
目录 一、用户用户信息创建用户删除用户从远端登录修改用户密码 二、数据库的权限给用户授权回收权限 与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。,如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表&#…...
视频编解码学习三之显示器续
一、现在主流的显示器是LCD显示器吗? 是的,现在主流的显示器仍然是 LCD(液晶显示器,Liquid Crystal Display),但它已经细分为多种技术类型,并和其他显示技术(如OLED)形成…...
VSCode1.101.0便携版|中英文|编辑器|安装教程
软件介绍 Visual Studio Code是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,设计得很人性化,旨在为所有开发者提供一款专注于代码本身的免费的编辑器。 软件安装 1、 下载安装包…...
Scala 中累加器的创建与使用格式详解
1. 内置累加器的创建与使用格式 1.1 创建内置累加器 // 通过 SparkContext 创建 val acc sc.longAccumulator("累加器名称") // Long 类型(默认初始值 0) val accDouble sc.doubleAccumulator("累加器名称") // Double 类型&a…...
【DNDC模型】双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用
由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到,要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时,提到要把减污降碳协同增效作为促…...
深入剖析缓存与数据库一致性:Java技术视角下的解决方案与实践
一、缓存与数据库一致性问题根源 读写分离的架构矛盾 缓存作为数据库的“副本”,天然存在数据同步延迟。 高频读写场景下,缓存与数据库的更新顺序、失败重试等操作易引发不一致。 经典问题场景 场景1:先更新数据库,再删除缓存。…...
Anaconda环境中conda与pip命令的区别
文章目录 conda与pip的基本区别在Anaconda环境中的实际差异安装包环境管理依赖解决示例最佳实践建议 常见问题解答 conda与pip的基本区别 包来源与生态系统 conda:从Anaconda默认仓库或conda-forge等渠道获取包 不仅管理Python包,还能管理非Python依赖&…...
使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
一、FastAPI概述 1.1 什么是FastAPI FastAPI is a modern, high-performance Python web framework designed for building APIs. It’s rapidly gaining popularity due to its ease of use, speed, and powerful features. Built on top of Starlette, FastAPI leverages a…...
每日c/c++题 备战蓝桥杯(P1002 [NOIP 2002 普及组] 过河卒)
洛谷P1002 [NOIP 2002 普及组] 过河卒 题解 题目描述 过河卒是一道经典的动态规划题目。题目大意是:一个卒子从棋盘左上角(0,0)出发,要走到右下角(n,m),棋盘上有一个马在(x,y)位置,卒子不能经过马所在位置及其周围8个位置。求卒…...
kubectl系列(十二):查询pod的resource 配置
在 Kubernetes 中,可以通过 kubectl 命令快速查询 Pod 的资源请求(requests)和限制(limits)配置。以下是多种方法实现这一目标: 1. 查看 Pod 的资源请求和限制(基础版) 使用 kubec…...
前端面试2
1. 面试准备 1. 建立自己的知识体系 思维导图ProcessOn框架Vue elementUI自查 https://zh.javascript.info/ 借鉴 https://juejin.cn/post/6844904103504527374http://conardli.top/blog/article/https://github.com/mqyqingfeng/Bloghttp://47.98.159.95/my_blog/#html 2.技能…...
使用 Java 反射动态加载和操作类
Java 的反射机制(Reflection)是 Java 语言的一大特色,它允许程序在运行时检查、加载和操作类、方法、字段等元信息。通过 java.lang.Class 和 java.lang.reflect 包,开发者可以动态加载类、创建实例、调用方法,甚至在运行时构造新类。反射是 Java 灵活性的核心,广泛应用于…...
基于Dockers的Bitwarden的私有本地部署
基于Dockers的Bitwarden的私有本地部署 文章目录 基于Dockers的Bitwarden的私有本地部署 本文首发地址 https://h89.cn/archives/355.html bitwarden 默认连接的是国外服务器 https://bitwarden.com/ ,连接不是很稳定,也没有安全感,所以我选择…...
spark-Schema 定义字段强类型和弱类型
在数据处理和存储中,Schema(模式)定义了数据的结构和字段属性,其中字段的强类型和弱类型是重要的概念,直接影响数据的验证、存储和处理方式。以下是详细解释: 1. 强类型(Strongly Typed&#x…...
【第35节 数据库设计】
本章目录: 一、节概述二、知识详解1. 数据库设计的基本步骤2. 用户需求分析3. 概念结构设计(E-R建模)4. 逻辑结构设计5. 物理结构设计6. 数据库实施7. 数据库运行维护8. 商业智能(BI)与数据仓库数据仓库的特点: 9. OLT…...
C++基本知识 —— 缺省参数·函数重载·引用
C基本知识 —— 缺省参数函数重载引用 1. 缺省参数2. 函数重载3. 引用3.1 引用的基础知识3.2 引用的作用3.3 const 引用3.4 指针与引用的关系 1. 缺省参数 什么是缺省参数?缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数的时候,如…...
大数据基础——Ubuntu 安装
文章目录 Ubuntu 安装一、配置电脑二、安装系统 Ubuntu 安装 一、配置电脑 1、进入VMware 2、选择配置类型 3、选择硬件兼容性版本 4、当前虚拟机的操作系统 选择“稍后安装操作系统”(修改) 5、选择虚拟机将来需要安装的系统 选中“Linux”和选择…...
英伟达微调qwen2.5-32B模型,开源推理模型:OpenCodeReasoning-Nemotron-32B
一、模型概述 OpenCodeReasoning-Nemotron-32B 是一个大型语言模型,基于 Qwen2.5-32B-Instruct 开发,专为代码生成推理任务进行了后续训练,支持 32,768 个标记的上下文长度,适用于商业和非商业用途。 二、性能表现 在 LiveCode…...
苍穹外卖-创建阿里云oss工具包
添加配置信息: sky:alioss:endpoint: ***access-key-id: ***access-key-secret: ***bucket-name: *** 把配置的内容转换成对象: Component ConfigurationProperties(prefix "sky.alioss") Data public class AliOssProperties {private St…...
代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历
589.N叉数的前序遍历: 状态:已做出 思路: N叉树的前序遍历和二叉树很像,我这里使用栈来实现。首先把根结点入栈,然后删除栈顶节点后把栈顶节点的所有子树都插入到栈,这里需要注意的是插入的方式是从最后一…...
鸿蒙跨平台开发教程之Uniapp布局基础
前两天的文章内容对uniapp开发鸿蒙应用做了一些详细的介绍,包括配置开发环境和项目结构目录解读,今天我们正式开始写代码。 入门新的开发语言往往从Hello World开始,Uniapp的初始化项目中已经写好了一个简单的demo,这里就不再赘述…...
面试中常问的设计模式及其简洁定义
🎯 一、面试中常问的设计模式及其简洁定义 模式名常被问到解释(简洁)单例模式✅ 高频保证一个类只有一个实例,并提供全局访问点。工厂模式✅ 高频创建对象的接口由子类决定,屏蔽了对象创建逻辑。抽象工厂模式✅提供多…...
关于 js:6. 网络与加密模块
一、AJAX AJAX(Asynchronous JavaScript And XML) 异步 JavaScript 与 XML(现在多为 JSON) 它允许网页在不重新加载整个页面的情况下,从服务器请求数据并更新页面内容。 主要用途: 提交表单时无需刷新页…...
量化交易系统开发经验分享--回测框架调研
一、前言 这段时间在集中做一个量化交易系统的开发任务,目前系统的MVP已经完成开发,后续会整理一些经验与成果和大家交流。刚好有一个前期做策略回测这块的调研,下面把调研的成果做一个整理总结先给大家分享一下,请批评指正。 在介…...
[学习]RTKLib详解:convkml.c、convrnx.c与geoid.c
本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...
【ajax基础】
提示:文章为 学习过程中的记录实践笔记。有问题欢迎指正。 文章目录 前言一、实现步骤二、完整示例三、封装总结 前言 AJAX 不是编程语言,是一种从网页访问web服务器的技术。 可以实现不刷新页面更新网页 在页面加载后从服务器请求/获取数据 在后台向服…...
Nodejs核心机制
文章目录 前言 前言 结合 Node.js 的核心机制进行说明: 解释事件循环的各个阶段。 答案 Node.js 事件循环分为 6 个阶段,按顺序执行: Timers:执行 setTimeout 和 setInterval 的回调。 Pending I/O Callbacks:处理系…...
Kubernetes 集群部署应用
部署 Nginx 应用 命令行的方式 1. 创建 deployment 控制器的 pod # --imagenginx:这个会从 docker.io 中拉取,这个网站拉不下来 # kubectl create deployment mynginx --imagenginx# 使用国内镜像源拉取 kubectl create deployment mynginx --imaged…...
【Linux篇】高并发编程终极指南:线程池优化、单例模式陷阱与死锁避坑实战
深入理解线程池设计与应用:高效并发编程的秘密 一. 线程池1.1 什么是线程池1.2 线程池的优点1.3 线程池的应用场景 二. 线程池设计三. 单例模式3.1 什么是单例模式3.2 单例模式特点3.3 实现单例模式方法3.3.1 饿汉实现⽅式3.3.2 懒汉实现⽅式 四. 线程安全和重入问题…...
学习和测试WebApi项目限制客户端ip访问接口(基于中间件)
WebApi项目需要限制仅允许有限的客户端访问接口,百度相关内容,网上很多介绍WebApi接口IP限流的文章,稍微调整就能用于限制IP访问,微软官网中也有文章介绍客户端 IP 安全列表(参考文献1),可以通过…...
闲鱼智能客服机器人-实现闲鱼平台7×24小时自动化值守
专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台724小时自动化值守,支持多专家协同决策、智能议价和上下文感知对话。 🌟 核心特性 智能对话引擎 功能模块技术实现关键特性上下文感知会话历史存储轻量级对话记忆管理,完整对话历…...
Apache Ranger 2.2.0 编译
安装包下载: https://ranger.apache.org/download.html 编译环境: Linux centos7jdk 1.8maven 3.9.6gitpython 3 git 安装 yum -y install gitpython3安装 yum install epel-release -y yum install python3 python3-devel -y批量安装开发工具套件 …...
实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API
实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API 理论千遍,不如动手一遍!在前面几篇文章中,我们了解了 Serverless 的概念、FaaS 的核心原理以及 BaaS 的重要作用。现在,是时候把这些知识运用起来,亲手构建一个简单但完整的 Serverless 应用了。 …...
鱼眼相机生成-BEV鸟瞰图-入门教程
目录 原理介绍 1. IPM与BEV转换的核心原理 2. 尺度信息的来源 3. 尺度信息的准确性限制 4. 实际应用中的处理方法 代码实现: 360 BEV环视拼接算法 一、核心算法流程 三、实际应用挑战与优化 四、开源实现参考 原理介绍 1. IPM与BEV转换的核心…...
设计模式简述(十八)享元模式
享元模式 描述基本组件使用 描述 当内存中存在大量类似的对象时,可以考虑使用享元模式减少整体内存占用。 可以将相同的部分和不同的部分进行拆分,以达到多个对象共享相同部分内存的目的。 基本组件 通常享元对象通过共享的属性映射一个享元对象。 公…...
Google语法整理
以下是从整理出的 Google 语法: site:指定域名,如 “apache site:bbs.xuegod.cn”,可查询网站的收录情况 。 inurl:限定在 url 中搜索,如 “inurl:qq.txt”,可搜索 url 中包含特定内容的页面&a…...
【每日一题 | 2025年5.5 ~ 5.11】搜索相关题
个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.5】P3717 [AHOI2017初中组] cover2. 【5.6】P1897 电梯里的尴尬3. 【5.7】P2689 东南西北4. 【5.8】P1145 约瑟夫5. 【5.9】P1088 [NOIP 2004 普及组] 火星人6. 【5.10】P1164 小A点菜7. 【5.11】P101…...
【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
C++ stl中的priority_queue的相关函数用法
文章目录 priority_queuepriority_queue定义方式priority_queue相关函数 priority_queue priority_queue 称为 优先级队列,默认使用vector作为底层存储数据的容器,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用…...
软件架构师知识点总结
一、综合知识 软件架构师综合知识总结-CSDN博客 二、案例 软件架构师案例知识点总结-CSDN博客 三、论文 1、题目类型:八大架构;系统开发(开发方法/模型、需求分析、测试等);系统可靠性、安全性、容错技术等&#…...
MySQL数据库常见面试题之三大范式
写在前面 此文章大部分不会引用最原始的概念,采用说人话的方式。 面试题:三大范式是什么?目的是什么?必须遵循吗? 假设有一张表(学号,姓名,课程,老师) 是…...
Scrapy 核心组件解析:Request Response 的深度应用与实战
Scrapy 是 Python 生态中最强大的爬虫框架之一,其核心组件 Request 和 Response 承担着数据抓取与处理的关键任务。本文深入解析 Scrapy 2.13.0 中 Request 和 Response 的高级用法,涵盖参数配置、回调函数、错误处理、子类扩展等,并结合 综合…...
mybatis执行sql过程
一、配置加载阶段 1. 读取全局配置(mybatis-config.xml) 入口类:SqlSessionFactoryBuilder.build()关键组件: XMLConfigBuilder:解析全局配置文件。Configuration:存储所有配…...
OceanBase 4.3版本向量数据库部署
OceanBase 4.3版本向量数据库部署 安装包准备最低资源配置重要的准备事项服务器配置操作系统内核参数BIOS设置磁盘挂载网卡设置 部署OAT工具初始化OBServer服务器使用oatcli部署OB集群安装OceanBase软件初始化OceanBase集群 启用向量检索功能 OceanBase最新的V4.3版本开始支持向…...
LeetCode 941. 有效的山脉数组 java题解
https://leetcode.cn/problems/valid-mountain-array/description/ 双指针 class Solution {public boolean validMountainArray(int[] arr) {int lenarr.length;if(len<3) return false;int left0,rightlen-1;while(left1<len&&arr[left]<arr[left1]){left…...
基于Java和高德开放平台的WebAPI集成实践-以搜索POI2.0为例
目录 前言 一、高德搜索API简介 1、高德开放平台 2、搜索功能介绍 3、部分API介绍 二、Uniapi集成高德API 1、API集成流程 2、访问接口的定义 3、业务调用集成 三、常见问题与优化 四、总结 前言 在当今数字化时代,地理信息系统(GISÿ…...
Docker拉取ubuntu22.04镜像使用ROS2 humble及仿真工具可视化进行导航
创建Ubuntu22.04 容器 docker pull ubuntu:22.04 #下载22.04镜像 docker images #查看已下载镜像 #根据镜像创建容器 sudo docker run -it -v /home/lab118/BD_ICL/tools_BD/cailib_data:/calib_data -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY:0 --nethost -e GDK_SCAL…...
PXE安装Ubuntu系统
文章目录 1. 服务器挂载Ubuntu镜像2. 修改dhcp配置文件3. 修改tftp配置文件4.复制网络驱动文件和其他配置文件5. http目录下配置文件6. 踩坑记录6.1 Failed to load ldlinux.c326.2 no space left on device6.3 为啥用pxe安装系统时,客户端需要较大的内存࿱…...