首页/新闻资讯/正文详情

history | grep ssh:Shell历史命令检索与SSH排查实践

发布时间:2026/11/3 17:22:54 来源:云帆数科 栏目:资讯中心
history | grep ssh:Shell历史命令检索与SSH排查实践
history | grep ssh这条命令我第一次用到它是在一个深夜里手上要接一个别人交接的运维工作交接文档只有半页纸上面写着“几台机器可以 ssh 上去具体连法问原来那个同事”。原来的同事早就不在项目里了。我坐在终端前翻自己的命令历史翻到三个月前一串 ssh 记录才把整条链路拼出来。从那以后这条不到二十个字符的管道就成了我排查问题时的固定动作。它做的事情说起来很简单把当前 shell 记下来的历史命令交给 grep 做一次文本筛选只看和 ssh 有关的部分。但真正用得好需要搞清楚 shell 到底记了什么、什么时候记的、记在哪个文件里以及 grep 那几个参数在什么场景下该加什么。这篇就按我这些年在实际排查中攒下来的经验把这条命令拆开讲透从机制到参数从常见误判到历史文件的安全问题尽量让刚接触命令行的人也能直接照着用也让已经用了几年的人找到几个以前没注意的点。1. 这条管道要解决的其实是三个不同的痛点1.1 记不清上次是怎么连的那台机器人的记忆对命令行参数特别不友好。端口是多少、用的哪个密钥文件、加了哪些-o选项、跳了几层、用户名是 root 还是普通账号这些东西当时敲得飞快隔一个月就模糊了。尤其在需要连的机器有十几台、端口又不统一的时候凭记忆重敲一遍大概率会出错而 ssh 出错的表现往往只是“连接超时”或者“Permission denied”看不出到底是端口错了还是密钥不对。这时候history | grep ssh的价值就体现出来了它把过去所有真实的、成功执行过的连接命令原样列出来等于一份由你自己写下的、带完整参数的连接记录。不用问人不用翻文档也不用去猜。我个人的习惯是凡是第一次连某台机器敲完命令之后不急着清理让它自然留在历史里以后就有了可查的样本。1.2 history 负责留存grep 负责收窄理解这条管道得先接受一个事实history是 shell 的内建命令它吐出来的是当前这个 shell 会话记录下来的命令列表每条前面带一个编号。这个列表可能几十条也可能几千条直接看是不现实的。grep是个文本过滤器读标准输入、按模式匹配、把命中的行输出到标准输出。两者用管道连起来逻辑上就是“先全部拿出来再按关键词筛一遍”。管道的好处是history不需要先把结果写到临时文件grep边读边筛几乎感觉不到延迟几千条历史也是瞬间出结果。这个组合的通用性很强把ssh换成scp、rsync、docker、curl用法完全一样所以它更像是一种通用的检索思路而不是某一条固定命令。1.3 有三种情况它会给你错误答案这一点很多人没意识到。history | grep ssh的输出看起来是事实但它只是“当前 shell 内存里那份历史列表”的快照。如果历史被截断过、被别的终端覆盖过、或者命令本身没进历史你筛出来的结果就是残缺的甚至一条都没有。我见过有人因为筛不出记录误以为某台机器从来没连过结果在另一台机器的历史里找到了。所以正确的态度是这条命令给出的是线索不是判决。筛不到的时候先别下结论回头确认一下历史的记录机制有没有问题。下面第 2 节就是专门讲这个的那部分内容比命令本身更重要。2. 历史记录的保存机制决定了你筛得出什么2.1 HISTSIZE 和 HISTFILESIZE 记录两套长度很多人以为历史就是一个文件其实在 bash 里是两套内存里一份列表磁盘上一个文件默认~/.bash_history。HISTSIZE管内存里保留多少条HISTFILESIZE管磁盘文件里保留多少行。这两个值不一样的时候行为会有点反直觉。比如HISTSIZE1000、HISTFILESIZE2000退出 shell 时内存里的 1000 条会写进文件文件里最多保留 2000 行。反过来HISTSIZE5000、HISTFILESIZE1000那就是内存里记 5000 条但写盘时文件只留 1000 行超出的老记录直接没了。所以如果你发现很久以前的 ssh 记录查不到第一件事就是看这两个值。echo $HISTSIZE echo $HISTFILESIZE wc -l ~/.bash_history我在实际环境里见过HISTSIZE被设成 100 的机器稍微操作一会儿历史就滚没了那种环境下这条命令基本没用。改配置的话在~/.bashrc里加两行然后重新登录或者source ~/.bashrc生效。数值别一味求大几十万条的历史文件在 grep 时会有明显卡顿而且里面沉淀的敏感信息也更多我个人一般设 10000 到 50000 之间够用了。2.2 多个终端同时开启时的覆盖问题这是“查不到历史”最常见的原因比配置问题常见得多。默认情况下bash 在 shell 退出时才把内存里的历史写进文件而且是覆盖式写入。你开了三个终端窗口A 窗口先退出把它的历史写进去了B 窗口后退出用自己那份覆盖掉C 窗口最后退出再覆盖一次。结果就是只有最后退出的那个窗口的历史留了下来另外两个窗口里的 ssh 命令全丢了。解决方式有两个建议一起用。第一是打开追加模式shopt -s histappend打开之后退出时是往文件末尾追加而不是整体覆盖。第二是让每条命令执行完立刻落盘而不是等退出PROMPT_COMMANDhistory -a; $PROMPT_COMMANDhistory -a的意思是“把当前会话新增的历史追加到历史文件”。配合PROMPT_COMMAND每次显示提示符前都会执行一次等于实时同步。这两行加进~/.bashrc之后多窗口互相覆盖的问题基本就消失了。顺带说一句有些发行版的默认配置里已经带了histappend但并非全部别假设它开着自己shopt histappend看一眼最稳妥。2.3 给历史加上时间戳让结果有坐标光有命令本身很多时候还是不够。你会看到五条一模一样的 ssh 命令分不清哪条是上周的、哪条是半年前的。加上时间戳之后history的输出里每条前面会多一个时间配合 grep 就能定位“那次操作大概发生在什么时候”。export HISTTIMEFORMAT%F %T 格式串遵循strftime规则%F是2024-01-01%T是13:45:20。加完之后新的历史记录就带时间了输出大概是这样1024 2024-03-11 09:12:33 ssh -p 2222 deploy192.0.2.10需要提醒的是这个变量设置之前写进文件的老记录没有对应的时间信息显示上可能缺失或者不准只有此后新执行的命令才有可靠时间。所以如果你现在还没开建议马上开越早开越值。这个改动没有副作用唯一的影响是history输出变长了一点筛选时多一列而已。2.4 子 shell、切换用户与不落盘的情形还有几种情况会让命令压根不进你的历史。最典型的是用bash -c ...这种一次性执行的方式命令在子进程里跑完就结束了不会进当前 shell 的可交互历史。写脚本、跑定时任务、在自动化工具里执行命令都属于这一类。所以如果你想查的是“某个自动化流程连了哪些机器”翻自己的 history 是翻不到的。另一种是切换用户。sudo -i或者su -之后进入的是另一个账号的 shell历史记在那个账号的~/.bash_history里。你退出回到自己账号用history | grep ssh当然查不到刚才在 root 下做的事。遇到“明明刚敲过却查不到”先看一眼whoami和echo $HOME八成是这个问题。最后一种是我们主动配置的“不记录”。有些命令天生不想留在历史里比如包含敏感参数的可以在命令前加一个空格需要HISTCONTROL包含ignorespace这条命令就不会被记录。这是好事但也意味着以后你自己也查不到了属于有意的取舍。3. 把 grep 从“能筛”调到“筛得准”3.1 五个高频参数的组合方式grep ssh能用但在实际场景里经常需要再加一两个参数才顺手。下面这几个是我最常用的参数作用典型用法-i忽略大小写历史里有SSH、Ssh混着写时-E使用扩展正则需要ssh.*-p这类组合匹配-v反向匹配排除噪音行如grep -v grep-c只输出计数快速知道连过多少次-n显示行号配合history编号重放命令组合起来最实用的几条# 忽略大小写把各种写法都捞出来 history | grep -i ssh # 只看带端口参数的连接记录 history | grep -E ssh .*-p [0-9] # 统计一共执行过多少次 ssh 相关操作 history | grep -c ssh # 排除掉 scp 这类同样含 ssh 关键字的干扰 history | grep ssh | grep -v scp最后那条挺有用。scp、sftp、ssh-keygen、ssh-add这些命令名里都带 ssh全混在一起输出会显得很乱。如果你只想看真正的远程登录命令用grep -E ^\s*[0-9]\sssh 这类更严格的正则或者干脆先排除掉几个不相干的关键词效果都不错。3.2 按主机、端口、账号三段分别筛连接命令的结构是相对固定的ssh [选项] 用户主机。这意味着你可以只筛其中一段解决很具体的问题。想知道自己连过哪些不同的主机history | grep -oE ssh .* | awk {print $NF} | sort -u这条命令把每行里ssh之后的部分截出来取最后一个字段通常是用户主机或主机去重排序。输出就是一份“我这段时间连过的目标清单”很适合做交接或者写文档时快速回忆。想按端口筛就用-p参数做锚点想按账号筛就匹配前面那一段。这种拆开筛的思路比笼统地 grep ssh 精准得多尤其是历史记录积累到几千条之后笼统筛出来的结果已经很难一眼看完。3.3 去重与频次统计让结果变短几十条输出还能看几百条就没法看了。历史里同一台机器往往连过几十次命令几乎一模一样全列出来意义不大。用uniq -c统计频次再倒序排一下就能看出哪些是高频目标history | grep -oE ssh [^|;]* | sort | uniq -c | sort -rn | head -20输出的左边是次数右边是具体命令。一眼就能看出“这台机器我连了四十次”“那台只连过一次”。前者通常是日常维护对象后者往往是临时排查时才连的含义完全不同后续处理方式也不一样。我自己有个小习惯每隔一段时间跑一次这个统计把 top 10 的连接命令挑出来整理成~/.ssh/config里的 Host 别名。这样以后就不用记端口和密钥路径了直接ssh web两个字符搞定。# ~/.ssh/config 示例 Host web HostName 192.0.2.10 Port 2222 User deploy IdentityFile ~/.ssh/id_ed25519_deploy配置好之后历史里全是短命令再想从 history 里翻细节就翻不到了。这是一个权衡别名让日常操作更顺但把参数藏进了配置文件。我的做法是两个都留首次连接时用完整命令确认可用之后再写别名两边都有记录。3.4 那条命中的“自己”是个固定噪音有个小细节你执行history | grep ssh的时候输出里经常会出现最后一行就是history | grep ssh本身。原因是 bash 在执行这条管道之前就已经把整条命令行加进历史列表了history读到的列表里自然包含它。这个不影响使用但你如果写了脚本去解析history的输出就要注意把这行排除掉否则每次统计都会多算一次。排除的办法很简单用grep -v过滤掉包含grep的行或者用一个不可能出现在真实命令里的锚点做匹配。类似的“自指”问题在很多基于历史的分析脚本里都会碰到写的时候顺手处理掉能省掉后面很多困惑。4. 比 grep 更顺手的几种回溯手段4.1 CtrlR 的边界在哪里说到翻历史很多人第一反应是CtrlR反向搜索。它确实快敲几个字符就能跳到最近一条匹配的命令再按一次CtrlR往前继续找。日常重复执行某条命令这是最省事的。但它有明显的边界。第一它只按“最近匹配”的顺序走如果某条命令是很久以前的你要按很多次才能翻到而且中间会被大量相似结果干扰。第二它不做过滤和统计你没法一眼看完所有匹配项。第三也是最要紧的CtrlR是“选中即执行”的交互手一滑按了回车可能就把一条带破坏性参数的命令直接跑起来了。所以我的经验是日常重复用CtrlR需要“看清楚再决定”的时候一定用history | grep。前者是快速取用后者是审阅两者的使用场景不该混。4.2 交互式模糊搜索工具要不要上近几年不少人在终端里装模糊搜索工具把历史喂进去做交互式筛选上下键选择回车执行体验比grep好不少。要不要上取决于你的使用频率和机器环境。频繁在几十台机器之间跳、每天要重放大量历史命令的人装了确实提升明显筛选用模糊匹配不用记精确的关键词。但如果只是偶尔查一下为了这个装一整套工具链并不划算而且有些生产环境不允许随便装软件运维规范也未必允许。history | grep的优势在于它是原生的任何有 bash 的机器上都能用服务器、容器、跳板机无一例外。我的建议是先把手上的原生命令用熟包括history | grep、!n重放、history -d删除这几样等这些形成肌肉记忆之后再考虑要不要加工具。基础不牢的时候上工具遇到工具不可用的环境就抓瞎了。4.3 单独维护一份连接记录这个做法听起来很土但在实际项目里非常有效。在~/.ssh/config之外另外维护一个纯文本文件比如~/notes/hosts.md每连一台新机器就补一行写清楚主机、端口、账号、用途、负责人。历史记录会被截断、会被覆盖、会随账号迁移而丢失但你自己维护的文件不会。我更倾向把它和history | grep配合着用日常快速回忆靠历史正式交接和长期存档靠笔记文件。历史是自动的、易失的、不完整的笔记是手动的、持久的、经过思考的。真正出问题的时候能救你的是后者。这个习惯我坚持了挺久中间换过几次工作环境每次新环境上手第一件事就是把老笔记翻出来对照。5. 历史文件本身就是一份明文操作日志5.1 参数里塞明文口令的代价必须说清楚一件事~/.bash_history是纯文本文件任何能读这个文件的人都能看到里面每一条命令包括参数。如果某次连接时为了图快把口令直接写在了命令行参数里比如某些工具支持的口令选项那这条口令就以明文形式永久留在了历史文件里而且会被后续每一次覆盖写入反复保留。这个问题比很多人想的严重。历史文件经常被顺手拷贝、被备份工具打包、被误传到共享目录一旦发生泄露的不是一台机器而是一整批。我见过的最典型场景是临时在别人的机器上操作图省事直接带口令操作完就走了那条记录留在对方的账号下谁也没在意。所以原则只有一条口令永远不写进命令行。用密钥认证、用交互式输入、用配置好的凭据管理方式都行就是不要拼在参数里。这条没有例外图快一次风险是长期的。5.2 HISTCONTROL 与 HISTIGNORE 的配置策略既然有些命令不该留就得主动配置。HISTCONTROL控制记录规则常用的取值有这几个取值含义ignorespace以空格开头的命令不记录ignoredups连续重复的命令只记一条ignoreboth上面两个都生效erasedups整个历史里重复的命令只保留一条ignoreboth是我推荐的默认值既能让“空格开头保密”这种临时手段生效又能避免连续ls、cd把历史刷满。erasedups要慎用它会把历史里所有重复项清掉好处是干净坏处是你再也看不出某个命令执行过多少次而这恰恰是排查时的重要信息。HISTIGNORE则是指定“哪些模式不记录”用冒号分隔export HISTIGNOREls:cd:pwd:clear:history:exit把日常高频但无信息量的命令排除掉历史文件会干净很多history | grep ssh的结果也更聚焦。这个列表建议按自己的实际习惯定制不要照抄别人的每个人的高频命令差别很大。5.3 已经写进去的记录怎么处理如果发现历史里有不该留的内容处理方式分几步。先定位行号history | grep 关键词输出左边的数字就是编号然后删掉单条history -d 1024删完之后内存里的这条就没了但磁盘文件里还在。要同步得再执行history -w把当前内存的历史整体写回文件。注意-w是覆盖写入会拿内存里的内容替换整个文件如果此时你还有别的终端开着并且它们的记录没同步过来那些记录会丢。稳妥的做法是先history -a把新增的追加进去再处理。如果整个历史都要清history -c清内存再history -w清文件。但这种操作要谨慎历史本身是排查问题的依据清掉之后你自己也没得查了。日常更合理的是控制输入源头把HISTCONTROL和HISTIGNORE配好从根上减少不该落盘的内容。另外提一句文件权限。~/.bash_history建议设成600只有自己能读写chmod 600 ~/.bash_history有些环境的默认权限是644同机器上的其他账号能直接读你的历史。这个细节很少有人主动检查但成本极低顺手做掉。6. 三次排查复盘问题出在命令之外6.1 端口改过但没人记得改成多少有一次接手一套测试环境文档上写的端口是默认值实际连不上。用history | grep ssh在自己的历史里搜搜到几条带-p的记录端口是另一个数字。但问题是这几条记录里有三个不同的端口值看不出哪个是当前的。这时候靠时间戳就派上用场了。开了HISTTIMEFORMAT之后输出里每条都带时间最近的几条用的是同一个端口更早的用的是另一个。结合“文档是什么时候更新的”这个信息判断出最近那个才是现行值。如果没有时间戳三条记录摆在一起真的没法判断只能逐个试。这次之后我给所有环境的连接命令都加了注释习惯连接成功之后在笔记文件里补一行带日期的记录。历史能提供线索但要确定当前有效值还是得有带时间的书面记录。6.2 历史里明明有记录命令却没生效有一次排查一个部署问题我记得自己执行过某条带 ssh 的命令history | grep也确实查到了。但线上状态显示那条命令并没有真正生效。折腾了一阵才发现那条记录是执行失败的那次后面还跟了一条修正后的命令只是关键词不同被我筛掉了。这个教训是history | grep筛出来的是“执行过的命令”不是“成功执行的命令”。失败的、敲错的、中途 CtrlC 中断的全都在里面而且从历史本身看不出执行结果。所以筛到之后下一步动作应该是确认这条命令当时到底成没成而不是直接拿去重放。更危险的是重放。!1024这种按编号重放的写法执行的就是历史里那条原文如果它本来就是错的重放一遍还是错。我现在的做法是筛到之后先看清楚把命令复制出来改一改再执行不直接重放。慢几秒但避免了很多次意外。6.3 换个账号操作历史就查不到了还有一次很典型的困惑刚在服务器上操作完回本地想查具体命令history | grep ssh一条都没有。当时以为历史被清了检查了半天配置。最后发现是操作时用sudo -i切到了管理员账号命令全记在那个账号的~/.bash_history里回到自己账号自然查不到。排查这类问题的顺序我现在已经固定下来了先whoami确认当前身份再echo $HOME确认家目录再echo $HISTFILE确认历史文件路径。三步下来八成的问题都能定位。这三条命令加起来不到二十个字符比盲猜快得多。HISTFILE这个变量值得多看一眼有些环境会把它改到别处比如为了集中审计把历史指向统一目录。这时候~/.bash_history是空的或者只有很老的记录真正的内容在$HISTFILE指向的位置。查一下就知道别在错误的文件上浪费时间。我个人在实际操作中的体会是history | grep ssh这类命令的价值大半不在命令本身而在于它逼着你去理解 shell 到底怎么记账。真正让人少走弯路的是那几行HISTCONTROL、HISTTIMEFORMAT、histappend的配置是知道历史在哪、会被谁覆盖、什么时候不记录。命令只是入口配置才是地基。下次你发现自己敲完这条命令、盯着空输出发愣的时候先别怀疑命令写错了去echo $HISTFILE看一眼答案通常就在那儿。

相关推荐

企业数据备份方案:双机热备、数据库备份与灾难恢复
企业数据备份方案:双机热备、数据库备份与灾难恢复

简介:面向企业IT运维、网络管理员及信息化负责人的《企业数据备份方案文档》,围绕企业业务网络如何安全连续运行,系统梳理网络备份、双机容错、数据库备份、灾难恢复与备份任务管理等核心环节。整包仅含1个doc文档,约240KB&#x… · 2026/11/2 11:46:55

全屋柜子收纳设计:提升空间利用率的科学规划
全屋柜子收纳设计:提升空间利用率的科学规划

1. 全屋柜子收纳设计概述 全屋柜子收纳设计是现代家居规划中至关重要的一环。它不仅关乎空间的美观性,更直接影响日常生活的便利性和舒适度。一个优秀的收纳系统能够将有限的空间利用率提升30%以上,同时让居住者在使用过程中感受到流畅和愉悦。 作为从业… · 2026/11/2 11:46:55

2025国产AI编程IDE对比:通义灵码、CodeBuddy、Comate与Trae CN
2025国产AI编程IDE对比:通义灵码、CodeBuddy、Comate与Trae CN

1. 国内四大AI编程IDE概览 2025年无疑是AI编程工具爆发式发展的一年,国产AI编程IDE在功能和体验上都取得了长足进步。作为一名长期关注开发者工具演进的技术博主,我决定对当前国内主流的四款AI编程IDE进行深度对比评测。这四款产品分别是:阿里… · 2026/11/2 11:46:55

企业安全框架OpenClaw:动态智能防护体系解析
企业安全框架OpenClaw:动态智能防护体系解析

1. 项目概述"龙虾安全指南"是奇安信面向2026年企业安全需求推出的全新安全框架体系。这个代号"OpenClaw"的项目本质上是一套融合了新一代安全技术的企业级解决方案,其核心目标是通过"看得清、管得住、用得好"三大维度,帮助… · 2026/11/3 17:22:30

插电混动技术解析:比亚迪DM-i系统与市场优势
插电混动技术解析:比亚迪DM-i系统与市场优势

1. 插电混动技术为何成为市场新宠最近两年路上绿牌车明显多了起来,细心的朋友会发现其中不少是插电混动车型。这种"可油可电"的新能源车,正在以惊人的速度改变着我们的出行方式。作为从业十余年的汽车工程师,我亲眼见证了插混技术从… · 2026/11/3 17:22:30

从Claude Code到Pi:为什么开发者转向模型无关的开源AI代理框架?
从Claude Code到Pi:为什么开发者转向模型无关的开源AI代理框架?

最近开发群里聊得最多的一个话题,不是新框架,也不是新语言,而是:为什么越来越多人从 Claude Code 换到 Pi?这两个工具我都重度用过,Claude Code 用了将近一年,Pi 也跑了差不多三个月&#xff0c… · 2026/11/3 17:22:30

比亚迪DM-i插电混动技术解析与应用场景
比亚迪DM-i插电混动技术解析与应用场景

1. 插电混动技术的市场定位与用户需求在当下汽车动力技术路线中,插电混动(PHEV)凭借其独特的"可油可电"特性,正在成为越来越多消费者的折中选择。相比纯电动车,它消除了里程焦虑;相较传统燃油车&… · 2026/11/3 17:22:30

专业图床服务与CDN加速技术解析
专业图床服务与CDN加速技术解析

1. 为什么我们需要专业的图床服务作为一名技术博主,我深知图片加载速度对用户体验的影响有多大。去年我的个人博客就因为图片加载问题流失了近30%的移动端读者。当页面加载时间超过3秒时,53%的用户会选择离开——这是Google的研究数据。传统解决方案通常… · 2026/11/3 17:22:30

O(1)空间复杂度下寻找缺失数字的原地标记算法
O(1)空间复杂度下寻找缺失数字的原地标记算法

1. 问题背景与核心思路这个问题看起来简单,但隐藏着几个关键约束条件:我们需要在O(n)时间复杂度和O(1)额外空间复杂度下,找出1到n范围内缺失的数字。这意味着我们不能简单地使用哈希表等额外数据结构,而必须充分利用给定的数组本身… · 2026/11/3 17:21:30

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

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

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

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

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

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

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码