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

DevOps

共 871 篇文章

IT 2014-11-21 23:46:50 / 累计浏览 1,838

linux shell中”2>&1″含义

这篇讲的是Linux Shell中一个容易让人困惑的细节:标准错误重定向“2>&1”应该放在什么位置。作者从命令`/home/admin/demo.sh >/dev/null 2>&1 &`切入,直接点明了1代表标准输出,2代表标准错误,而“2>&1”的作用就是让标准错误也输出到标准输出指向的地方——这里是`/dev/null`,实现静默运行。 文章的核心是对比了两种写法产生的截然不同的效果。`command > file 2>&1`会成功将标准输出和错误都重定向到文件中,因为错误重定向是在输出重定向到文件之后执行的。而`command 2>&1 >file`则会导致只有标准输出进入文件,错误信息仍然打印到终端。 为了证明这一点,作者调用`strace`追踪了系统调用,清晰地展示了两者执行序列的差异:前者先打开文件,再依次重定向输出和错误;后者则先复制了当时的输出描述符(指向终端),然后才重定向输出到文件。这个底层的实现细节,彻底解释了为何重定向顺序至关重要。 掌握这个小知识,能避免在编写脚本时因日志丢失或终端输出混乱而踩坑。Shell的执行顺序,确实值得多留一个心眼。

本机暂存
IT 2014-11-06 23:59:43 / 累计浏览 1,639

Xen 虚拟机的 NAT 网络配置

这篇讲的是Xen虚拟机配置NAT网络的实用指南。当只有一台物理服务器且仅有一个公网IP,却需要运行多个虚拟机上网时,传统的桥接模式就显得无能为力了——它把每个虚拟机都直接暴露在外部网络。而NAT模式能完美解决这个问题,让多个虚拟机共享这个公网IP访问外部,同时外部无法主动访问它们,形成一个更安全的内部网络。 文章从桥接模式的局限性说起,清晰对比了NAT模式的适用场景。核心配置步骤其实不复杂,但有几个关键点:需要修改Xen的主配置文件(xend-config.sxp),将网络和VIF脚本切换到NAT和vif-nat;然后为每个虚拟机指定一个自定义的内部IP。一个巧妙之处在于,Xen自带的network-nat脚本已经自动处理了IP转发和iptables规则,省去了手动设置的麻烦。 作者特别强调了初始环境要“干净”,因为Xen的脚本在复杂网络环境下可能配置失败。整个配置流程逻辑清晰,从主机到虚拟机逐层设置,对需要隔离网络或节省公网资源的管理员来说,是一份很直接的操作参考。

本机暂存
IT 2014-10-21 19:35:54 / 累计浏览 5,200

网络基础:路由表、默认网关和掩码等

这篇讲的是作者从一个具体的网络故障出发,剖析了路由表、子网掩码和默认网关的核心作用。问题很简单:两台服务器IP在同一子网,但其中一台的子网掩码被误配为255.255.255.224,这导致B在ping A时,根据错误的掩码计算,认为A不在本地网络,从而将数据包发给了网关。文章清晰地拆解了这一过程,说明了只要B端网关配置无效,通信就会失败。 作者接着将问题延伸,讲解了路由决策的通用原则。比如,当主机配备多网卡时,若为每个网关都设置了默认路由,系统在回包时可能因无法决策而随机选择路径,造成网络时断时通的诡异现象。对此,文章给出的实用解决方案是:要么为特定外部网络添加精确路由,要么去掉非主要出口网卡的默认网关配置,避免路由冲突。这些细节对于理解日常网络配置中的陷阱非常实用。

本机暂存
IT 2014-09-22 22:00:12 / 累计浏览 2,015

linux下boot空间不足解决方法

这篇解决了一个常见的Linux系统痛点:当初为/boot分配了500MB独立分区,但随着多次系统升级,旧内核不断累积,最终导致空间耗尽、升级失败。 文章作者从实际遭遇出发,先展示了`/boot`目录下堆积的旧内核文件(如vmlinuz、initrd.img等),并通过`uname -a`确认当前运行的内核版本。核心解决方案是使用`apt-get remove`命令有选择地卸载旧版本内核。作者特别提醒,刚升级的新版本可能不稳定,建议保留1-2个旧版本以备回退。 文中通过`dpkg`命令列出了已安装的所有内核镜像包,然后演示了如何移除一个旧内核(linux-image-2.6.35-25-generic),并展示了操作完成后GRUB引导菜单自动重建的过程。最终,通过`df`命令验证,/boot分区成功释放出35MB空间(整个操作可释放约139MB),系统得以恢复正常升级。对于卸载后残留的“deinstall”状态,文章指出重启后再次执行卸载命令即可彻底清理。

本机暂存
IT 2014-09-17 13:37:30 / 累计浏览 4,159

Windows与Linux文件系统互访的几种方法

这篇讲的是如何让Windows和Linux像使用本地磁盘一样直接互访文件系统。作者从实际开发中的痛点出发:Windows编辑代码、Linux编译运行,来回拷贝太麻烦。文章指出,虽然Windows有CIFS、Linux有NFS,但二者不互通,好在Linux上已有CIFS的实现。 文章主要介绍了两种通过CIFS协议实现互访的具体方法。一种是用开源的Samba软件在Linux上搭建服务端,配置共享目录并设置用户后,Windows资源管理器就能像访问局域网共享一样,直接访问Linux文件系统,甚至可以映射为本地盘符。另一种方法是让Linux作为客户端,去挂载Windows已经共享出来的目录。作者以Windows XP为例,详细展示了如何开启共享,并在Linux下使用mount -t cifs命令将远程共享挂载到本地目录。 文章最后简单对比了两种方式的适用场景:Samba方案更适合需要频繁、便捷地从Windows侧访问Linux文件的工作流;而从Linux挂载Windows共享,则更适合那些主要工作空间在Windows,偶尔需要在Linux环境下编译或调试的场景。

本机暂存
IT 2014-09-15 14:16:17 / 累计浏览 1,740

在一个列表里选定主机名后直接 SSH 登陆

运维或开发人员常会遇到这样的场景:即使有配置管理工具,仍免不了需要手动SSH登录单台服务器排查问题。反复查IP、复制、切换窗口的操作既繁琐又容易出错。 这篇文章介绍了一个简洁实用的解决方案:一个名为warp的Bash脚本。它的核心思路很直接——将常用服务器的主机名或IP地址整理在一个文本文件中,通过运行脚本即可调用Vi/Vim进行选择式登录。用户只需在列表中上下移动光标,按下回车便能自动完成连接,省去了手动输入的麻烦。 warp的设计亮点在于其灵活性。配置文件格式自由,支持使用注释(如“#”或“--”)对服务器进行分组和说明,既清晰又便于维护。工具本身仅是一小段脚本,无需复杂安装。更巧妙的是,如果同时选中多行,它还能配合csshx工具实现批量操作,进一步提升效率。 这种将机械性操作自动化的思路,虽然工具简单,却能有效优化日常工作流,减少重复劳动。对于经常需要管理多台服务器的团队来说,是个不错的效率小工具。

本机暂存
IT 2014-08-13 12:33:03 / 累计浏览 2,821

Linux系统巡检常用命令

这篇讲的是Linux系统日常巡检的“工具箱”,作者把运维中最常敲的几十条命令按用途做了梳理。从用`uname -a`和`cat /proc/cpuinfo`摸清系统底牌,到用`free -m`、`df -h`、`top`实时监控内存、磁盘与进程状态,再到借助`netstat`、`iptables`、`ifconfig`快速扫描网络连通性与安全设置——几乎覆盖了服务器健康检查的所有关键维度。 文章特别指出,像`uptime`和`cat /proc/loadavg`这样的组合,能让你同时看清系统负载与运行时长;而`ps -ef`配合`w`命令,既能看到全部进程,也能锁定当前登录的活跃用户。对于需要回溯问题的场景,`last`查看登录日志、`dmesg`排查硬件启动信息这些命令也都没落下。整份清单直接贴进终端就能用,省去了新手翻文档的时间,对需要快速上手Linux运维的人尤其友好。

本机暂存
IT 2014-07-15 23:43:20 / 累计浏览 4,979

tailf and tail -f

这篇文章从一个实际使用场景出发:用`tailf`查看大文件的新增日志时,发现没有输出,而改用`tail -f`却能立即显示。由此引出了对这两个命令核心机制差异的深入剖析。 文章指出,二者的关键区别在于读取起点和检测文件变化的系统调用不同:`tailf`从文件开头逐步读取,通过文件名调用`stat`来检查文件变化;而`tail -f`则从文件尾部开始,通过已打开的文件描述符使用`fstat`进行检测。这个底层差异导致了具体行为的不同,比如在文件被删除时,`tailf`能感知到,而默认的`tail -f`则不知道。 此外,文章还详细解读了`tail -F`选项(大写F)的工作原理——它通过周期性地尝试重新打开文件来兼顾对文件名变化的跟踪,是一个在`tailf`和`tail -f`之间的实用折中。最后通过`strace`跟踪的输出,直观展示了`tailf`使用`stat`与`tail`使用`fstat`的调用区别。 对于经常需要监控日志文件的运维和开发人员来说,理解这些区别能帮助他们在不同场景下选择最合适的工具。

本机暂存
IT 2014-07-15 22:54:53 / 累计浏览 1,729

推动而不是靠拉动

这篇文章从团队协作中的常见现象切入,对比了“被动拉动”与“主动推动”两种截然不同的工作模式。作者通过两个生动的对话场景,描述了在大公司环境里,员工容易养成“等待指令”的习惯——不问背景、不管目标,只求完成分派的任务。这种“工具人”思维在创业团队中则会成为致命短板。 核心观点鲜明:创业需要成员具备主人翁意识,主动为项目全盘负责,推动资源与协作,而非被动等待安排。文章指出,推动者最终能驾驭工具,而只会被拉动的人可能永远只是工具。作者还分享了团队推行的实践,比如基于项目的短站立会,以及强制提前沟通延期原因的机制,旨在通过制度帮助成员从“等任务”转向“要资源、明目标、控进度”。 这篇短文对技术团队管理者和一线成员都有启发,它点明了在快速迭代的环境里,积极主动的协作文化往往比单纯的技术能力更能决定项目的成败。

本机暂存
IT 2014-05-27 23:01:41 / 累计浏览 8,444

Linux 常见高危操作

这篇讲的是Linux系统里那些容易被忽视却可能导致灾难性后果的操作。作者从日常运维中常见的危险命令入手,清晰地指出了三个典型“雷区”。 首先是直接操作设备文件。像`echo " " > /dev/sda`或`dd if=/dev/zero of=/dev/sda`这样简单的命令,能瞬间破坏整个磁盘的文件系统与数据,且几乎无法恢复。其次是极具误导性的`rm -rf /$SOME_DIR_TOBE_DEL/`,一旦变量未赋值,就会变成删除根目录的“终极指令”。最后是重定向使用不当,错误的写法可能覆盖`/dev/null`,导致系统标准输出和错误流混乱,影响全局服务。 文章没有复杂的理论,而是用具体命令示例揭示了风险根源——对命令和系统底层文件缺乏敬畏。它提醒每一位Linux使用者,在键入回车前务必确认命令含义,因为这些操作往往没有“撤销”选项。

本机暂存
IT 2014-05-27 22:52:42 / 累计浏览 3,029

cpuspeed和irqbalance服务器的两大性能杀手

这篇讲的是作者在性能测试中发现服务器CPU频率异常的问题。经过排查,发现根源是irqbalance和cpuspeed这两个服务在作怪。 理论上,irqbalance能智能分配中断以提升性能或降低功耗。但作者指出,在实际的服务器环境中,它反而会扰乱CPU的负载均衡,成为性能瓶颈。而cpuspeed服务,即便在BIOS中设置了最高性能模式,它依然可能强行干预并锁死CPU的主频,对追求稳定高性能的服务器而言是个大坑。 文章给出的解决方案非常直接:彻底停用并禁用这两个服务。作者还进一步分享了服务器运维的一个精简思路:在`/etc/rc3.d/`目录下,只保留crond、sshd、rsyslog和network等必要服务的启动链接,将其他所有服务移出默认启动列表,按需手动开启。这种做法能最大程度减少后台服务对核心业务的干扰。 对于遭遇类似性能迷雾的运维人员,文中提供了具体可执行的命令和优化思路,避免了“CPU跑不满”的常见坑。

本机暂存
IT 2014-05-10 21:24:14 / 累计浏览 2,802

服务器批量执行工具 PSSH

运维或开发同学经常需要面对这样的场景:当服务器数量达到几十甚至上百台时,如何高效地执行统一操作?这篇文章介绍了一个实用的命令行工具——PSSH(Parallel-SSH)。作者从管理一个拥有60多台Ubuntu执行节点的Oracle Gird Engine集群的实际经验出发,展示了如何利用PSSH来简化批量管理工作。 文章详细演示了PSSH的几个核心命令:用pssh批量执行命令查看所有服务器状态;用pscp将文件同时上传到多台服务器;用pslurp从服务器集群批量下载文件到本地不同目录;以及用prsync保持开发机与生产服务器间的数据同步。每个命令都配有清晰的输入输出示例,比如展示五台服务器(grid01至grid05)的同步操作结果,非常直观。 除了展示功能,文章也提到了PSSH的一个替代方案:对于不排斥Python的开发者,也可以使用Fabric来编写脚本实现类似的批量任务管理。这为不同技术背景的读者提供了选择参考。对于管理大量服务器的运维工作来说,这个工具是个不错的选择。

本机暂存
IT 2014-05-10 21:23:40 / 累计浏览 1,749

跟我学Rsyslog

这篇讲的是日志管理工具Rsyslog的上手指南。作者从日志管理的重要性切入,提到业界热门的ELK三件套虽强,但自己更偏好快速上手的方案,由此引出Linux传统日志工具Syslog及其配置逻辑——通过Facility和Severity来分类和路由日志。面对Syslog在功能和性能上的不足,作者选择了当前多数发行版默认的Rsyslog。 文章重点在于快速实践。作者以CentOS为例,演示了通过RPM安装Rsyslog、关闭旧Syslog服务、启用调试模式等基础步骤。核心部分结合一个具体场景——“将多台Web服务器的access日志集中到一台App服务器”,详细拆解了Rsyslog的工作流程(输入、过滤、输出)。通过配置示例,讲解了如何在Web服务器端用`imfile`模块读取本地日志,并通过TCP发送;在App服务器端则开启TCP接收、使用`omfile`模块和模板来汇总存储。文中还提及了`StateFile`的持久化策略,以及利用`omprog`模块进行更高级处理的可能性。 作者最后也指出,Rsyslog的主要缺点在于版本间的兼容性差异较大,使用时需留意文档。整体而言,这是一篇注重实操、逻辑清晰的入门教程,适合希望快速部署集中式日志管理又不想陷入复杂生态的运维或开发人员。

本机暂存
IT 2014-04-29 22:34:12 / 累计浏览 2,742

Ctrl+S导致Putty或Xterm命令行无响应问题

这篇讲的是一个让很多用命令行的人都会心头一紧的瞬间:在PuTTY或Xterm里习惯性地按下Ctrl+S想保存什么,结果终端突然毫无反应,好像死机了。作者一针见血地指出了问题的根因——Ctrl+S在终端环境下默认触发了XOFF流控制,这会暂停终端的一切输出,但其实按键和命令都在后台默默执行。 文章给出了解决这个“假死”问题的三个层次方案。最直接的是立刻按下Ctrl+Q,重新打开流控制,就能“唤醒”终端。想从根源上杜绝,可以在.bashrc配置文件中通过stty命令禁用这个快捷键的XOFF功能。而最巧妙的是“一箭双雕”的方案:不仅禁用了Ctrl+S的终端控制功能,还能通过额外的配置,让它在VIM编辑器里重新变回保存文件的快捷键,完美契合了用户的手指肌肉记忆。 对于经常在命令行和编辑器之间切换的工程师来说,这篇文章提供了从急救到根治,再到功能自定义的全套思路,能有效解决这个烦人的操作习惯冲突。

本机暂存
IT 2014-04-07 22:54:21 / 累计浏览 4,323

no no no. 不要使用kill -9

这篇文章直接警告程序员不要滥用 `kill -9`。Perl 语言专家 Randal Schwartz 用“不要用收割机来修剪花盆里的花”来比喻,指出强制发送 SIGKILL 信号会粗暴地终止进程,使其完全丧失清理现场的机会。 具体来说,进程将无法关闭网络连接、删除临时文件、通知子进程或重置终止状态。这就像强行中断一场手术,可能会留下损坏的文件或系统状态不一致,为后续运行埋下隐患。文章强调,正确的做法是优先发送更温和的 SIGTERM(kill -15),给进程一段处理善后的时间。如果它无响应,再考虑发送 SIGINT(kill -2)或 SIGHUP(kill -1)。只有在确认程序本身存在严重缺陷、完全无法响应时,才应该使用 kill -9 这最后手段。 对于那些“卡住”的进程,文章建议先使用 `strace`、`ltrace` 或 `gdb` 等工具诊断其卡死原因,而不是直接“处决”。其核心观点是,通过信号与进程协作,是系统稳定性和可维护性的基础;粗暴地“一杀了之”恰恰掩盖了程序本身可能存在的问题。

本机暂存
IT 2014-04-07 22:45:49 / 累计浏览 5,591

Ubuntu 下Hash校验和不符问题的解决

这篇文章讲的是Ubuntu用户常遇到的一个头疼问题:运行`apt-get update`时弹出“Hash校验和不符”的报错。作者分析后指出,这通常并非系统故障,而是网络不稳定或连接特定软件源时数据同步出错导致的。 针对这个由网络引发的根源,文章给出了两种切实的解决方案。一种是为APT配置HTTP代理,具体是通过Privoxy将已有的SOCKS代理转换过来,并给出了安装和配置的关键步骤,比如修改`config`文件中的`forward-socks5`行。作者还分享了一个意外发现:直接使用`apt-fast`工具来替代`apt-get`进行更新,往往能绕过这个问题,省去了配置代理的麻烦。 对于同样被这个网络“幽灵”报错困扰的Ubuntu用户来说,这篇从实际踩坑出发的文章,提供了一套清晰的诊断思路和可立即尝试的解决办法。

本机暂存
IT 2014-03-20 23:06:07 / 累计浏览 4,328

web业务尽快升级到centos 6.4的理由

这篇讲的是,面对中国网络环境复杂、丢包率高的现实挑战,Web业务尤其是CDN系统如何通过升级操作系统来获得更优的网络性能。作者从CentOS 6.4的内核变化出发,重点剖析了几个关键的TCP协议层补丁。 其中,RFC2988bis补丁将SYN包丢失后的重试时间从默认的3秒大幅缩短至1秒,显著降低了首次连接的延迟。而调整初始拥塞窗口(initcwnd)和接收窗口(initrwnd)大小,则减少了Web短连接场景下必要的TCP交互轮次,提升了数据传输效率,文章也给出了具体的配置命令。此外,Proportional rate reduction补丁优化了丢包后的恢复策略,使得拥塞窗口的减少更为平滑,降低了平均传输延迟。 这些补丁主要源自Google的实践,能够直接提升业务在弱网环境下的响应速度和稳定性。对于运维和后端开发人员而言,这是一次了解底层网络优化如何落地到具体操作系统版本的实用参考。

本机暂存
IT 2014-03-20 23:05:36 / 累计浏览 4,314

linux单机根据ip查看流量

这篇讲的是在双线机房环境下,如何精确统计Linux单机上不同IP(如电信、网通)的独立流量。作者从实际运维痛点出发:一台机器绑定多个IP时,系统默认的流量监控工具无法区分各IP的收发数据量。通过调研无果后,他选择用SystemTap编写了一个内核级脚本,直接挂钩TCP的收发函数来按IP累加数据包大小。脚本运行后能清晰列出每个IP的接收与发送千比特数。作者也坦诚说明,该方案目前仅支持TCP流量统计,若服务器涉及UDP服务则数据不准,且SystemTap需要安装调试信息包。整体方案简洁实用,为类似场景提供了一个可直接复用的轻量级诊断思路。

本机暂存
IT 2014-03-20 23:03:09 / 累计浏览 4,199

SSH日常用法小例

这篇讲的是如何将SSH从“会用”提升到“用得顺手”。作者从最基础的命令行登录出发,逐步展示了如何通过配置文件别名、公钥认证和代理转发等一系列技巧,一步步把繁琐的登录过程简化到极致——最终实现“一次配置,处处免密”。 文章特别对比了传统密码登录与公钥认证在便利性上的巨大差异。对于文件传输,作者不仅介绍了最常用的scp命令,并解释了-r和-C参数的作用,还推荐了sftp这个基于SSH的交互式工具,为不同场景提供了解决方案。其中,ssh -A代理转发用于跳板机的思路也很有启发性。 作者用实际例子告诉我们,掌握这些小技巧,能让你在连接和管理多台服务器时,省去大量重复输入密码的时间,大幅提升日常工作效率。对于需要频繁远程操作的开发者和运维人员来说,这是一份非常实用的快速参考。

本机暂存
IT 2014-03-20 23:00:07 / 累计浏览 2,491

大量小包的CPU密集型系统调优案例一则

这是一篇典型的方案/架构类文章,作者从一个处理大量小数据包的生产系统调优实践出发,详细分享了将单网卡流量从100M提升至230M(预估可达480M)且CPU负载保持均衡的完整优化路径。 核心方案围绕着“硬件选型与内核调优”展开。作者首先强调了必须使用支持MSI-X和多队列的网卡,这是性能提升的硬件基础。在软件层面,他将操作系统从RHEL 5升级至RHEL 6.1,以利用其内核对Google RPS/RFS补丁的支持,从而将软中断负载均衡到多个CPU核心。此外,文章还详细说明了如何手动关闭irqbalance服务,并通过设置smp_affinity将网卡队列中断精确绑定到指定CPU,以实现更精细的负载控制。对于发送方向,作者也提到了利用内核2.6.38引入的XPS特性进行优化。 整个调优过程有很强的数据支撑,作者展示了调优后单网卡承载15万/秒数据包、系统负载为0且各CPU核心均保有余量的生产环境截图,并解释了因网卡队列数与CPU数不匹配时,为何不能简单将中断广播到所有CPU,而需要采用物理/固定模式进行一对一绑定。文章为类似网游、CDN等“小包量大”的场景提供了一套可落地的系统性能挖掘手册。

本机暂存