Elasticsearch 命令行操作指南:从 curl 基础到集群管理实战
1. 从零到一为什么我们需要掌握 Elasticsearch 的 curl 命令如果你刚开始接触 Elasticsearch打开 Kibana 的 Dev Tools 界面看到那些简洁的 JSON 查询语句可能会觉得一切都很美好。但当你需要写一个自动化脚本、在服务器上快速排查问题或者在没有图形界面的环境下操作集群时你就会立刻意识到那些在 Dev Tools 里点一下就能执行的请求背后到底是什么。没错就是 HTTP 请求而curl就是那个在命令行里帮你发送这些请求的“瑞士军刀”。我见过不少开发者对 Elasticsearch 的 DSL 语法很熟但一离开 Kibana 就有点手足无措。他们知道要查询match某个字段但不知道如何用命令行把这个请求发出去。这就像是一个优秀的厨师只知道用高级灶具却不会生火。掌握curl命令操作 Elasticsearch本质上是在掌握与 ES 集群“直接对话”的能力。这份能力让你不依赖任何特定工具在任何环境生产服务器、CI/CD 流水线、Docker 容器下都能自如地管理你的数据和集群。更重要的是curl命令是理解 Elasticsearch REST API 的绝佳途径。每一个在 Kibana 中执行的查询都可以被“翻译”成一条curl命令。理解了这个你就打通了从应用层到传输层的任督二脉。无论是调试一个复杂的聚合查询还是编写一个备份脚本抑或是集成到其他系统中你都能心中有数。今天我们就抛开所有图形界面回归最本质的 HTTP把 Elasticsearch 的常用curl操作命令彻底捋清楚。2. 基础准备你的 curl 与 Elasticsearch 环境在开始挥舞curl这把利器之前我们需要确保工具和环境就位。这不仅仅是安装还包括一些关键的配置和理解能让你在后续操作中少踩很多坑。2.1 curl 工具本身不止是能发请求大多数 Linux/macOS 系统都预装了curlWindows 10 及以上版本也可以在 PowerShell 或 WSL 中使用。首先验证一下你的curl是否可用以及版本curl --version你需要关注的是它是否支持 HTTPS这对于连接安全的 ES 集群至关重要以及支持的协议列表。一个现代、功能完整的curl是基础。如果系统没有安装也很简单Ubuntu/Debian:sudo apt update sudo apt install curlCentOS/RHEL:sudo yum install curlmacOS: 通常已预装或可通过brew install curl安装更新版本。Windows: 推荐使用 Git for Windows 自带的 Git Bash它包含了curl或者直接在 PowerShell 中安装。2.2 Elasticsearch 的访问端点与认证这是最容易出错的一步。你需要知道你的 Elasticsearch 服务在哪里以及如何访问它。确定地址和端口默认情况下一个本地启动的 Elasticsearch 的 HTTP 服务地址是http://localhost:9200。如果你的 ES 运行在别的机器、使用了别的端口比如 9201或者是在 Docker 容器内你需要相应地修改这个地址。例如Docker 容器映射到宿主机的 9200 端口http://localhost:9200如果是远程服务器http://your-server-ip:9200。处理认证如果启用从 Elasticsearch 8.0 开始默认启用了安全特性包括 HTTPS 和用户认证。这对于生产环境是好事但对初学者可能是个障碍。如果你的集群启用了安全认证你的curl命令需要携带用户名和密码。基础认证Basic Auth这是最常见的方式。使用-u参数。curl -u elastic:your_password http://localhost:9200系统会提示你输入密码如果直接在命令中写明密码会出现在历史记录中有一定风险。对于自动化脚本你可能需要将密码放在环境变量或加密文件中。处理 HTTPS 和证书如果 ES 使用了自签名证书默认安全配置如此curl默认会拒绝连接报错SSL certificate problem: self signed certificate。你有几种选择使用-k或--insecure参数这会跳过证书验证。仅限测试环境生产环境绝对不要用因为它使连接面临中间人攻击风险。curl -k -u elastic:password https://localhost:9200指定 CA 证书这是正确的方式。你需要获取 Elasticsearch 生成的 CA 证书通常在 ES 配置目录下如config/certs/http_ca.crt然后在curl中使用它。curl --cacert /path/to/http_ca.crt -u elastic:password https://localhost:9200一个万能的测试命令可以帮你确认以上所有配置是否正确就是访问集群的根端点# 无安全版本 curl http://localhost:9200 # 有安全、自签名证书版本测试用 curl -k -u elastic:your_password https://localhost:9200 # 有安全、指定证书版本推荐 curl --cacert ./http_ca.crt -u elastic:your_password https://localhost:9200如果返回一个包含cluster_name、version等信息的 JSON恭喜你通道打通了。2.3 让输出更可读格式化 JSON 的必备技巧Elasticsearch 的所有响应都是 JSON 格式。直接在命令行看压缩成一行的 JSON 简直是噩梦。我们有几种美化方法使用curl的-s和-S参数组合-s是静默模式不显示进度条-S是当有错误时显示错误信息。通常一起用-sS。管道到jq工具jq是一个强大的命令行 JSON 处理器。安装后apt install jq/yum install jq/brew install jq你可以轻松地格式化并提取字段。curl -sS http://localhost:9200 | jq .那个.代表整个 JSON 对象jq会把它漂亮地打印出来。你还可以用它做过滤比如jq ‘.version.number’只查看版本号。使用 Python 的json.tool如果系统没有jq通常有 Python。curl -sS http://localhost:9200 | python -m json.tool # 或 python3 curl -sS http://localhost:9200 | python3 -m json.tool从现在起为了可读性我们的示例命令会假设你使用了某种美化方法但在命令中可能省略管道部分你需要根据自己环境添加。3. 集群与索引管理查看状态与核心操作当你能连通集群后第一件事就是了解它的健康状况和结构。这些命令是你日常运维的“眼睛”。3.1 集群健康检查第一道防线_cluster/healthAPI 是你检查集群状态的入口。它的响应颜色green,yellow,red直接反映了集群的健康度。curl -sS -X GET “http://localhost:9200/_cluster/health?pretty”关键参数pretty是 Elasticsearch 提供的简易 JSON 美化参数在命令末尾加上?pretty即可比用外部工具更方便但功能不如jq强大。响应中的关键字段status:green所有主分片和副本分片都正常yellow所有主分片正常但部分副本分片未分配通常是单节点集群的默认状态red有主分片未分配数据已丢失。number_of_nodes/number_of_data_nodes: 节点数。active_primary_shards/active_shards: 活跃的分片数。unassigned_shards: 未分配的分片数yellow或red状态的根源。你可以获取更详细的、按索引统计的健康信息curl -sS -X GET “http://localhost:9200/_cluster/health?levelindicespretty”3.2 节点与集群状态信息查看集群中有哪些节点以及它们的角色master, data, ingest等curl -sS -X GET “http://localhost:9200/_cat/nodes?vpretty”这里的_catAPI 返回的是表格化的文本更简洁。v参数表示显示表头verbose。你可以用_catAPI 查看很多信息如_cat/indices,_cat/shards,_cat/allocation等。查看详细的集群状态和设置信息量巨大谨慎使用curl -sS -X GET “http://localhost:9200/_cluster/state?pretty” | head -100 # 只看前100行3.3 索引的完整生命周期操作索引是 Elasticsearch 中数据的顶层容器。以下操作涵盖了它的生老病死。1. 列出所有索引curl -sS -X GET “http://localhost:9200/_cat/indices?vpretty”这会显示索引名、健康状态、状态open/close、文档数、存储大小等。_cat/indices是日常查看最常用的命令。2. 创建索引创建索引时可以指定分片数、副本数以及字段映射mapping。# 最简单方式使用默认设置1主分片1副本 curl -sS -X PUT “http://localhost:9200/my_index” -H ‘Content-Type: application/json’ -d’ { “settings”: { “number_of_shards”: 3, “number_of_replicas”: 1 }, “mappings”: { “properties”: { “title”: { “type”: “text” }, “author”: { “type”: “keyword” }, “content”: { “type”: “text” }, “publish_date”: { “type”: “date” } } } } ‘这里有几个要点-X PUT指定 HTTP 方法为 PUT。-H ‘Content-Type: application/json’至关重要。告诉 Elasticsearch 你发送的数据是 JSON 格式。几乎所有发送 Body 的curl命令都需要这个头。-d’…’指定要发送的数据Body。用单引号包裹整个 JSON 字符串这样里面的双引号才能被正确解析。JSON 体定义了索引的配置。3. 查看索引的详细映射和设置# 查看映射 curl -sS -X GET “http://localhost:9200/my_index/_mapping?pretty” # 查看设置 curl -sS -X GET “http://localhost:9200/my_index/_settings?pretty”4. 删除索引危险操作curl -sS -X DELETE “http://localhost:9200/my_index”注意删除索引是不可逆的会清除所有数据。生产环境操作前务必三思。你可以通过关闭索引来暂时禁用而不是删除。# 关闭索引 curl -sS -X POST “http://localhost:9200/my_index/_close” # 打开索引 curl -sS -X POST “http://localhost:9200/my_index/_open”5. 索引别名管理别名像一个指向一个或多个索引的软链接常用于零停机重建索引或分区管理。# 为索引添加别名 curl -sS -X POST “http://localhost:9200/_aliases” -H ‘Content-Type: application/json’ -d’ { “actions”: [ { “add”: { “index”: “my_index_v1”, “alias”: “my_index” } } ] } ‘ # 切换别名原子操作先移除旧索引再添加新索引 curl -sS -X POST “http://localhost:9200/_aliases” -H ‘Content-Type: application/json’ -d’ { “actions”: [ { “remove”: { “index”: “my_index_v1”, “alias”: “my_index” }}, { “add”: { “index”: “my_index_v2”, “alias”: “my_index” }} ] } ‘4. 文档的增删改查数据操作基石文档是 Elasticsearch 中存储的基本数据单元。对文档的操作是最高频的 API。4.1 索引新增或全量替换文档使用PUT或POST方法向/index/_doc/id端点发送数据。如果指定了id则为索引操作如果不指定ES 会自动生成一个 ID。# 指定文档 ID 为 1 (PUT 方法) curl -sS -X PUT “http://localhost:9200/my_index/_doc/1” -H ‘Content-Type: application/json’ -d’ { “title”: “Elasticsearch Guide”, “author”: “Zhang San”, “content”: “This is a comprehensive guide...”, “publish_date”: “2023-10-27”, “views”: 150 } ‘ # 让 ES 自动生成文档 ID (POST 方法) curl -sS -X POST “http://localhost:9200/my_index/_doc” -H ‘Content-Type: application/json’ -d’ { “title”: “Another Article”, “author”: “Li Si” } ‘成功响应会包含“_id”和“result”: “created”新增或“updated”替换。重要区别PUT /index/_doc/id是全量替换。如果文档已存在它会用新文档完全覆盖旧文档旧文档的所有字段都将被新文档替换。如果你只想更新部分字段需要使用更新 API。4.2 查询文档1. 根据 ID 获取curl -sS -X GET “http://localhost:9200/my_index/_doc/1?pretty”2. 判断文档是否存在只返回 HTTP 状态码不返回内容curl -sS -o /dev/null -w “%{http_code}\n” “http://localhost:9200/my_index/_doc/1” # 返回 200 表示存在404 表示不存在3. 搜索文档核心功能搜索使用_search端点查询体使用 Elasticsearch 的 Query DSL。# 最简单的 match 查询在 content 字段中匹配 “guide” curl -sS -X GET “http://localhost:9200/my_index/_search?pretty” -H ‘Content-Type: application/json’ -d’ { “query”: { “match”: { “content”: “guide” } } } ‘ # 多字段搜索 (multi_match) curl -sS -X GET “http://localhost:9200/my_index/_search?pretty” -H ‘Content-Type: application/json’ -d’ { “query”: { “multi_match”: { “query”: “elasticsearch”, “fields”: [“title”, “content^2”] # content 字段权重加倍 } }, “from”: 0, # 分页起始 “size”: 10 # 返回条数 } ‘ # 布尔组合查询 (bool) curl -sS -X GET “http://localhost:9200/my_index/_search?pretty” -H ‘Content-Type: application/json’ -d’ { “query”: { “bool”: { “must”: [ { “match”: { “content”: “guide” } } ], “filter”: [ { “range”: { “publish_date”: { “gte”: “2023-01-01” } }}, { “term”: { “author”: “Zhang San” } } ], “must_not”: [ { “term”: { “status”: “deleted” } } ] } }, “sort”: [ { “publish_date”: { “order”: “desc” } }, { “_score”: { “order”: “desc” } } ], “_source”: [“title”, “author”, “publish_date”] # 只返回指定字段 } ‘4.3 更新文档更新 API 允许你部分更新文档而不是全量替换。它内部会先获取文档应用更新脚本然后重新索引。# 更新特定字段 (doc) curl -sS -X POST “http://localhost:9200/my_index/_update/1” -H ‘Content-Type: application/json’ -d’ { “doc”: { “views”: 200, # 更新 views 字段 “tags”: [“search”, “database”] # 新增 tags 字段 } } ‘ # 使用脚本更新 (script) - 例如将 views 字段加 1 curl -sS -X POST “http://localhost:9200/my_index/_update/1” -H ‘Content-Type: application/json’ -d’ { “script”: { “source”: “ctx._source.views params.increment”, “lang”: “painless”, “params”: { “increment”: 1 } } } ‘注意更新操作要求文档存在否则会失败返回 404。你可以通过“upsert”参数实现“存在则更新不存在则插入”。curl -sS -X POST “http://localhost:9200/my_index/_update/2” -H ‘Content-Type: application/json’ -d’ { “script”: { “source”: “ctx._source.views params.increment”, “params”: { “increment”: 1 } }, “upsert”: { # 如果文档 2 不存在则插入这个新文档 “title”: “New Article”, “views”: 1 } } ‘4.4 删除文档# 根据 ID 删除 curl -sS -X DELETE “http://localhost:9200/my_index/_doc/1” # 根据查询条件删除 (Delete By Query API) - 谨慎使用 curl -sS -X POST “http://localhost:9200/my_index/_delete_by_query” -H ‘Content-Type: application/json’ -d’ { “query”: { “range”: { “publish_date”: { “lt”: “2020-01-01” } } } } ‘_delete_by_query会先执行查询然后删除匹配的所有文档。对于大量数据这是一个耗时操作并且可能对集群性能产生影响。5. 批量与高级操作提升效率的关键单条文档操作在数据量面前效率低下。Elasticsearch 提供了强大的批量 API 来处理成批的操作。5.1 批量操作Bulk APIBulk API 允许你在一个请求中执行多个索引、创建、更新、删除操作。它的格式有严格要求每一行是一个 JSON 对象描述操作类型和元数据紧接着的一行是操作的数据对于 index, create, update 操作。数据体需要以NDJSON(Newline Delimited JSON) 格式发送即每行一个独立的 JSON 对象用换行符\n分隔。curl -sS -X POST “http://localhost:9200/_bulk?pretty” -H ‘Content-Type: application/x-ndjson’ -d’ { “index” : { “_index” : “my_index”, “_id” : “1001” } } { “title”: “Bulk Insert 1”, “author”: “BulkUser” } { “create” : { “_index” : “my_index”, “_id” : “1002” } } { “title”: “Bulk Create 2”, “author”: “BulkUser” } { “update” : { “_index” : “my_index”, “_id” : “1001” } } { “doc” : { “views”: 999 } } { “delete” : { “_index” : “my_index”, “_id” : “1002” } } ‘关键点Content-Type必须是application/x-ndjson。操作顺序每一对行组成一个操作。第一行是“动作行”第二行是“数据行”delete 操作没有数据行。性能批量大小需要权衡。太大可能导致内存压力和超时太小则失去了批量意义。通常建议每批 5-15 MB文档数在 1000-5000 之间需要通过测试找到最佳值。错误处理Bulk 响应中会包含每个子操作的结果。即使部分操作失败整个请求也可能返回 200。你必须检查响应体中的“errors”: true字段以及每个项目的“error”详情。5.2 使用文件进行批量操作对于非常大的数据导入将数据写入一个 NDJSON 文件然后让curl从文件读取比在命令行中嵌入大段数据要可靠得多。创建一个文件bulk_data.ndjson{ “index”: { “_index”: “my_index”, “_id”: “2001” } } { “title”: “From File 1”, “count”: 1 } { “index”: { “_index”: “my_index”, “_id”: “2002” } } { “title”: “From File 2”, “count”: 2 }使用curl的–data-binary参数发送文件内容并正确设置Content-Typecurl -sS -X POST “http://localhost:9200/_bulk?pretty” -H ‘Content-Type: application/x-ndjson’ —data-binary “bulk_data.ndjson”注意符号它告诉curl从后面指定的文件中读取数据。5.3 刷新与冲洗控制可见性与持久化Elasticsearch 为了性能数据写入后并不会立即可查也不会立即持久化到磁盘。这里涉及两个重要概念刷新Refresh将内存中的缓冲区In-memory buffer内容写入到新的段Segment中并使其可被搜索。默认间隔是 1 秒。你可以手动触发刷新。# 刷新特定索引 curl -sS -X POST “http://localhost:9200/my_index/_refresh” # 刷新所有索引 curl -sS -X POST “http://localhost:9200/_refresh”在批量导入大量数据后可以先不刷新以提升导入速度导入完成后再手动刷新一次这样比每秒自动刷新一次效率高得多。冲洗Flush将内存中的事务日志Translog持久化到磁盘并清空一个旧的 Translog。这保证了数据在发生硬件故障时的持久性。Translog 默认每 5 秒或在每次索引、删除、更新请求后同步到磁盘index.translog.durability设置为request时。你也可以手动触发。curl -sS -X POST “http://localhost:9200/my_index/_flush”一个实用的批量导入模式# 1. 关闭索引的自动刷新提升写入速度 curl -sS -X PUT “http://localhost:9200/my_large_index/_settings” -H ‘Content-Type: application/json’ -d’ { “index”: { “refresh_interval”: “-1” } } ‘ # 2. 执行批量导入 (使用文件) curl -sS -X POST “http://localhost:9200/_bulk” -H ‘Content-Type: application/x-ndjson’ —data-binary “huge_data.ndjson” # 3. 导入完成后恢复自动刷新并手动触发一次刷新 curl -sS -X PUT “http://localhost:9200/my_large_index/_settings” -H ‘Content-Type: application/json’ -d’ { “index”: { “refresh_interval”: “1s” } } ‘ curl -sS -X POST “http://localhost:9200/my_large_index/_refresh”5.4 重新索引与任务管理重新索引Reindex用于将数据从一个索引复制到另一个索引常用于索引重建、数据迁移、版本升级。curl -sS -X POST “http://localhost:9200/_reindex?pretty” -H ‘Content-Type: application/json’ -d’ { “source”: { “index”: “old_index” }, “dest”: { “index”: “new_index” } } ‘Reindex 是异步任务对于大数据量它会返回一个任务 ID。你可以用任务 API 来查看进度。# 提交一个 Reindex 任务并等待它完成 (wait_for_completionfalse) curl -sS -X POST “http://localhost:9200/_reindex?wait_for_completionfalsepretty” -H ‘Content-Type: application/json’ -d’ { “source”: { “index”: “old_index” }, “dest”: { “index”: “new_index” } } ‘ # 响应会包含一个任务ID如 “task”: “abcdefg:12345” # 使用任务 API 查看该任务详情 curl -sS -X GET “http://localhost:9200/_tasks/abcdefg:12345?pretty”查看和管理任务# 查看所有正在运行的任务 curl -sS -X GET “http://localhost:9200/_tasks?detailedtruepretty” # 取消一个任务 curl -sS -X POST “http://localhost:9200/_tasks/abcdefg:12345/_cancel”6. 实战排坑curl 操作 Elasticsearch 的常见问题与技巧即使命令格式正确在实际操作中你依然会遇到各种“坑”。这里分享一些我踩过之后总结的经验。6.1 JSON 格式与引号转义命令行里的“语法地狱”在命令行中编写多行 JSON 是痛苦的。单引号’、双引号”和反斜杠\的转义规则因 Shell 而异。最佳实践使用 Heredoc 或外部文件。对于简单的单行 JSON可以用单引号包裹整个 JSON 字符串这样 JSON 内部的双引号就不需要转义正如我们之前的例子。对于复杂或多行 JSON将其写入一个临时文件是最安全的方式。# 1. 将查询写入文件 query.json cat query.json ‘EOF’ { “query”: { “bool”: { “must”: { “match”: { “content”: “error” } }, “filter”: { “range”: { “timestamp”: { “gte”: “now-1h”, “lte”: “now” } } } } }, “aggs”: { “per_minute”: { “date_histogram”: { “field”: “timestamp”, “calendar_interval”: “1m” } } } } EOF # 2. 使用 curl 从文件读取数据 curl -sS -X GET “http://localhost:9200/logs-*/_search?pretty” -H ‘Content-Type: application/json’ —data-binary “query.json”使用—data-binary而不是-d可以保留文件中的换行符对于某些严格解析的 API 更可靠。常见错误“Unexpected character (‘-’ (code 45))”这通常是因为-d后面的 JSON 字符串格式不对或者Content-Type头没有正确设置为application/json。“Content-Type header [application/x-www-form-urlencoded] is not supported”忘记加-H ‘Content-Type: application/json’头curl默认会使用application/x-www-form-urlencoded。6.2 处理 HTTPS 与自签名证书的“信任危机”如前所述对于启用了 HTTPS 和自签名证书的集群最简单的测试方法是-k但生产脚本中绝不能这样。你应该将 CA 证书如http_ca.crt下载到你的客户端机器。在curl命令中通过—cacert参数指定它。或者将 CA 证书添加到系统的信任存储中具体方法因操作系统而异这样所有工具包括curl都会自动信任它。在脚本中安全地使用密码在命令行中明文写密码 (-u user:password) 非常不安全。你可以使用-u user:然后让curl交互式提示输入密码不适合自动化。将密码放在环境变量中export ES_PASSWORD‘your_secret_password’ curl —cacert ./http_ca.crt -u “elastic:${ES_PASSWORD}” https://es-host:9200使用curl的-K或—config选项从配置文件读取密码并设置文件权限为 600。6.3 超时、重试与性能调优默认情况下curl没有超时限制。对于一个无响应的 ES 节点你的脚本可能会一直挂起。设置超时使用—max-time或-m参数单位秒。curl -m 30 … # 30秒后超时连接超时使用—connect-timeout参数单位秒。curl —connect-timeout 5 … # 连接阶段5秒超时失败重试对于非幂等操作如 POST重试需谨慎。对于 GET 等幂等操作可以使用—retry。curl —retry 3 —retry-delay 2 … # 失败后重试3次每次间隔2秒针对 Bulk API 的性能调优监控 Bulk 响应中的“took”耗时和错误率。如果错误率上升或耗时激增可能是批次太大或集群压力过大。调整curl的—tcp-nodelay和—compressed参数如果 ES 支持压缩。考虑使用并行curl进程或多个连接来提升吞吐量但要小心不要压垮集群。可以使用像parallel或xargs这样的工具。6.4 结果过滤与脚本化处理curl返回的 JSON 通常需要进一步处理才能用于脚本。jq是你的最佳伙伴。# 1. 提取集群状态 curl -sS http://localhost:9200/_cluster/health | jq -r ‘.status’ # 2. 列出所有索引名每行一个 curl -sS http://localhost:9200/_cat/indices?hindex # 3. 结合 _cat API 和 jq 进行复杂过滤 (例如找出状态为 yellow 的索引) curl -sS http://localhost:9200/_cat/indices?formatjson | jq -r ‘.[] | select(.health“yellow”) | .index’ # 4. 解析搜索结果的 hits 数组 curl -sS -X GET “http://localhost:9200/my_index/_search” -H ‘Content-Type: application/json’ -d ‘{“query”:{“match_all”:{}},“size”:1}’ | jq ‘.hits.hits[]._source’将jq与 Shell 脚本结合你可以构建出非常强大的自动化运维工具。例如一个定期检查集群健康并发送告警的脚本其核心就是curl获取状态jq解析然后判断逻辑。

相关新闻

Visual C++ 运行库缺失自救指南:识别报错、一步补全、重新打开软件

Visual C++ 运行库缺失自救指南:识别报错、一步补全、重新打开软件

Visual C 运行库缺失自救指南:识别报错、一步补全、重新打开软件 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C Redistributable AIO 是一…

2026/10/6 16:59:46 阅读更多 →
五种IO模型、非阻塞IO与多路转接

五种IO模型、非阻塞IO与多路转接

目录 重新理解IO 五种IO模型 高级IO重要概念 同步通信 vs 异步通信 阻塞 vs 非阻塞 非阻塞IO select 认识 select 接口 编写 SelectServer select 的特点 poll 认识 poll 接口 编写 PollServer poll 的特点 epoll 核心机制 认识 epoll 接口 编写 EpollServer…

2026/10/14 7:21:47 阅读更多 →
零基础玩转激光雕刻软件 LaserGRBL:从空机到出活,我把踩过的坑都写成了这份复盘

零基础玩转激光雕刻软件 LaserGRBL:从空机到出活,我把踩过的坑都写成了这份复盘

零基础玩转激光雕刻软件 LaserGRBL:从空机到出活,我把踩过的坑都写成了这份复盘 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL 如果你刚收到人生第一台激光雕刻机&#xff0c…

2026/10/7 10:36:02 阅读更多 →

最新新闻

CangjieMagic jsonable 包深入解析:声明式 JSON 序列化、类型模式与语义约束校验

CangjieMagic jsonable 包深入解析:声明式 JSON 序列化、类型模式与语义约束校验

人工智能大模型AI AgentRAG工具调用MCP 服务MCP Clients多智能体 【免费下载链接】CangjieMagic 基于仓颉编程语言构建的 LLM Agent DSL,其主要特点包括:声明式 DSL、支持 MCP 协议,支持任务智能规划等。 项目地址: https://gitco…

2026/10/14 7:21:37 阅读更多 →
杭州装修暖通系统选择指南:避坑与实用技巧

杭州装修暖通系统选择指南:避坑与实用技巧

1. 装修小白必看:暖通选择为何如此重要在杭州装修过房子的朋友都知道,暖通系统是整个装修过程中最容易踩坑的环节之一。我从业内朋友那里听到过太多血泪史:有人花了大价钱装的地暖冬天不热,有人装的中央空调夏天制冷效果差&#x…

2026/10/14 7:21:37 阅读更多 →
商标权的利用

商标权的利用

商标权的利用商标权的利用是商标法中的一项重要制度,深刻体现了商标权的私权属性。探讨商标权如何在法律框架内实现其经济价值与法律功能。注册商标使用的法律界定与“连续三年不使用撤销制度”;商标权许可的三种类型及其质量控制义务;商标权…

2026/10/14 7:21:37 阅读更多 →
OpenLayers等值线编辑实战:从交互组合到数据导出

OpenLayers等值线编辑实战:从交互组合到数据导出

最近做一个气象灾害可视化项目时,我遇到了一个很典型的需求:后端用插值算法自动生成的等值线,并不能直接上线,业务专家必须手动修正那些不合理弯曲、局部小圈和多线粘连。这一步就落在 openlayers 等值线编辑上。简单说&#xff0…

2026/10/14 7:21:37 阅读更多 →
MATLAB共享储能电站冷热电多微网双层优化配置模型详解

MATLAB共享储能电站冷热电多微网双层优化配置模型详解

先说一句啊,这篇不是那种把模型往纸上一放、公式一抄就完事的论文复现,而是基于“MATLAB共享储能电站服务冷热电多微网系统双层优化配置模型”这条线,把建模思路、求解路线、MATLAB实现细节和踩坑经验一次性捋清楚。如果你想做园区级综合能源…

2026/10/14 7:20:37 阅读更多 →
90天PMP通关攻略:专治拖延症的反人性备考技巧

90天PMP通关攻略:专治拖延症的反人性备考技巧

2026年6月PMP考试:一场与“拖延症”的终极对决!90天通关全攻略(内附反人性备考技巧)如果有人问我,PMP考试难在哪,我大概率会说:难在开始。2026年6月那场考试,我提前90天就买好了教材…

2026/10/14 7:20:37 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →