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

DevOps

共 867 篇文章

IT 2015-01-25 22:26:39 / 累计浏览 4,467

以Facebook为案例剖析科技公司应有的工具文化

这是Facebook早期员工王淮Harry哥分享的一篇关于“工具文化”的深度见解。文章以Facebook的内部实践为案例,阐述了一个核心观点:优秀的技术公司应当将内部工具的开发和维护视为至关重要的战略投资。 文章详细介绍了Facebook如何通过两个核心工具组(研发工具组与网站支持工具组)来支撑其工程效率。例如,从新员工快速获取开发环境,到代码提交前的自动化规范检查、可视化的代码审查(Phabricator),再到无需改代码即可配置的灰度发布系统和多线程更新机制。这些工具的设计哲学是将优秀实践自动化、固化,以“不要让我思考”的方式提升整体效率。文章还提到,这种文化甚至延伸至用户客服、招聘面试和绩效评估等环节。 作者强调,工具文化的益处是“杠杆效应”的累积,能显著提升人均产出、降低协调成本(如用户达1亿时客服团队仍不到20人)。然而,最大的挑战在于如何吸引顶尖工程师加入工具团队。为此,公司需要用具体效率数据说话,并在企业文化中反复强调工具的战略价值。文章最终指出,对于度过初创期的公司,持续打造优秀的内部工具,其重要性甚至不亚于寻找下一个伟大的创意。

本机暂存
IT 2015-01-24 23:17:38 / 累计浏览 1,822

怎么清除Windows远程桌面连接的历史记录

这篇讲的是如何彻底清除Windows系统中远程桌面的连接历史记录。问题的根源在于,系统为了方便会记住我们连接过的主机IP和端口,这些信息其实都存储在注册表的特定路径下。对于注重隐私的用户来说,这可能会带来不必要的顾虑。 作者提供了一个清晰直接的解决方法:通过“运行”打开注册表编辑器,导航至“HKEY_CURRENT_USER/Software/Microsoft/Terminal Server Client/Default”这个分支。在这个位置下,所有用过的连接记录都会以MRU0、MRU1这样的字符串值形式存在,它们对应的数值就是具体的地址和端口。只需将这些条目全部删除,下次打开远程桌面连接时,那个历史下拉列表就会变得干干净净。 文章不仅说清了操作路径,还贴心地附上了每一步的截图指引,让不熟悉注册表操作的用户也能跟着做,避免误删其他关键数据。对于那些需要管理多台远程服务器、又想保持连接列表清爽的运维人员或IT管理者来说,这是一个实用且有效的清理技巧。

本机暂存
IT 2015-01-19 23:44:58 / 累计浏览 8,984

Bash脚本15分钟进阶教程

这篇教程源自谷歌内部广受欢迎的“Testing on the Toilet”材料,系统梳理了编写健壮、可维护的Bash脚本的进阶技巧。它从脚本安全的开篇三行代码讲起,解释了如何通过`set -o nounset`和`set -o errexit`来避免引用未定义变量和忽略执行失败这两个常见坑点,并指出了其例外情况。 文章的核心在于提升代码质量。它强调了函数在增强可读性和结构化方面的作用,并推荐将大部分代码封装其中。在变量处理上,提倡善用`local`和`readonly`注解来明确作用域和防止意外修改。此外,教程对比了几种Bash语法:推荐用更清晰、不易混淆的`$()`替代反引号,以及用功能更强大的双中括号`[[]]`替代单中括号`[]`进行条件测试,并列举了后者在字符串比较和逻辑运算上的优势。 整篇文章没有空泛的理论,而是通过具体代码示例,直接提供了能立刻用在生产脚本中的最佳实践,帮助读者从“能跑就行”迈向编写更专业、更可靠的自动化脚本。

本机暂存
IT 2015-01-17 00:10:17 / 累计浏览 2,202

sftp配置chroot

这篇讲的是如何利用Linux自带的sftp,通过配置chroot来搭建一个既安全又方便的文件传输服务。作者从传统FTP密码明文传输、配置繁琐等痛点出发,直接给出了基于OpenSSH的sftp解决方案。 核心步骤围绕修改sshd配置文件展开,重点是启用`internal-sftp`并设置`ChrootDirectory`,将用户“关”在家目录这个“根”下。文章很细致,不仅区分了按组(推荐)和按用户两种配置方式,还特别强调了权限管理这个容易踩坑的地方:chroot目录的所有者必须是root,权限为755,后续需要由root在目录内创建子目录并授权给sftp用户,这样用户才能正常读写。 整体来看,它清晰地展示了如何用一个更安全(基于SSH)、更易管理的方式替代传统FTP,特别适合对安全性有基本要求、但又不想配置复杂专业FTP服务的场景。最后附带的客户端连接示例,让整个方案从服务器到客户端都形成了闭环。

本机暂存
IT 2015-01-11 23:25:06 / 累计浏览 2,521

lftp利器与一次故障分析

作者分享了自己在使用lftp进行FTP目录同步时,从发现神器到“捅了大篓子”的完整经历。文章的核心是介绍lftp这款工具强大的`mirror`命令,它能像rsync一样递归同步整个目录,极大提升了原本繁琐的FTP文件发布效率。 作者通过一个实际的脚本故障,展示了使用中可能遇到的风险。在一次运行中,脚本因连接失败和`cd`命令返回550错误而中断,但脚本并未停止,导致本地开发目录被错误地同步到了线上正式环境,造成了严重事故。 经过排查,问题根因在于:lftp的命令流默认是顺序执行,即便中途失败也会继续向下。作者最终找到了一个简洁的解决方案:在每个lftp命令后使用`&&`操作符链接,确保只有上一个命令成功才执行下一个,从而彻底避免了目录切换失败后的误操作。 这篇文章从实际踩坑出发,生动展示了lftp的便利性及其潜在风险,并用几处符号的改动给出了一个高效的防御性编程技巧,这个经验教训很值得借鉴。

本机暂存
IT 2015-01-04 23:20:13 / 累计浏览 4,902

Kubernetes – Google分布式容器技术初体验

这篇讲的是作者对Google开源容器集群管理系统Kubernetes的初步体验。文章从分布式服务框架的配置管理、调度等核心需求出发,审视了Kubernetes如何解决这些痛点。 作者重点分享了几个关键概念的实际感受。比如,作为基本部署单元的Pod,以及通过Replication Controller实现自动化的实例管理与故障恢复——定义好副本数后,系统能自动维持服务实例的总量稳定。针对分布式系统的服务发现难题,Kubernetes的Service通过一个固定的虚拟IP来代理一组Pod,并解耦了具体的配置服务。 不过,体验过程并非一帆风顺。作者指出,目前Kubernetes版本迭代快、文档滞后,推荐新手直接使用GCE(谷歌计算引擎)环境以减少障碍。同时,他也客观指出了现有实现的一些局限,比如Service发现依赖环境变量、大规模服务下的iptables性能挑战,以及生产环境所需的高可用性仍有待验证。 总体来看,文章清晰地勾勒出了Kubernetes令人兴奋的设计理念与自动化能力,同时也坦诚地探讨了其当前阶段面临的环境易变性与成熟度挑战,为有意尝试的开发者提供了一份非常务实的体验报告。

本机暂存
IT 2015-01-04 22:58:08 / 累计浏览 12,948

Linux 性能监控、测试、优化工具

系统性能专家 Brendan Gregg 在 LinuxCon NA 2014 大会上更新了他的经典演讲。这篇文章梳理了他演讲中关于 Linux 性能工具的核心图谱,最大的变化是新增了测试与优化两大部分,形成了一个完整的工具体系。 作者将复杂的性能问题拆解为三个清晰的场景:日常监控、基准测试与主动调优。针对每个场景,都提供了对应的工具图谱。例如,监控部分聚焦于观察系统运行状态,使用 perf、bpftrace 等工具追踪内核与用户层活动;测试部分则关注量化系统能力,展示了 fio、sysbench 等用于磁盘、网络和数据库的基准工具;优化部分提供了性能调优的视角,介绍了 perf stat、turbostat 等用于分析瓶颈并指导调整的工具。 整篇文章没有泛泛而谈,而是通过三张详尽的工具关系图,直观地展示了如何在不同阶段选择合适的工具。它帮助读者快速建立起 Linux 性能分析的全局观,知道在什么问题下该去哪里找对应的“武器”。

本机暂存
IT 2014-12-30 12:47:01 / 累计浏览 12,749

关于linux内存free的一些事情

这篇讲的是Linux下最常用也最容易被误解的free命令。文章从一个最常见的命令入手,拆解了其输出中每一列的含义,特别是新手容易混淆的“buffers”和“cache”——前者是写缓存,后者是读缓存。 作者指出,判断系统内存是否充足,关键看“-/+ buffers/cache”这一行,而非仅看“free”列。因为可供应用程序使用的内存总量实际上是“free + buffers + cached”的总和。文章还解释了一个经典困惑:为何系统已开始使用Swap,却可能并未“内存不足”?这是因为在内存紧张时,系统会尝试释放旧的缓存,但有时释放不及时,便过渡到了交换区。 此外,文章也演示了如何使用`sysctl`手动释放缓存,并坦诚这通常是“治标不治本”的操作,缓存会在系统运行中再次积累。这对于运维人员日常排查“内存告警”误报、理解系统真实资源状况有直接的指导意义。

本机暂存
IT 2014-12-28 23:51:45 / 累计浏览 3,064

vsftp安装以及本地用户和虚拟用户认证方式配置

这篇讲的是如何搞定VSFTP这个配置起来让人头疼的服务,作者从源码安装开始,一路记录了在本地用户和虚拟用户两种认证模式下的配置要点,并特别总结了几个容易踩到的“坑”。 文章从64位系统编译时库路径错误这个常见问题切入,给出了直接修改脚本的解决方案。在本地用户配置部分,重点解释了新版VSFTP中chroot目录权限冲突的问题,以及如何通过`allow_writeable_chroot=YES`参数巧妙解决。虚拟用户认证则详细介绍了从创建用户列表、生成加密数据库文件到配置PAM模块的全流程。 最实用的是作者分享的排查经验:当遇到认证失败并提示数据库文件无效时,通过对比正常机器生成的db文件,定位到了db4-utils安装或文件格式问题。这些从实际部署中总结出来的细节,对避免重复踩坑很有帮助。

本机暂存
IT 2014-12-08 23:51:03 / 累计浏览 1,980

丰田生产方式的启发

这篇讲的是,作者从对丰田生产方式(TPS)的学习中,提炼出对软件开发行业极具借鉴意义的几条核心原则。 文章指出,丰田方式最深刻的一点在于,生产线上的工人不仅负责执行,更被赋予理解、思考并持续改进工艺的责任和权力。这使得生产线本身充满了自下而上的优化活力。反观软件行业,许多团队仍将“改进”视为少数“技术牛人”的职责,而普通开发者可能只愿完成分配好的重复任务。 作者进一步阐述,丰田方式还要求每个员工必须了解自己工作的上下游,这既提升了协作效率,也增强了团队的应变能力。这恰恰戳中了软件开发中“过度专业分工”的痛点,例如程序员不懂运维、客服与技术部门沟通鸿沟,导致协作成本高昂。 此外,丰田将质量责任内化到每个生产环节,赋予每个工位为质量问题停线的权力,并用“五个为什么”深挖问题根因。这些原则被作者强烈主张应移植到软件开发中:产品经理、开发、测试、运维都应对最终产品质量负责,面对线上问题必须刨根问底,而非敷衍了事。 最后,丰田方式甚至要求机器具备错误自检和报警能力。作者联系自身经历,指出程序需要具备“健康运行”的自我监控能力,而不仅是完成功能。这些源自生产线的朴素智慧,其核心是“不把人当成机器的附庸”,对于追求质量和效率的任何行业,都值得深思。

本机暂存
IT 2014-12-06 20:48:28 / 累计浏览 4,722

github 上 Fork 别人的项目后的常用的操作指南

作者从自己Fork Mojo项目的亲身经历说起,分享了在GitHub上协作开发时几个非常实用的操作。如果你Fork项目后直接push代码遇到403权限错误,文章指出了关键症结:需要在本地的.git/config文件中,将远程URL格式修改为包含你GitHub用户名的形式(如`https://用户名@github.com/用户/项目`),通过HTTP认证解决权限问题,无需折腾SSH密钥。 针对如何将修改贡献给原作者,文章详细演示了在GitHub界面发起Pull Request的流程。重点在于清晰地描述你的修改意图和内容,方便原作者理解和评估合并。 最后,文章解答了如何与上游原项目保持同步的问题。通过在本地添加原作者的远程仓库地址(git remote add),然后执行fetch和merge操作,即可将原项目的最新代码合并到自己的本地分支,之后再推送到自己的GitHub仓库。整篇文章聚焦于解决实际协作中的具体痛点,步骤清晰,对想参与开源项目的开发者来说是一份不错的入门指引。

本机暂存
IT 2014-12-06 20:30:27 / 累计浏览 4,324

Windows、RedHat、CentOS和Ubuntu操作系统生命周期

这篇从常被忽略但至关重要的“操作系统生命周期”视角出发,对比了Windows、RedHat、CentOS和Ubuntu四大主流系统的支持周期差异。 文章直接列出了具体数据:Windows XP曾拥有长达12年的生命周期,而后续版本的寿命标注为“X”,暗示其策略可能发生变化;RedHat Enterprise Linux(RHEL)则以稳定的7年周期作为企业级支持的标杆;Ubuntu方面,标准版仅提供9到18个月的短暂支持,但其LTS(长期支持)版本将支持期延长至5年,早期版本如8.04 LTS则为3年。 作者通过这些时间线清晰地揭示了核心差异:RedHat以最长的稳定周期服务于需要可预测性和长期维护的企业环境;Ubuntu的LTS版本在社区活跃度与长期支持之间取得了平衡;而Windows的生命周期策略则显得更为多变。对于运维人员和IT决策者而言,理解这些周期是进行系统规划、保障安全更新以及管理技术债务的关键依据。

本机暂存
IT 2014-12-03 23:49:16 / 累计浏览 1,303

LINUX VPS主机之间快速复制备份搬家

很多站长和开发者都遇到过这样的场景:买了新VPS,或者需要为旧站点创建备份,怎么高效地把网站数据从一台Linux服务器“搬”到另一台?这篇文章就专门解决这个痛点,给出了几种在VPS之间快速迁移目录的实战方案。 文章重点剖析了两种主流方法。第一种是“边打包边传输边解压”的流式处理,一条`tar | ssh | tar`命令就能完成,无需在源服务器生成中间压缩包,适合追求极致效率的运维场景。第二种是更直观的`scp -r`命令,它支持目录递归复制并能看到传输进度,对新手更为友好。作者还补充了用SCP远程解压、以及用WGET传输的变体思路。 文章的核心价值在于,它没有停留在命令罗列,而是指出了关键差异:两者耗时相近,但体验不同。tar管道方式隐蔽高效但无进度反馈,SCP则过程透明。读者可以根据自己对操作可视化和脚本化的需求来灵活选择,为服务器数据迁移提供了实用的运维工具箱。

本机暂存
IT 2014-12-03 00:02:03 / 累计浏览 2,203

/var/spool/clientmqueue目录文件清理

这篇讲的是服务器磁盘空间告急时,如何清理那个让管理员头疼的 /var/spool/clientmqueue 目录。 作者从一次服务器/var分区占用率飙升至90%的排查经历说起,定位到罪魁祸首正是clientmqueue这个邮件队列目录。文章的痛点很明确:当文件多到一定程度时,常规的 `rm` 命令会因“Argument list too long”错误而失灵。 解决方法很巧妙,利用了管道的力量。文章给出了两种场景的清理命令:有权限时用 `ls | xargs rm -f`,需sudo时则用 `find ... | xargs rm -f`。不过,真正的价值不止于清理。作者还深入解释了根因:这些“垃圾文件”其实是cron任务的标准输出,在sendmail未启动的情况下被默认保存为了邮件。最治本的方案是在crontab任务中直接添加输出重定向,从源头杜绝此类问题。 整个过程从发现问题、遭遇报错,到找到方法并深挖原理,是一套完整的技术踩坑与排障指南。

本机暂存
IT 2014-12-02 23:53:27 / 累计浏览 1,404

Puppet 的类参数传递

这篇讲的是如何通过为类添加参数来提升 Puppet 配置的灵活性。作者从使用 ENC(外部节点分类器)管理 Puppet 的实践出发,发现仅传递一个全局的 role 参数在面对频繁修改的配置时,操作起来并不方便。 因此,他考虑引入类参数。文章通过修改前后的代码对比,清晰地展示了这一转变:将原本硬编码在 `nginx::loadbalancer` 子类中的 `iplist` 变量,提升为父类 `nginx` 的一个参数,并逐层传递下去。这样在 ENC 中,就可以直接为 `nginx` 类指定 `iplist` 的值,实现了配置的灵活注入。 文章还总结了三个关键要点: ENC 传递的参数值需要从父类层层传递到真正使用的子类;在 ENC 中为类传参时,类声明必须采用哈希形式;而接受参数的类在调用时,则必须使用资源声明式的语法,而不能再使用 `include`。这个方法巧妙地利用了 Puppet 的类继承和参数特性,在保持 ENC 输出结构相对简洁的同时,显著提高了配置管理的灵活性。

本机暂存
IT 2014-12-02 00:04:44 / 累计浏览 4,065

中大型移动互联网公司技术架构选择

这篇讲的是中大型移动互联网公司在技术架构演进中的核心选择与思考。作者从多年经验出发,提出架构需快速部署、天然可扩展、高度自动化与量化,并尽可能保持同构化,以降低整体复杂度。 文章以一张手绘架构图为脉络,自上而下逐层剖析。核心方案强调:在接入层通过定制网络套件屏蔽客户端网络细节;业务层力求统一语言(如Java),避免异构系统带来的重复建设与兼容问题;RPC与队列需框架化,配置管理推荐ZooKeeper;日志系统选用scribe或Kafka,并指向HDFS/HBase进行数据分析。监控与跟踪系统则分别推荐了Ganglia、Nagios与Zipkin。 更底层,文章讨论了使用Docker/LXC进行硬件虚拟化,构建统一的PAAS资源控制与运维平台。在开发流程上,强调从自动部署、测试框架、Maven编译、Sonar代码质量到GitLab代码托管的完整工具链支撑,甚至包括用于故障反思的Post-mortem系统。 作者的最终目标很明确:通过这套从用户层到代码生成层的体系化设计,让开发、测试与运维工作尽可能自动化、标准化,从而支撑起业务的快速迭代与稳定运行。

本机暂存
IT 2014-12-01 23:51:11 / 累计浏览 2,843

EXT文件系统误删除数据恢复指南

这篇讲的是Linux运维中一个让人头疼的常见问题:使用EXT文件系统的服务器上误删了重要文件,该怎么办? 作者直入主题,没有冗长的背景铺垫,而是直接切入两种最关键的自救场景。第一种情况是“虚惊一场”——文件虽然被rm命令删除了,但只要某个进程(比如正在写日志的tail)还持有该文件的句柄,就有办法“复活”。文章详细演示了如何通过/proc这个伪文件系统,定位到进程的文件描述符,然后直接将数据拷贝出来。这里的诀窍在于理解Linux内核“延迟释放”的特性。 第二种情况则更为棘手:文件已被彻底删除,进程也已退出。此时,作者推荐了extundelete这个针对EXT3/EXT4的专用工具。文章像一份操作手册,从关键的第一步“umount分区以防数据被覆盖”,到安装、使用工具扫描并恢复被删目录,步骤清晰。特别强调了在进行任何恢复操作前,使用dd命令对整个磁盘分区做镜像备份的必要性,这是避免二次损坏的最后防线。 整篇文章的价值在于其极强的实操性。它没有空谈理论,而是用具体的命令行和输出结果,为处于慌乱中的技术人员指明了两条清晰、可行的恢复路径。对于管理Linux系统的工程师来说,这篇文章更像是一份值得收藏的应急手册。

本机暂存
IT 2014-11-30 23:28:07 / 累计浏览 2,962

实用命令行工具详解(五)—crontab

这篇讲的是Linux系统里“定时任务”的核心工具——crontab。文章从crontab的基础概念和命令格式讲起,比如常见的-l(查看)、-e(编辑)、-r(删除)等操作。 但真正的干货在后半部分的应用实例。作者没有停留在理论,而是直接给出了大量贴近实战的crontab写法,从“每晚21:30重启Apache”到“每周一到周五下午5点发邮件”,覆盖了日常运维和开发中高频出现的定时需求。特别是对时间字段(分、时、日、月、周)的各种灵活组合进行了拆解,例如“0 23-7/2,8 * * *”这种稍显复杂的表达式,都附有清晰的说明。 通过这些具体例子,文章把抽象的cron表达式变得具体可见,非常适合需要快速查阅或学习如何编写定时任务的读者。

本机暂存
IT 2014-11-30 23:27:39 / 累计浏览 2,261

实用命令行工具详解(四)—netcat

这篇讲的是Linux下的网络调试利器netcat(简称nc),它被称作“网络工具中的瑞士军刀”,能通过TCP和UDP在网络中读写数据。文章具体拆解了它的三个实用场景:建立监听端口进行基础通信、利用管道实现文件快速传输,以及通过-w参数设置连接超时以控制会话时长。每个场景都提供了清晰的客户端与服务器端命令示例,比如用`cat local | nc localhost 9999`来推送文件内容,或用`nc -w 10`来自动中断空闲连接。这些例子展示了如何将netcat与重定向、管道结合,在脚本或临时调试中灵活使用。

本机暂存
IT 2014-11-30 23:27:11 / 累计浏览 2,520

实用命令行工具详解(三)—ngrep

这篇文章介绍的是一个实用的网络抓包工具——ngrep。当httpclient请求出现线上问题却难以直接调试时,ngrep提供了一种轻量、高效的抓包分析方案。 与经典的tcpdump相比,ngrep更像是网络版的grep。它聚焦于“搜索”特定数据包内容这一核心功能,依赖libpcap库,能识别TCP、UDP等主流协议。对于开发者而言,它的最大优势在于简单直接:可以用类正则表达式直接匹配数据包中的文本内容。 文章通过一个捕获HTTP POST请求的实例,展示了ngrep的典型用法。例如,使用`sudo ngrep -q -W byline "(POST).*"`命令,就能快速过滤出所有POST请求,并清晰显示其完整的Header和Body内容,这对分析接口调用问题非常直观。文中还详细解读了各个参数,如`-q`静默模式、`-W byline`格式化显示、`-d`指定网卡等,帮助读者按需组合,精准定位问题流量。 总的来说,ngrep将强大的grep理念带入了网络诊断领域。对于需要在线上环境快速排查HTTP请求异常、进行轻量级协议分析的场景,它是一个上手快、效率高的得力工具。

本机暂存