IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

DevOps

共 867 篇文章

IT 2026-06-03 09:03:23 / 累计浏览 8

Ack集群Pod独占EIP实践

针对ACK集群内Pod访问公网时因共享VPC NAT网关导致带宽争抢和请求超时的问题,本文记录了为Pod绑定独立EIP的实践。问题根源在于集群内所有IP共用NAT出口,当特定Pod(如周期性HTTP检查服务)的公网请求与其他流量叠加时,易触发带宽上限。解决方案对比了两种思路:一是将Pod调度至特定子网并配置独立路由,但维护成本高;二是利用阿里云Terway网络原生支持的Pod EIP绑定功能,通过为Pod添加注解实现动态或静态EIP分配,更为直接。 实施中选择了先购买EIP再通过注解绑定的方式。关键步骤包括配置RAM权限、安装`ack-extend-network-controller`插件并启用Pod EIP能力。绑定后,控制器会创建对应PodEIP资源,确保Pod公网出口固定。文章重点讨论了实际应用中的几个问题:一是为确保应用就绪前EIP已绑定,可通过`readinessGates`或初始化容器检测;二是针对Deployment滚动更新可能导致EIP绑定冲突,最终采用`Recreate`更新策略以接受短暂流量损失,而非改为StatefulSet;三是明确了绑定EIP后Pod的内网与公网端口均可访问,但安全组规则通常已限制非必要暴露。

本机暂存
IT 2026-06-03 09:03:23 / 累计浏览 6

适合个人网站的云服务组合

作者基于近十年建站经验,总结了一套兼顾访问速度与个人成本的云服务组合方案。该方案将网站能力拆分为域名解析、接入层网关、静态托管、资源加速、动态服务及数据存储等模块,并针对性地选择了具体服务。 在接入层,利用DNSPod的分流能力将国内流量导向阿里云香港轻量服务器,海外流量则交由Fly.io的边缘网络处理,实现线路优化。静态页面由Vercel托管,静态资源使用Bunny CDN与腾讯云CDN加速,媒体附件则托管于成本极低的Backblaze B2对象存储。对于动态服务,无状态应用部署在Fly.io以利用其全球边缘节点,有状态服务则运行在VPS上。数据库方面,推荐使用TiDB Cloud或PlanetScale等Serverless托管服务以减少运维负担,并强调了通过对象存储备份数据库的重要性。 整体思路是通过合理组合不同云服务商的优势产品,在可控成本下,实现网站在全球范围内的快速、稳定访问。

本机暂存
IT 2026-06-03 09:03:23 / 累计浏览 9

类unix系统上如何快速批量重命名文件

在macOS中文环境下,系统生成的文件名常带空格,这对终端操作很不友好。这篇分享从作者的实际痛点出发,详细讲解了如何将文件名中的空格批量替换为下划线。 文中提供了两种清晰的方案:一个`rename1`函数专门处理当前目录,另一个更强大的`rename22`函数则利用`find`命令递归处理子目录。关键点在于`find`的`-execdir`选项,它确保命令在文件所在目录执行,避免了路径问题。代码示例完整,解释了参数含义,甚至考虑了文件名含特殊字符的情况。 作者在开头特别提到,这类具体场景的解决方案,如今通过向AI大模型精准提问,往往能快速找到线索或思路。这不仅是一篇实用的Shell脚本指南,也侧面提醒我们,善用AI工具能有效拓展解决实际问题的能力边界。

本机暂存
IT 2026-05-10 17:49:31 / 累计浏览 107

git submodule 与 subtree 的异同

最近有开发者在整理代码仓库、尝试将代码与数据分离时,借助 `filter-repo` 等工具,引发了关于究竟该用 `git submodule` 还是 `git subtree` 的思考。这篇文章就深入对比了这两个看似功能相似、实则内核与适用场景迥异的 Git 功能。 两者最核心的差异在于代码的“存在形式”。`submodule` 像是一个精确的指针,它只在你的主仓库中记录一个指向特定子仓库提交的链接。因此,主仓库保持精简,但每次克隆或拉取后,你都需要额外执行 `git submodule init` 和 `update` 来同步子模块内容,管理上更为“显式”。 相反,`subtree` 则采用“拿来主义”,它将子仓库的代码内容直接合并到主仓库的指定目录下,代码成为主仓库历史的一部分。你无需额外步骤就能看到并编辑全部代码,操作更直接,但代价是主仓库的历史记录会膨胀,且后续同步上游更新时可能产生更复杂的合并。 这种差异直接决定了它们的适用场景。如果你的子项目是清晰分离、需要独立版本管理且上游更新频繁的组件(例如共享库),`submodule` 提供了干净的隔离。若你只是希望将某个外部项目的某次快照代码嵌入你的项目,或对代码的便捷访问和单一仓库管理的需求高于历史清洁度,那么 `subtree` 的“一体化”方案会更简单省心。文章通过一个真实的代码整理场景,清晰地剖析了这两种方案的优劣与选择依据,能帮助开发者在项目管理和代码组织时做出更合适的决策。

本机暂存
IT 2026-05-07 14:12:03 / 累计浏览 127

OpenClaw 发展历程表:从 clawdbot 到 openclaw

这篇梳理了开源 AI 代理平台 OpenClaw 从 v2026.1.5 开始的完整演进时间线。文章不只是简单罗列版本更新,而是通过关键版本节点,勾勒出项目从“接入模型的机器人”成长为“AI 工作台”的完整轨迹。 作者指出,从 v2026.1.5 开始,项目以“clawdbot”为名稳定发布,随后在 v2026.1.14-1 至 v2026.1.16-2 期间,通过引入网页搜索、浏览器控制、Hooks 等能力,快速具备了 Agent 系统雏形。中间一段因商标压力短暂更名为“Moltbot”的插曲也被记录下来。 最重要的拐点出现在 v2026.1.29,项目正式、全链路地更名为 OpenClaw。此后,经过 v2026.2.1 的系统性收口,到 v2026.3.12 带来 Dashboard v2 与 Provider 插件架构,平台化方向日益清晰。最终,项目在 2026 年 3 月 1 日,其 GitHub Star 数超越 React 成为非聚合类项目之冠,成为影响力出圈的标志性时刻。整篇文章通过时间线与关键变化解读,生动展示了一个项目在品牌、技术与社区三个维度的协同进化过程。

本机暂存
IT 2022-09-03 23:31:12 / 累计浏览 5,084

apt 的 update 和 upgrade 命令的区别是什么?

这篇文章聊的是Linux系统更新中一个经典但容易混淆的问题:apt命令的update和upgrade到底有什么不同?作者从实际使用场景切入,指出两者的关键差异——update只负责同步软件源的元数据缓存,让你的系统知道有哪些包可以更新;而upgrade才是真正执行下载和安装升级操作。 文章进一步对比了apt和apt-get这对“兄弟命令”的表现。虽然基础功能相似,但apt update会贴心地显示可升级包的数量,apt-get则不会。更实用的是,apt upgrade可以直接升级Linux内核,而apt-get upgrade无法做到这点,必须使用更复杂的dist-upgrade命令。 作者用命令执行结果的截图和流程对比,把技术细节讲得很清楚。最后还分享了一个小观点:既然这两个命令总是配合使用,为什么不合并成一个呢?这反映了作者对命令行工具用户体验的思考。

本机暂存
IT 2021-06-13 22:41:22 / 累计浏览 2,763

分布式系统升级所遇到的问题

分布式系统升级的一大痛点是无法像单机软件那样“原子化”完成。升级期间新旧版本长期共存,如果新版本引入了数据格式变更,旧版本无法识别新格式,就会导致服务报错。特别是“向前兼容”(旧版本兼容新数据)几乎无法实现。 作者提出了一个经典的“中间版本”策略来化解这个困局。核心思路是设计一个特殊的中间过渡版本:它既能识别未来的新数据格式,又不会产生新格式数据。升级分两阶段进行:先将所有节点升级至中间版本,此时没有新格式数据产生,因此无兼容问题;等全部就绪后,再将中间版本升级至最终版本,新旧格式共存也能被新版本识别。 这样,通过引入一个精心设计的“桥梁”版本,就将复杂的向后兼容问题,转化为两个相对简单的、可逐步滚动执行的阶段,从而在完全不停服的前提下,实现了版本的平滑过渡。这个方案为解决分布式系统中的类似版本演进问题提供了一个清晰的范式。

本机暂存
IT 2021-05-27 07:41:33 / 累计浏览 1,604

迁移到 Octopress

作者将用了三年的 WordPress 博客迁移到了 Octopress。主要动机是 WordPress 太过臃肿,仅几个 PHP-FPM 进程和 MySQL 就占用了约 400MB 内存,对于访问量不高的博客来说资源消耗很不划算。Octopress 作为一个静态发布系统,以其配置简单、原生支持 Markdown 语法、模板美观等优点,迅速吸引了作者。 迁移过程主要参考了 Octopress 官方文档和几篇社区文章,几个小时内便完成了数据导出、导入和部分文章的润色,一个全新的静态博客就基本可用。不过作者也指出了 Octopress 不够完美的地方,例如插件生态较少,甚至缺少标签云这类基础功能。在迁移中还遇到了一个具体坑:更换正式域名后,生成的静态页面和 RSS 中的 URL 会新旧随机变化,导致 IFTTT 误认为文章全部更新而向 Twitter 发送了大量重复信息。清除缓存目录后问题得以解决。 总的来说,Octopress 虽不完美,但已能很好地满足作者对轻量、高效博客系统的需求。

本机暂存
IT 2021-05-24 22:42:27 / 累计浏览 2,101

CentOS 在线升级 Oracle Linux 的方法

这篇文章讲的是如何将正在运行的 CentOS 系统在线、平滑地升级为 Oracle Linux,尤其适合因 CentOS 停止维护而寻找迁移路径的运维人员。作者从实际操作出发,详细拆解了六个关键步骤:先用 rpm 强制安装 Oracle Linux 的核心发布包与红帽发布包,接着移除原有的 CentOS 相关包与 epel 源,再安装 Oracle Linux 专属的 release 包以完成源切换。随后,系统便可通过 yum 正常更新。对于需要高性能内核的场景,文章最后还提供了可选方案——安装 Oracle 打造的 UEK 内核。整个流程的核心在于巧妙利用 rpm 与 yum 工具,在不重装系统的前提下,将软件仓库彻底切换至 Oracle Linux,从而实现平滑过渡并持续获得安全更新与技术支持。

本机暂存
IT 2021-04-26 07:49:50 / 累计浏览 1,882

如何迁移一个Git仓库

作者从一次 Git 仓库迁移实践出发,指出不少人在操作时会遇到问题。文章系统梳理了三种主要的迁移方法,并剖析了其中的门道。 最常见的直接 `git push` 方法,其实只能迁移本地已有的分支引用,远端的其他分支和标签都会丢失。为了解决这个问题,文章介绍了两种更可靠的方案。一种是使用“裸仓库”(`--bare`),它只包含版本库数据而没有工作目录,非常适合用于纯粹的数据中转。另一种是“镜像仓库”(`--mirror`),它比裸仓库更进一步,保持了与源仓库的同步能力,适合需要后续持续更新的场景。 作者最终推荐使用裸仓库的方法进行一次性迁移,因为它操作直接且彻底。对于需要长期保持同步的场景,则可以选择镜像仓库。这篇文章清晰地对比了不同方法的原理与适用情况,能帮助读者根据自身需求选择最合适的迁移路径。

本机暂存
IT 2021-02-13 23:31:24 / 累计浏览 2,622

Linux 黑话解释:什么是包管理器?它是如何工作的?

这篇文章拆解了Linux系统中“包管理器”这个核心概念。它从早期Linux用户需要手动从源代码编译软件、处理复杂依赖的痛点出发,解释了为简化这一过程而诞生的“软件包”——如同将烤蛋糕所需的全部原料和配方打包成即开即用的蛋糕盒。而包管理器,就是帮你订购、安装、升级或清理这些“蛋糕盒”的智能管家。 文章清晰阐述了包管理器的工作机制:它首先与软件仓库的元数据交互并建立本地缓存,安装时从仓库下载软件包,并自动处理所有必需的依赖关系。同时,它也介绍了不同打包系统下的典型工具,比如Debian/Ubuntu系的apt-get,以及Red Hat/Fedora系的yum/dnf,不仅有命令行工具,也有像“软件中心”或Synaptic这样的图形界面。 作者最后点到即止地提到了Snap等新兴打包格式,将重点保持在帮助读者建立对传统Linux包管理体系的扎实理解上。

本机暂存
IT 2021-02-13 23:28:58 / 累计浏览 2,322

AIOps在美团的探索与实践——故障发现篇

这篇讲的是美团如何将AIOps(智能运维)落地到故障发现环节。文章从自动化运维的瓶颈说起,指出传统基于固定规则的监控在海量、多变的指标面前力不从心,而AIOps通过机器学习从数据中自动学习规则,是更进一步的解决方案。 美团规划了一条从单点能力到流程化、免干预的AIOps演进路径,并强调了SRE、开发与算法三类团队的紧密协作。他们首先聚焦于故障管理体系中的“故障发现”,因为它直接影响告警的准确性和效率。 核心实践在于解决海量时序指标的自动分类问题。团队发现,不同形态的指标(如周期型、平稳型)需要不同的告警策略。通过探索,他们最终采用卷积神经网络(CNN)对指标进行自动分类,准确率超过95%,从而能为指标智能匹配合适的异常检测算法。这不仅降低了人工配置成本,也提升了告警信噪比,为后续的告警收敛、故障定位等环节奠定了智能化基础。

本机暂存
IT 2020-02-01 16:51:06 / 累计浏览 2,463

Centos 7 SSH连接超时自动断开的解决方案

这篇讲的是在Centos 7服务器上,SSH连接因闲置超时频繁自动断开,影响操作效率的问题。 作者从自身在Centos 7下安装软件时的困扰出发,定位到问题根因在于SSH服务端的连接保活机制。当客户端一段时间无数据交互,服务端会主动切断连接。解决方法很直接:编辑SSH守护进程的配置文件`/etc/ssh/sshd_config`,调整两个关键参数。将`ClientAliveInterval`从默认的0(禁用)改为60秒,意味着服务端会每60秒向客户端发送一次保活信号;同时将`ClientAliveCountMax`保持为3次,即如果连续3次(共180秒)都没有收到客户端响应,才会真正断开连接。 完成修改后,执行`systemctl restart sshd`重启服务使其生效。此后,即使长时间不操作终端,连接也能保持稳定,不再被意外中断。这个调整方案简单有效,对于需要长时间保持SSH会话的运维或开发场景非常实用。

本机暂存
IT 2020-02-01 16:49:42 / 累计浏览 2,201

centos查找大文件

这篇讲的是在CentOS系统中快速定位那些悄悄吃掉磁盘空间的大文件。作者直接切入实用场景,给出了三个层层递进的命令技巧。 首先,文章介绍了如何用 `find` 命令高效找出系统中所有超过200MB的文件,这是解决磁盘告警问题的第一步。接着,针对“不确定是哪个目录占用空间”的常见困境,用 `du -h --max-depth=1` 命令可以直观地查看当前目录下每个子目录的磁盘占用情况。最后,为了快速锁定“元凶”,文章还展示了如何用管道将 `du` 的输出通过 `sort -n` 进行数值排序,让占用空间最大的目录一目了然。 整个过程没有复杂理论,直接给出了可复制粘贴的解决方案,非常适合系统管理员和运维人员在日常维护中快速上手操作。

本机暂存
IT 2020-02-01 15:05:01 / 累计浏览 2,282

图解4种git合并分支方法

这篇讲的是Git分支合并的“四重奏”。作者从“在Git里改变历史是可能的”这个有趣的比喻切入,把抽象的版本控制操作讲得像在不同宇宙间穿梭。 文章图解了四种核心合并方法:最常用的merge其实有三种模式——fast-forward在无分叉时直接移动指针,效率最高;`--no-ff`会强制保留合并节点,让历史更清晰;`squash`则把多个提交压成一个,适合整理功能分支。除此之外,还介绍了rebase,它通过重写提交历史来创造线性、干净的版本树;以及灵活的cherry-pick,可以像摘樱桃一样精确选择某个提交合入当前分支。 作者通过动态示意图,清晰展示了每种操作对提交历史树的影响,比如rebase会将原本分叉的提交“移植”成直线。这种可视化对比,能帮助开发者快速理解不同策略的差异:merge适合保留完整上下文,rebase擅长维护主线整洁,而cherry-pick在修复特定问题时无往不利。 掌握这些方法的区别,就像拿到了Git历史管理的完整工具箱,面对再复杂的分支拓扑也能从容应对。

本机暂存
IT 2019-08-11 11:31:51 / 累计浏览 2,404

系统工程师的自我修养- sed篇

这篇文章系统地梳理了传统UNIX环境下的sed工具,从底层原理讲起,特别强调了其基于pattern space逐行处理的核心机制,与GNU版本做了区分。作者清晰地界定了sed与awk的适用场景:sed长于行内的强大替换与编辑,适合做“文本编辑器”;而awk更擅长列的提取与格式化,是“信息处理器”。 文章没有堆砌所有命令,而是直接从实战出发。在讲解了如何用SELECTION(行号、正则)精确选取目标文本后,通过一系列电话簿、路径、配置文件的示例,演示了打印(-p)、插入(i)、追加(a)和替换(c)这些最常用的操作。作者的讲解紧密结合了sed“读取-处理-输出”的工作流程,比如在解释`-n`选项时,就回溯到默认输出pattern space的原理,让读者知其然更知其所以然。 整体来看,这是一篇不求大而全,但求小而精的实践指南。它把sed的核心骨架和最实用的“几把刷子”清晰地呈现出来,非常适合想要快速掌握sed行处理精髓的系统工程师作为入门和速查参考。

本机暂存
IT 2019-07-26 14:08:20 / 累计浏览 1,640

Mac下处理PC以^M结尾的文本

这篇文章解决的是在 Mac 系统下处理来自 Windows 的文本文件时,行尾出现多余 `^M` 字符(回车符)的常见问题。作者首先清晰地对比了不同系统的行末符差异:Unix/Linux 使用换行符 `\n`,老版本 Mac OS 使用回车符 `\r`,而 Windows 则使用回车换行组合符 `\r\n`。这种不匹配正是导致文本在 Mac 终端或编辑器中显示异常的根源。 文章接着提供了非常直接且实用的解决方案。作者引用 Stack Overflow 上的讨论,指出使用 `awk` 命令并指定记录分隔符 `RS` 为 `\r\n`,就能正确解析并处理这类文件,例如 `awk -v RS='\\r\\n' foo.log`。这个方法比手动替换字符更高效,也更精准。 对于开发者而言,理解这些底层差异并在处理跨平台数据时选择合适的工具,是提升效率、避免“踩坑”的关键。本文从现象到原理再到具体命令,提供了一次简明而完整的技术点拨。

本机暂存
IT 2019-06-28 13:25:29 / 累计浏览 1,801

Linux 运维:系统服务管理

这篇讲的是Linux服务器运维中那些令人头疼的“重复学习”时刻——系统服务管理的方式总是随着技术演进而变迁。作者从自己给老款MacBook Pro安装Ubuntu 19.04桌面版出发,先吐槽了新版apt命令依然不够顺手,并演示了如何用aptitude替换掉默认的vim-tiny、补装net-tools这些桌面版缺失的基础工具。 文章的重点其实落在CentOS的服务管理上。作者并排展示了两种新老方式的实操命令:一边是逐渐被淘汰的SysV风格,用`chkconfig`查看、关闭或删除服务;另一边是主流的systemd,通过`systemctl`来列出、禁用服务状态。他甚至演示了如何暴力删除阿里云相关服务的残留文件,再用`reset-failed`清理干净——这恰恰是运维中常遇到的“清理战场”场景。 如果你正被服务器上那些幽灵般的服务困扰,或者面对不同发行版时对管理命令感到混乱,这篇文章给出的对比和具体步骤,就像一份可以直接“照着做”的速查手册。它不空谈理论,而是把折腾的过程和关键命令直接摊开,对实际排障很有参考价值。

本机暂存
IT 2019-06-27 13:56:47 / 累计浏览 2,503

如何在 Linux 上复制文件/文件夹到远程系统?

这篇讲的是 Linux 用户日常一定会遇到的场景:怎么把本地的文件或文件夹高效地复制到远程服务器上。作者没有停留在只讲最常用的 `scp`,而是系统梳理了四种主流方案——`scp`、`rsync`、`pscp` 和 `prsync`,并详细解释了它们各自的设计思路和适用情况。 比如,`scp` 作为原生命令,安全可靠,适合快速单次传输;`rsync` 则胜在支持增量同步与断点续传,尤其适合大文件或经常变动的目录。而 `pscp` 和 `prsync` 是进阶工具,专门解决“同时把文件推送到多台服务器”的批量运维需求,提供了超时控制等实用特性。文章不仅列出了这些差异,还给出了可直接复制的命令行示例,从基础用法到多文件、多目录的复制场景都有覆盖。 作者强调这些方法都经过了实际环境的测试,确保读者拿来就能用。对于需要在不同生产环境中选择合适传输工具的开发者或运维人员来说,这份整理提供了一个清晰的决策参考。

本机暂存