news 2026/9/11 2:40:35

Xshell运维实战:会话管理、快捷键与自动化脚本提效指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Xshell运维实战:会话管理、快捷键与自动化脚本提效指南

各位运维同行,今天想来聊聊Xshell。这不是一篇软件评测,折腾了这么些年服务器,从最早用SecureCRT,中途换过PuTTY、Windows Terminal,后来还是把Xshell当成了主力终端工具。不敢说自己用得多精,但至少在我日常的Linux服务器管理、批量部署、日志排查这些工作里,它帮我省下的时间,保守估计能顶半个专职运维。这篇文章我想换个角度,不只整理快捷键,而是把会话管理、远程执行、自动化脚本、问题排查这些串联起来,讲点真正能落地、能提升效率的东西。不管你是刚接触服务器管理的萌新,还是被一堆跳板机和几百台ECS折磨的老手,这篇都有值得你停下来多看两眼的内容。


1. 工具选型解析:为什么兜兜转转又用回Xshell

1.1 从PuTTY到Xshell:一个运维老兵的选型心路

早年间我用的是PuTTY,轻量是真轻量,但痛点也很明显:会话多了以后那叫一个乱,没有标签页,开几个窗口就铺满整个任务栏,找一台机器还得一个个点过去。后来换过一段时间的Windows Terminal,颜值高、自定义能力强,但连接Linux服务器时,少了那种"会话树+用户名密码/密钥统一管理"的顺手感,尤其当你手上管理几十台机器的时候,能不能快速搜到目标主机、能不能一键打开多个会话,直接影响干活的心情。

之所以绕回Xshell,核心就三点。第一,它对Windows环境的集成做得最舒服,虽然是图形界面工具,但"复制即选中、右键即粘贴"这些操作逻辑非常贴合我这种从命令行摸爬滚打出来的人的习惯。第二,它的会话管理足够强大——文件夹分组、颜色区分、标签页、会话搜索、快速连接,这套组合拳打完,哪怕管着上百台服务器,屏幕上也能保持井井有条。第三,它内置了一些对运维场景的贴心设计,比如终端缓冲区的回滚、日志记录、SFTP的集成,这些功能单看不稀奇,但组合到一起,形成了很高的工作舒适度。

我接触到的一些同行会有顾虑,担心Xshell收费、有免费版限制之类。实际上,Xshell对个人和教育用途有免费版本,日常连接和管理服务器完全够用。对于商用环境或者学校机房,按官方渠道申请授权即可。我的建议是,不要因为纠结授权问题而去反复换工具,与其换来换去,不如把手里这套玩透。

1.2 一个终端工具该解决的核心问题

选终端工具,本质上是在解决三个层面的问题:连接效率、操作效率、信息处理效率。

连接效率,指你从打开软件到进入一台服务器的命令行,中间需要几步。如果每次都要重新输入IP、端口、用户名、密码,那这个工具是不合格的。合格的工具应该做到:双击会话直接进、常用机器置顶、跳板机无需手动exec。

操作效率,指进入会话之后,你复制、粘贴、输入命令、切换窗口、滚动回看这些动作是不是顺滑。Xshell的"选中即复制、右键粘贴"、Ctrl+Shift+T新建标签页、Alt+数字快速切换标签页,这些都是实打实节约时间的操作。

信息处理效率,指你面对大量输出时能不能快速定位关键信息。比如日志文件里找error、部署脚本里看某个阶段是否成功、批量操作时区分不同主机的返回结果。Xshell的终端高亮、缓冲区搜索、配色方案,都是在帮你更快地把信息从噪音里捞出来。

这三个效率叠在一起,就是一个运维工程师每天工作体感的直接来源。同样是一上午,有人能巡检完30台机器、定位到问题并修复,有人光是在各种窗口之间切来切去就耗掉大半时间。差距不在手速,在于工具的使用深度。


2. 会话管理与连接效率进阶:把常用机器变成一键直达

2.1 会话文件夹的分层整理策略

很多人的Xshell会话列表是从一开始就没规划过的,装好软件,今天连一台机器就保存一个会话,日积月累,几十个会话平铺在列表里,看起来跟乱码似的。我这边用了一套分层策略,分享出来可以参考。

首先,在会话管理器的根目录按业务线分文件夹,比如"生产环境"、"测试环境"、"跳板机"、"数据库"、"临时连接"。生产环境下面再按项目或地域划分二级文件夹,每个文件夹里才是具体的会话。这样做的逻辑很直接:当你需要处理某个业务线的故障时,不需要回想"那台机器IP是多少来着",只需要顺着业务线点进去,几秒钟就能定位。

其次,会话命名要带信息量。我习惯的命名格式是"项目名-角色-IP后两位",例如"商城-网关-23",或者是"订单库-master-51"。不要小看命名规范,当会话数量超过50个之后,"这台机器是干嘛的"这个问题会频繁地打断你的思路,而一个好的命名直接帮你省掉这个思考环节。

最后,颜色标签。Xshell支持给会话设置不同的前景色和背景色,我通常把生产环境的会话标红、测试环境标绿、跳板机标黄。这个看起来是小事,但当你同时开着十几个标签页的时候,是不是生产机器一眼就能分辨出来。我曾经因为没做颜色区分,在某次半夜故障处理时差点把测试库当成生产库执行了重启操作,还好手抖了一下发现颜色不对。从此以后,颜色标签成了我新建会话后的标配动作。

2.2 跳板机配置:不用反复SSH的省心方案

在真实的生产环境里,出于安全策略的要求,我们往往不能直接连接目标服务器,需要先登录一台跳板机,再从跳板机跳到目标机器。如果没有合理配置,每次都需要手动输入两次密码,一旦跳板机密码还带特殊字符,那酸爽真是够呛。

Xshell里对跳板机的支持做得很到位,在会话属性里找到"连接"-"代理",这里可以设置一个跳板机或代理会话。当你连接目标机器时,Xshell会自动打开到跳板机的连接,然后经由跳板机再连到目标机器,整个过程只需要输入一次目标机器的密码(如果你配置了密钥,那连密码都省了)。

有人在配置跳板机会遇到一个问题:跳板机也需要动态口令或者特殊认证方式。我的建议是将跳板机单独保存为一个会话,然后在目标机器的代理设置中选择"使用下面指定的代理服务器",代理类型选择"会话",再选到那个跳板机会话。这样跳板机的动态口令在打开会话瞬间输入一次即可,后续从目标机器切回跳板机就不需要重复输入了。实际操作中这个方案非常稳,我已经用了两年多。

2.3 快速命令与参数化连接:告别重复输入

连接服务器时,如果每次都要输入一遍ssh root@ip,那效率实在太低。Xshell的"新建会话"支持保存完整的连接参数,双击即连。但还有个进阶玩法容易被忽视:"快速连接"工具栏。它支持临时输入IP和端口就发起连接,适合那些不需要长期保存的一次性场景,比如同事临时给你一台机器排查问题。

更进阶的是配合"快速命令"功能。Xshell支持在底部的快速命令栏预设常用命令,点击即可执行。我自己会把以下这些高频命令做成快速命令:

  • df -h:看磁盘
  • free -m:看内存
  • uptime:看负载
  • tail -f /var/log/messages:跟踪系统日志

表面上看只是省了敲几个字母的时间,但它真正的价值在于减少"肌肉记忆的输入错误"。尤其是凌晨3点被叫起来处理故障的时候,整个人是迷糊的,点一下快速命令比你迷迷糊糊敲错一个字符强得多。


3. 终端操作核心技能:让命令行的日子不再难熬

3.1 快捷键速查表:先背下这20个再说

快捷键这块,网上整理的很多,但多数是把设置面板里的列表抄一遍,没有主次。我按照"高频必备、效率进阶、显示控制"三个层次筛选了最值得记的20个,整理成一张速查表,你照着这个记忆负担小很多。

分类快捷键功能说明我的使用场景
高频必备Ctrl+Shift+N新建会话窗口多台机器同时巡检
高频必备Ctrl+Shift+T新建标签页在同一个窗口里开多个会话
高频必备Ctrl+Tab / Ctrl+Shift+Tab切换标签页在机器之间快速跳转
高频必备Alt+数字键切换到指定标签页直接跳到第N台机器
高频必备Ctrl+Shift+C / Ctrl+Shift+V复制/粘贴从本地粘贴命令到远程
高频必备鼠标选中即复制复制选中内容复制日志或命令输出,免去Ctrl+C冲突
效率进阶Ctrl+L清屏和Linux终端行为对齐
效率进阶Ctrl+U删除光标至行首输错一大截命令时一键清空
效率进阶Ctrl+W删除光标前一个词只删一个参数时很顺手
效率进阶Ctrl+R历史命令搜索翻历史命令不用一直按上箭头
效率进阶Ctrl+C中断当前命令处理卡住的进程或错误输入
效率进阶Ctrl+Z挂起当前进程临时把进程放后台,处理完再用fg恢复
显示控制Ctrl+Shift+E切换终端/命令输入框命令和输出分离时便于回看
显示控制Ctrl+Shift+F查找终端内容在长日志里找关键字
显示控制Ctrl+Plus / Ctrl+Minus调整终端字体大小演示时放大,平时调小看全局
显示控制Ctrl+Shift+R切换终端缓冲区回看大量滚动输出
会话管理Ctrl+Shift+D断开当前会话快速断开但不关闭标签页
会话管理Ctrl+Shift+R重新连接当前会话网络闪断后一键恢复
会话管理Ctrl+Shift+M打开会话管理器快速切换到其他机器
文件传输Ctrl+Alt+F打开SFTP窗口需要传文件时直接拉起文件管理

提示:以上快捷键基于Xshell默认设置。如果你改过预设或者版本差异大,以"工具"-"选项"-"键盘映射"里的实际设置为准。

3.2 标签页与窗口布局:屏幕空间利用的艺术

多台服务器并行处理是运维常态,而屏幕空间怎么分配,直接影响你同时能"看见"多少信息。我常用的方式是:一个Xshell窗口足够,靠标签页区分不同机器,再通过分割窗口实现同屏对比。

Xshell 7及之后的版本支持窗口分割(在"查看"-"终端"里可以启用分割)。这个功能特别适合以下场景:一个是"对比配置",左边连配置正常的服务器,右边连配置异常的服务器,diff一眼看清差异;另一个是"主从日志对比",主库和从库的复制状态在同一屏内对照,问题出在哪立刻就能看出来。

如果是多台机器批量执行同样的命令,我更推荐的做法是打开多个标签页,然后配合后面的脚本批量执行方案来操作,而不是手动一个个粘贴命令。手动重复操作有两个风险:一是效率低,二是容易漏掉某台机器。标签页的价值在于,让你能看到"命令确实执行在了这台机器上",而脚本的价值在于"所有机器都执行了同样的命令",两者结合互补。

3.3 终端高亮与日志回看:让关键信息自己跳出来

生产环境日志动辄几百上千行,靠肉眼扫描"error"是一件非常不科学的事。Xshell的终端高亮功能,可以给指定的关键词设置颜色和字体样式,命中即高亮显示。

我的日常配置是三组高亮关键词:错误级(error、failed、exception、fatal),用红色加粗;警告级(warn、timeout、retry),用黄色;成功级(success、done、ok),用绿色。配置方法是在"工具"-"高亮集"里新增规则,然后应用一个高亮集到当前会话或所有会话。这样每次命令输出一滚屏,关键信息自己就跳出来了,比肉眼搜索效率高几个量级。

日志回看方面,Xshell的滚动缓冲区默认有上限,但可以在"文件"-"属性"-"终端"-"滚动缓冲区"里调大,比如调到5000行以上。如果你处理的是特别长的部署日志,还可以在会话属性里开启"日志记录",把会话内的所有输入输出同步写入本地文件。这样即使终端Buffer被新内容冲掉,也能回本地文件里查历史输出。这个"日志记录"功能在排查偶发问题时堪称神器——问题复现时顺手开了日志,事后拿着完整输出慢慢分析,不用靠脑子记。


4. 自动化脚本实战:让服务器管理从手动挡变成自动挡

4.1 脚本规划思路:哪些工作适合交给脚本

很多运维刚接触脚本时会陷入一个误区:什么都想脚本化,结果写了个大而全的"万能脚本",维护成本比手工执行还高。我的经验是,脚本化之前先问自己三个问题:这个操作我是不是每个月都要做好几次?这个操作是不是有固定的、可复现的步骤?这个操作如果出错,错误是不是有规律可循?

三个问题答案都是"Yes",才值得写脚本。放到服务器管理的场景里,最典型的适合脚本化的工作有这么几类:

  • 批量巡检:磁盘、内存、CPU负载、关键进程状态,多台机器一次搞定
  • 标准化部署:比如新机器上线、应用发布前的基础环境初始化
  • 日志处理:日志切割、过期日志清理、关键错误日志的汇总
  • 定期备份:数据库备份、配置备份,带时间戳和自动清理旧备份

4.2 核心脚本拆解一:批量服务器巡检脚本

先分享一个我实际在用的批量巡检脚本。它的逻辑不复杂,但非常实用,可以在Xshell里对多台机器分发执行,也可以直接在目标机器上跑。

#!/bin/bash # 批量服务器巡检脚本 - 检查负载、内存、磁盘 HOSTNAME=$(hostname) DATE=$(date "+%Y-%m-%d %H:%M:%S") # 系统负载 LOAD=$(uptime | awk -F'load average:' '{print $2}') # 内存使用率 MEM_TOTAL=$(free -m | awk '/^Mem:/{print $2}') MEM_USED=$(free -m | awk '/^Mem:/{print $3}') MEM_PERCENT=$((MEM_USED * 100 / MEM_TOTAL)) # 磁盘使用率(取根分区) DISK_USAGE=$(df -h / | awk 'NR==2{print $5}') echo "==== $HOSTNAME 巡检报告 ====" echo "巡检时间: $DATE" echo "系统负载: $LOAD" echo "内存使用: ${MEM_USED}MB / ${MEM_TOTAL}MB (${MEM_PERCENT}%)" echo "根分区使用: $DISK_USAGE" # 阈值判断 if [ "$MEM_PERCENT" -gt 80 ]; then echo "[WARN] 内存使用率超过80%,请注意排查" fi

这个脚本里值得展开说的是两个细节。一个是awk 'NR==2{print $5}'这个写法,它专门用来跳过df -h输出的表头行,直接取第二行的第五列(挂载点的使用率),这样输出的格式更干净。另一个是内存使用率的计算方式,把free -m的输出用awk提出来,再做整数运算,避免了free -h里带单位导致的文本解析问题。脚本本身不复杂,但每一行都是踩过坑之后的选择。

我在实际使用中,会把这套脚本放到每台机器的某个固定路径下(比如/opt/scripts/check.sh),需要巡检时,在Xshell里快速命令配置一条bash /opt/scripts/check.sh,选中会话,执行。这样一来,5台机器和50台机器的巡检难度是一样的,无非是打开的标签页多少不同。

4.3 核心脚本拆解二:日志切割与自动清理

日志文件不清理,最终结果就是把磁盘塞满,然后服务莫名其妙挂掉。手动找日志、手动删,不是不行,但很容易漏,而且删除操作有误删风险。用脚本来自动化,就没有这个烦恼。

#!/bin/bash # 日志切割与清理脚本 - 保留最近7天,超过30天强制删除 LOG_DIR="/var/log/myapp" KEEP_DAYS=7 FORCE_DELETE_DAYS=30 DATE=$(date "+%Y%m%d%H%M%S") # 对当前日志进行切割 if [ -f "$LOG_DIR/current.log" ]; then cp "$LOG_DIR/current.log" "$LOG_DIR/current.log.$DATE" > "$LOG_DIR/current.log" echo "日志已切割: current.log.$DATE" fi # 清理超过30天的日志 find "$LOG_DIR" -name "current.log.*" -mtime +$FORCE_DELETE_DAYS -exec rm -f {} \; echo "已清理 $FORCE_DELETE_DAYS 天前的日志文件" # 列出当前保留的日志大小 du -sh "$LOG_DIR"/*

这里有个运维里常见的坑必须提醒:如果你正在用tail -f跟踪日志,切割完之后,进程还握着旧文件句柄,磁盘空间并不会立刻释放。所以生产环境用这个脚本时要配合应用的重载或重启,或者用logrotate这类工具结合copytruncate参数处理。我这个脚本用的是"先复制再清空"的逻辑,就是为了解决文件句柄问题——复制出一个快照文件,然后清空原文件,进程的文件句柄依然有效,只是后续写入会从空文件继续,这样既能切割,也不会把正在运行的进程搞挂。

4.4 核心脚本拆解三:批量部署前的环境预检

有时候要上一批新机器,批量部署应用之前,最好先确认所有机器的环境一致。我在部署之前习惯跑一个快速预检脚本,几秒钟把所有机器的环境信息汇总出来,有异常直接标红。

#!/bin/bash # 环境预检脚本 - 检查系统版本、关键软件、端口、服务状态 echo "===== 环境预检: $(hostname) =====" # 系统版本 if [ -f /etc/os-release ]; then . /etc/os-release echo "OS: $PRETTY_NAME" fi # JDK版本(如果部署Java应用) if command -v java >/dev/null 2>&1; then echo "Java: $(java -version 2>&1 | head -n1)" else echo "[WARN] Java 未安装" fi # 关键端口监听 for PORT in 8080 3306 6379; do if ss -tlnp | grep -q ":$PORT "; then echo "端口 $PORT: 已监听" else echo "端口 $PORT: 未监听" fi done # 服务状态 systemctl is-active --quiet mysqld && echo "MySQL: 运行中" || echo "MySQL: 未运行"

这个脚本里有个细节值得说道:command -v java >/dev/null 2>&1,这里重定向了两个流——标准输出和标准错误都丢到空设备。因为command -v在没有找到命令时,输出会走stderr,如果不处理,脚本会在should-be-debug的时候冒出无关的报错信息,干扰预检结果的判断。在脚本里,养成分流习惯非常关键,尤其在写自动化脚本时,标准输出的内容是要被程序或者人读取的,不能混入错误信息。

有些读者可能会问,既然可以写这么复杂的脚本,为什么不用配置管理工具(比如Ansible)?我的回答是:场景不同。如果你有一套完整的配置管理体系,当然可以用Ansible一键做环境预检。但很多时候我们只有三五台机器、只做一次性的部署,为这个去搭一套Ansible太重了。Shell脚本轻量、直接、哪里都能跑,在Xshell里配合手工操作正好合适。


5. 常见问题与排查技巧实录

5.1 连接报警告的四个高频场景

Xshell连接服务器时偶尔会弹出密钥警告或主机密钥确认,常见的有四种情况。

第一种:首次连接时出现"接受并保存主机密钥"的提示,这是正常的,输入yes并回车即可。但要注意,如果你多次连接之后突然又弹出这个提示,那就要警惕了——要么是目标机器的系统重装导致主机密钥变化,要么是存在中间人风险的信号。

第二种:连接时提示"Connection refused"。多半是服务器端sshd服务没启动,或者防火墙限制了22端口。排查路径是:先确认本机网络能不能通(ping一下IP),再看22端口是否开放(telnet IP 22),最后检查sshd服务状态(systemctl status sshd)。

第三种:连接后很快就掉线。我遇到过好多次,最终定位到是服务端的ClientAliveIntervalClientAliveCountMax参数设置过于保守,导致长时间无操作就被判定为死连接踢掉了。在/etc/ssh/sshd_config里把ClientAliveInterval设置为60、ClientAliveCountMax设置为3,问题通常就能解决。注意修改后要重启sshd服务。

第四种:密钥认证失败。很多人配了密钥之后,发现登录还是要密码。最常见的原因是~/.ssh/authorized_keys权限不对,正确权限是:.ssh目录700、authorized_keys文件600、家目录不能是777。还有一个容易漏的点是SELinux的context问题,如果在CentOS上密钥认证诡异失败,记得检查restorecon -Rv ~/.ssh

5.2 批量执行命令时误操作风险控制

批量操作最危险的不是命令执行失败,而是某台机器成了"例外"。比如你以为所有机器都有/data目录,执行了一个写文件的脚本,结果其中一台机器目录结构不同,脚本直接报错,但因为你是批量贴的,可能根本没注意到这台机器的报错信息。

控制这个风险,我有两个习惯。第一,批量操作前先做一次"侦察",用上面提到的环境预检脚本确认所有机器状态一致;第二,在执行写操作、重启操作这类有风险的动作之前,先在脚本里加入break逻辑,或者人工抽查两个中间结果再全量执行。比如批量重启某个服务,可以先在一台机器上执行并确认返回正常,再去其他机器上批量执行。这不是胆小,是运维的自我保护。

另外一个技巧是用Xshell的"发送命令到所有会话"这个功能(在"工具"菜单里)。它会把你当前输入的命令同时发送到所有标签页。这个功能好用,但也最容易出事——你是在所有会话里同时执行,一旦命令有隐患,影响面是全部机器。我的建议是,这个功能只用于"查看类"命令(如dateuptime),绝不用于"变更类"命令(如rm -rfsystemctl restartreboot)。如果确实需要批量变更,请写脚本并加上必要的判断条件。

5.3 日志跟踪中断后的恢复套路

tail -f跟踪日志时,一旦网络闪断或者不小心按了Ctrl+C,再重新执行tail -f会浪费刚才跟踪的时间点。这里分享一个实用技巧:跟踪日志时不要直接tail -f,而是用tail -F。这两个参数的区别是:小写-f在日志文件被切割或重命名后不会自动追踪新文件;大写-F则会检测到文件被重命名,自动打开新的日志文件继续跟踪。这个差异在日志切割场景下非常关键。

另外,如果已经不小心中断了,想从上次看到的行继续看,可以用tail -n +行号 -f 文件名。比如日志已经有20000行,你上次看到第12000行,可以执行:

tail -n +12000 -f /var/log/myapp/current.log

这样只会输出从第12000行开始的新内容,而不是把前面12000行重新刷一遍。这个小技巧在追查慢性问题时能省不少眼睛。

5.4 键盘映射与配置文件备份

最后说一个容易被忽略但很重要的点:Xshell的配置是需要备份的。你花时间整理的会话列表、配色方案、高亮规则、快速命令,这些都在本地配置里。一旦电脑换机、系统重装,这些配置全部丢失,重新配置的代价非常高。

Xshell的配置文件通常在%APPDATA%\NetSarang\Xshell目录下,备份时把这个目录整体拷走即可。恢复时放到同样的位置。如果你需要多台电脑同步会话配置,可以考虑把这个目录纳入网盘同步(但注意生产环境的密码信息也在这个目录里,要注意保管方式)。我习惯每季度做一次配置备份,放在固定位置,这个习惯已经帮我成功避免过两次"换电脑后手搓30个会话"的悲剧。

坦白说,工具这东西,用熟了就是效率,用不熟就是花架子。Xshell在运维这条路上陪我走过了挺长时间,现在我的使用习惯基本稳定成一套组合拳:分层会话管理管连接,快速命令管高频操作,高亮集管日志噪音,Shell脚本管批量重复劳动,最后用日志记录和配置备份兜底。这套流程不一定是最优解,但确实是我踩过很多坑之后打磨出来的、适合自己工作节奏的方案。你先把自己的高频操作列出来,挑三五个最值得自动化的场景试着脚本化,再慢慢调整快捷键和会话布局,用上一两周,体感会明显不一样。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 2:39:21

Nginx日志切分方案详解:logrotate配置、Docker实践与踩坑

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

作者头像 李华
网站建设 2026/9/11 2:35:21

50V高耐压LDO替代选型:CSM7375F50SR替换TPL8031的实战要点

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

作者头像 李华
网站建设 2026/9/11 2:35:14

ML-KWS-for-MCU静态评测:边缘AI在MCU上的确定性落地实践

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

作者头像 李华
网站建设 2026/9/11 2:33:18

数据库存储兼容性专项实战:从OSCP到多路径验证

半夜两点半,手机震了。某核心业务的数据库集群报了ASM磁盘组路径闪断,紧接着又是I/O超时。等我连上跳板机一看,多路径软件里有一条链路状态是"active"但实际已经不通,存储端日志刷了一屏SCSI错误。折腾到天亮&#xff0…

作者头像 李华
网站建设 2026/9/11 2:31:27

WeChatMsg:三步搞定微信聊天记录完整存档,支持导出HTML、Word、CSV

WeChatMsg:三步搞定微信聊天记录完整存档,支持导出HTML、Word、CSV 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/G…

作者头像 李华