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

标签:linux

共 476 篇相关文章

IT 累计浏览 8,191

Linux shell脚本使用while循环执行ssh的注意事项

当用while循环结合ssh批量处理服务器时,很多人会遇到脚本在首个任务后意外终止的诡异问题。这篇文章就针对这个经典“坑”,做了一次透彻的拆解。 问题现象很明确:一个用于批量获取服务器运行时间的脚本,在循环中调用ssh命令后,只处理了第一个IP就退出了。作者分析了根因——while循环通过重定向读取IP列表文件,但ssh命令会“吃掉”这个输入缓冲区,导致循环体内部的read命令无数据可读,循环因此提前结束。 解决这个坑提供了两种清晰的思路。一种是“换条路走”,直接将while循环改为for循环,因为for循环是逐词解析命令输出,不会预加载整个文件,从而避免了输入流被ssh截获。另一种是“原路修复”,在ssh命令后加上-n参数,该参数会明确禁止ssh从标准输入读取数据(等同于将输入重定向到/dev/null),从而“归还”了被占用的输入流,让while循环能正常推进。文章给出了具体的代码示例,是一个非常实用的填坑指南。

IT 累计浏览 4,086

运维不得不知的 Linux 性能监控、测试、优化工具

系统性能专家 Brendan Gregg 在 LinuxCon NA 2014 大会上,更新了他关于 Linux 性能分析的经典演讲。这篇介绍正是基于他分享的最新内容,旨在为运维人员梳理一套实用工具集。 面对纷繁的 Linux 性能工具,Brendan Gregg 提出了一个朴素的观点:最好用的往往是那些久经考验、简单直接的小工具。文章的核心内容,就是三张清晰分类的工具全景图,分别对应性能工作的三个关键环节:监控、测试与优化。 具体来说,文章通过三张图表系统性地覆盖了 Linux 各个子系统(如 CPU、内存、磁盘 I/O、网络)在不同场景下可选用的工具。第一张图聚焦于系统可观测性,列举了用于实时监控和诊断问题的工具;第二张图总结了进行性能基准测试与评估的工具;第三张图则归纳了用于系统调优与参数设置的工具。这种结构化的梳理,直接解决了“该用哪个工具”的常见困惑。 这套工具的价值在于其历经实战检验,专注于解决具体问题。对于需要快速定位性能瓶颈或优化系统的运维人员而言,这相当于获得了一份经过专家认证的“工具菜单”,能帮助他们从眼花缭乱的选项中,高效地找到合适的武器。

IT 累计浏览 3,643

Linux,du、df统计的硬盘使用情况不一致问题

在Linux服务器上用`du`统计目录大小只有2G,但`df`显示硬盘却已占用3G甚至更多,这种不一致让不少运维同学困惑过。这篇文章就系统地拆解了背后的三大元凶。 首先是ext文件系统预留的“急救空间”。这部分空间`df`会计入已用,但`du`完全感知不到,作者指明了如何用`tune2fs`查看和调整这个数值。 其次是“幻影文件”。当文件被删除但进程句柄未释放时,`du`已经不统计它了,但磁盘块仍被`df`计算在内。文中给出了通过`lsof`查找这类文件并处理进程的方法。 最隐蔽的是第三种情况:在目录挂载新设备前,如果其中已有数据,这些数据会被“隐藏”——`du`和`df`在新设备上都看不见它们,但它们实实在在占用了原设备的空间。文章详细说明了如何安全地卸载、清理这些残留数据。 这篇文章从运维中一个看似小、却容易让人卡住的矛盾点切入,清晰梳理了原理和排障路径。理解了这些机制,下次再遇到`du`和`df`“打架”,你就能快速定位是哪一种情况,并对症处理了。

IT 累计浏览 2,980

socket消息流程介绍及其C代码实现

这篇讲的是如何用C语言完整实现一个Linux下的TCP服务器,清晰地展示了socket通信从创建到结束的全过程。作者通过一个具体的程序示例,逐步拆解了socket编程的核心流程:首先创建socket并绑定指定的IP与端口,其中还设置了SO_REUSEADDR选项来处理端口复用;接着启动监听,循环接受客户端连接;最后接收指令、执行操作并返回结果。代码中对每个环节都加入了错误处理和状态反馈,使得流程健壮且逻辑清晰。文末还附上了makefile编译脚本和通过工具测试的运行结果,让读者能直观地看到“发送-接收-响应”的完整交互。对于想要理解底层网络编程细节的开发者来说,这篇从代码到理论再到实践的梳理,提供了一个非常扎实的参考范例。

IT 累计浏览 2,308

Linux系统监控工具之vmstat详解

这篇讲的是Linux系统监控工具vmstat的深度使用指南。作者从虚拟内存的运行原理出发,详细拆解了vmstat命令的用法,并重点解读了输出中每一个字段(如进程队列r和b、内存和交换区的si/so、CPU的us/sy/id/wa等)的实际含义与诊断价值。 文章最实用的部分是结合了三个不同负载场景的案例演示。作者特别指出了一个经验细节:vmstat的首次输出往往不准确,需要观察后续结果。通过对比空负载、高CPU使用以及高CPU与高内存使用三种情况下的输出,清晰地展示了如何从数字中发现瓶颈。例如,在高内存压力案例中,swap使用率高达80%、CPU的wait%达到70%,由此推断出是内存不足导致频繁的磁盘交换,最终拖慢了整体性能。 通过升级内存至8G前后的对比数据,文章直观呈现了问题解决后的性能回归正常。整体而言,这篇文章不仅教会读者使用一个工具,更演示了如何通过关键指标进行系统健康度的“体检”与故障推断。

IT 累计浏览 4,202

Linux系统的CPU使用率和Load

这篇文章详细拆解了Linux系统中两个核心但常被混淆的性能指标——CPU使用率与系统负载(Load)。作者没有停留在概念定义,而是深入剖析了它们的统计口径与内在关联。 文章指出,CPU使用率直观反映CPU时间片的占用情况(如%user, %system, %iowait等),可通过top、sar等命令查看。而Load则是一个更综合的“压力”度量,它不仅包含正在运行和等待运行的进程(R状态),还包含了处于不可中断睡眠状态(D状态,通常因等待I/O)的任务,这是两者最关键的区别。 作者通过具体场景澄清了常见的困惑:当系统运行CPU密集型程序时,CPU使用率和Load通常会同步升高;但若是I/O密集型任务或内存不足触发Swap,你可能会看到Load值很高,而CPU使用率却并不高。对于“多少Load算高”,作者给出的经验法则是,当Load持续接近或超过CPU核心数时,就值得深入排查。 文章最后推荐了sar -u、sar -q等实用命令组合,并提供了官方手册和延伸阅读资料,帮助读者建立更完整的认知。对于想厘清性能监控基础概念的运维和开发人员,这篇内容提供了清晰、实用的梳理。

IT 累计浏览 2,799

Linux修改用户密码-交互式与非交互式

这篇文章从实际运维需求出发,介绍了Linux系统中修改用户密码的几种实用方法。作者对比了交互式与非交互式操作的核心差异,并提供了可直接复用的代码示例。 对于交互式场景,文章以`passwd`命令为例,展示了手动输入新密码并确认的完整流程,适合单机或少量用户的操作。而针对需要脚本化、批量执行的运维任务,作者重点讲解了非交互式方案:使用`chpasswd`命令通过管道一次性传入`用户名:密码`对,或结合`passwd --stdin`重定向密码输入,这两种方法都无需人工干预,特别适合自动化部署。 文章进一步探讨了更灵活的`expect`脚本方案。该脚本能模拟交互式过程,自动响应密码提示并完成修改,解决了`passwd --stdin`在某些发行版中不可用的问题。作者还贴心地解释了脚本中TCL语法的巧妙之处,即利用反斜杠将注释延续到下一行,避免`exec`重复执行。 从简单的命令行操作到自动化的脚本实现,这篇文章覆盖了从手动到全自动的完整路径,为不同场景下的密码管理提供了清晰的选择依据。

IT 累计浏览 3,918

Linux上删除空行的方法

处理文本数据时,清理空行是常见需求。这篇文章系统介绍了 Linux 下四种最常用的工具:grep、sed、awk 和 tr,它们都能轻松达成目标,但各有其巧妙的切入点。 作者没有止步于罗列命令,而是细致地指出了它们的关键差异。例如,`grep .` 和 `grep -v '^$'` 都能过滤空行;而 `sed '/^\\s*$/d'` 和 `awk NF` 则能更进一步,连只含空格、制表符等“空白内容”的行一并删去。这个细节在处理格式不规整的日志或配置文件时非常有用。 文章还特别提到了一个挺有意思的细节:在处理海量数据时,`grep .` 这种写法的执行效率通常比较高。这从侧面提醒我们,选择工具不仅要考虑功能是否满足,性能表现也是重要的考量因素。整体来看,文章通过具体的命令示例和对比,为读者提供了一个清晰实用的命令行工具选用指南。

IT 累计浏览 4,501

查询Linux系统最后重启时间的三个方法

这篇讲的是如何在Linux系统中快速查明最后一次重启时间。作者没有停留在单纯介绍命令,而是梳理了三种不同思路的方法,并对比了它们的直接程度和适用场景。 最直接的是`who -b`,一条命令就能清晰看到系统启动的日期和时间。而`last reboot`则提供了更丰富的历史视角,它通过“reboot”这个伪用户的登录记录,不仅能看到最近一次重启,还能回溯过去多次的启动历史,方便进行时间线分析。 `uptime`虽然不直接显示启动时间点,但巧妙地利用了“当前时间”和“已运行时长”这两个信息。通过简单相减,我们就能推算出启动时刻。这更像是一个实用的逆向推算技巧。 文章的价值在于,它不仅仅给了你三个“答案”,更是呈现了三种不同的技术思路:直接查询、历史追溯与间接推算。无论是运维人员想快速获取信息,还是开发者需要理解系统行为,都能从中找到适合当下场景的解法。掌握这些基本命令,能帮你更高效地与系统“对话”,摸清它的运行状态。

IT 累计浏览 3,416

Linux上的Shebang符号(#!)

这篇讲的是Linux和Unix系统里那个常见的符号“#!”。作者从它的名字“Shebang”说起,解释了这个名称其实来源于“SHArp”(#)和“bang”(!)的组合,还提到了Unix之父丹尼斯·里奇本人对命名的回忆,为这个技术细节增添了历史趣味。 文章的重点在于阐述这个符号的实际用途:它是脚本第一行的解释器指令,告诉系统该用哪个程序来执行这个文件。作者清晰地列出了几种常见情况:比如没有#!行时默认使用当前Shell;如果指定的解释器路径不存在或没有执行权限,系统会报出具体的错误信息;值得注意的是,#!后面必须写绝对路径,它不会去$PATH里自动查找。这些细节对于脚本编写和调试很有帮助。 最后,文章通过一个简单的“hello world”脚本示例,演示了从编写#!行、赋予执行权限到直接运行的完整过程,让抽象的概念变得具体可操作。对于刚接触Shell脚本或偶尔使用但想弄明白原理的开发者来说,这是一篇不错的速查小指南。

IT 累计浏览 2,234

sftp配置chroot

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

IT 累计浏览 3,454

bash代码注入的安全漏洞

这篇文章深入剖析了2014年被称为“Shellshock”的Bash代码注入漏洞。作者从继“心脏流血”后又一“毁灭级”安全事件切入,详细拆解了漏洞的检测方法与技术原理。核心在于Bash处理环境变量时,会错误地执行函数体定义之外的恶意代码——这个缺陷从Bash 1.14一直延续到4.3版本。 文章不仅解释了CVE-2014-6271和随后被发现修复不彻底的CVE-2014-7169,更关键的是,作者澄清了“该漏洞影响有限”的误解。他指出,只要服务器端应用(如PHP调用系统shell命令)会衍生出Bash子进程,就可能在传递环境变量时被注入恶意指令,这意味着许多现代系统都存在风险。 这不仅仅是对一个历史漏洞的技术复盘,更是对安全观念的提醒:看似底层的工具链漏洞,其冲击力可能远超想象,影响面覆盖了从Web服务到系统管理的广泛场景。

IT 累计浏览 3,161

Linux程序链接时-lpthread对程序正确性的影响

作者线上服务频繁卡死,CPU使用率飙升。通过pstack堆栈分析,发现线程大量阻塞在pthread_cond_signal和mutex解锁操作上,但本应轻量的unlock函数却异常消耗资源。排查指向了链接时未指定-lpthread的隐患。 文章深入剖析了这一常见陷阱背后的机制。在glibc中,pthread相关函数(如mutex、条件变量)存在“空实现”以优化单线程程序性能。只有当程序显式链接libpthread.so后,其正确的多线程实现才会覆盖libc中的符号。作者通过readelf和nm工具对比发现,动态库通过versioned symbol(如pthread_cond_signal@GLIBC_2.3.2)实现这一覆盖,而非静态库使用的weak symbol。 关键在于,若主程序或最终可执行文件未链接pthread库,即使动态库本身依赖多线程,程序启动时加载的仍是libc中的空实现,导致死锁等严重问题。作者通过复现实验证明,只要最终可执行文件链接了-pthread,即便中间动态库未链接,也能通过符号版本机制正确解析到pthread库的实现,从而规避风险。

IT 累计浏览 7,384

树莓派(Raspberry Pi)使用小记

这篇讲的是一位硬件门外汉从零开始折腾树莓派(Model B+)的实战记录。作者从淘宝采购全套配件讲起,详细分享了在Mac和Windows双系统下烧录Raspbian镜像时遇到的卡点(比如读卡器识别问题),并给出了具体的解决方案。 文章的核心价值在于其“踩坑”后的经验提炼:作者强烈建议先组装好亚克力外壳再连接网线,以保证连接稳定;在配置无线网卡环节,他指出若执行常规的`ifup wlan0`命令无效,可以尝试用`sudo /etc/init.d/networking restart`重启网络服务,并附上了亲测有效的配置教程链接。 整个流程从SSH首次登录(默认用户名pi/raspberry)、运行`raspi-config`扩展分区与修改密码,到最终实现无线网络连接,步骤清晰,提供了路由器后台查IP、终端命令操作等具体截图。对于想低成本上手Linux硬件开发的爱好者,这些从自身实践中总结的细节和排障思路,能有效缩短点亮树莓派的摸索过程。

IT 累计浏览 13,012

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

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

IT 累计浏览 12,869

关于linux内存free的一些事情

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

IT 累计浏览 2,667

Linux使用curl访问https站点时报错汇总

这篇整理了在使用Linux的curl命令行工具访问HTTPS站点时,几类最常见的证书相关报错及其解决方法。文章指出,问题的根源往往在于不同客户端(如curl、浏览器、Java程序)使用独立的证书库,而Linux的curl默认依赖位于 `/etc/pki/tls/certs/ca-bundle.crt` 的文件。 摘要列举了四种典型情况:遇到“Peer’s Certificate issuer is not recognized”时,多是由于自签名证书未被信任,解决方法是将私有CA的公钥追加到系统证书库中。而“certificate verify failed”错误,则常因本地CA证书库过旧,无法识别新签发的证书,需要下载最新的cacert.pem进行替换或使用系统命令更新。当遇到“unknown message digest algorithm”时,根源在于系统的OpenSSL版本过低,不支持如SHA-256等新算法,升级OpenSSL是必要步骤。 文章最后还对比了Java和PHP处理HTTPS的机制,指出它们拥有自己的证书库(如Java的cacerts),与系统curl的证书库相互独立。整篇文章以实战报错为线索,提供了直接的操作路径,对于解决这类环境配置问题很有参考价值。

IT 累计浏览 2,255

/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 累计浏览 3,447

Linux 安装 Nginx PHP fpm

这篇教程针对初学者在Linux下搭建Nginx+PHP环境时常遇到的依赖复杂、步骤陈旧的困扰,提供了一条从零开始、清晰简洁的实操路径。作者从建议使用Ubuntu Server系统出发,完整演示了从源码编译安装Nginx和PHP的全过程,核心步骤都配有明确的命令行代码。 文章不仅讲解了如何让Nginx和PHP-CGI协同工作的基础配置,更关键的是,它指出了临时运行与生产环境的区别,并详细说明了如何通过PHP-FPM配置守护进程,实现更稳定可靠的部署。此外,教程还涉及了单独编译安装PHP扩展模块(如sockets)这一实用技巧,使读者无需重新编译整个PHP即可按需添加功能。 整体而言,这是一篇注重实战、步骤连贯的现代指南。它强调方法的简洁性与可用性,并承诺会保持内容更新,对于希望快速搭建起标准Web开发环境的新手来说,提供了扎实且可跟随的步骤。

IT 累计浏览 2,910

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

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