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

标签:linux

共 476 篇相关文章

IT 累计浏览 2,035

linux中c语言errno的使用

这篇讲的是Linux环境下C语言编程中errno的实战用法。作者从errno的基本特性切入,强调了它只在函数返回异常时才有意义,避免读者陷入盲目检查的误区。 文章的核心部分对比了两种将错误码转换为可读信息的方式:strerror函数允许将错误描述拼接到自定义输出中,适合构建详细的日志或用户提示;而perror函数则更直接,一行代码就能将错误消息附带到标准错误流。作者还提醒,并非所有库函数(如gethostbyname)都会设置errno,这是个容易忽略的细节。 针对errno在多线程编程中的可靠性,文章通过剖析errno.h头文件的宏定义,明确指出在启用可重入库(_LIBC_REENTRANT)的现代环境中,errno已被实现为线程局部变量,保证了安全性。最后附带的一段检测代码,让读者能轻松验证自己编译环境的相关定义是否生效。

IT 累计浏览 5,877

emacs改变人生

这是一篇典型的个人观点与经验分享类文章。作者从自己从vim转向Emacs的经历出发,坦承标题“改变人生”带有夸张成分,但通过深入学习的过程,他重新诠释了“装逼”的正面内涵:即一种持续钻研、不安于现状的“折腾”精神。 作者详细描述了Emacs入门时面临的配置复杂、快捷键繁多等挑战,并以此引申出核心观点:在知识高度细分的现代社会,精深比泛学更重要。他认为,Emacs所代表的“折腾”过程——不断挖掘疑问、动手解决问题、打造个性化工作流——正是培养这种专精能力的体现。这种精神能带来持续的新鲜感,避免固步自封。 文章进一步将这种个人技能的学习,与理解世界运行的法则联系起来。作者以科技企业家多为程序员出身为例,指出通过编程(如同配置Emacs)制定规则的过程,也是构建个人认知系统、理解万物法则的方式。最终,文章以呼吁“不要放弃挣扎”收尾,将技术学习提升到了人生态度的层面。

IT 累计浏览 7,087

Linux C语言编程学习材料

这篇整理了Linux C语言编程从入门到精通的完整学习路径。它把资源清晰地划分成三个阶段:快速入门用《Linux C编程一站式学习》打基础,长期深耕则推荐了C Primer Plus、经典数据结构教材以及APUE等“圣经”级著作。最硬核的部分在于高级网络编程资源,不仅覆盖了《Linux高性能服务器编程》等通用指南,还深入到Apache、Nginx的模块源码分析,以及MySQL内核、Redis实现剖析等具体高性能组件的“深水区”。 作者显然意图为志在开发高性能后端的工程师,构建一个从语言基础、系统编程到具体中间件实现的扎实知识栈。资料列表兼顾了经典纸质书与电子文档,尤其像Redis源码分析系列博客、PHP内核手册等,提供了贴近工程实践的切入点。整份清单像一份精心设计的“技术地图”,让学习者能按图索骥,逐步构建起支撑大规模服务的底层能力体系。

IT 累计浏览 3,033

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

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

IT 累计浏览 2,048

实用命令行工具详解(二)—siege

这篇讲的是Linux下的负载测试工具siege如何模拟真实用户行为。文章开篇就点明了它与Apache ab的关键区别:siege能从URL列表随机请求,更适合仿真多用户并发负载,而ab则在追求极致性能基准时更精确。 文章详细展示了siege的多种实战用法。比如,你可以用 `siege -c 500 -r 50 -f url.txt` 模拟500个用户重复请求50次;也可以用 `-t10M` 参数让压测持续10分钟。它甚至能从服务器的access.log中提取URL,用来复现历史访问场景,这对于重现问题非常实用。 对于测试结果,文章逐一解读了输出指标,像“Transaction rate”即我们常说的QPS,“Response time”反映网络连接速度。最后部分还梳理了关键参数,如 `-c` 控制并发量、`-d` 设置请求间隔、`-l` 保存日志等,帮助读者根据自身环境灵活配置。 整体上,这篇文章没有停留在理论介绍,而是通过具体命令和输出示例,手把手地带读者用起来。对于需要快速评估Web应用压力承受能力的开发者来说,这是一份清晰的速查手册。

IT 累计浏览 3,049

Linux内核文件系统挂载分析

作者从mount系统调用的实现过程入手,聚焦于Linux 3.2.0内核,拆解文件系统挂载的底层机制。文章首先厘清了两个核心数据结构:每个挂载的文件系统都对应一个vfsmount,它维护着文件系统在哈希表、父子关系链表以及名字空间中的位置;path结构则封装了目标挂载点与父文件系统的关联。 核心分析围绕一连串的函数调用展开:系统调用服务例程将参数复制进内核后,便交由do_mount处理。它通过kern_path定位挂载点,随后分发至do_new_mount进行常规挂载。后者的关键步骤是通过do_kern_mount获取源文件系统的vfsmount,并经由do_add_mount执行合法性检查,最终调用graft_tree进行装载。 装载的精髓体现在attach_recursive_mnt中。该函数建立父子映射:让子文件系统的vfsmount指向父vfsmount,并链接到父系统中的挂载点dentry。最后的commit_tree则将这一切“落地”:把新vfsmount置入正确的名字空间链表、全局哈希表以及父文件系统的子文件系统列表中。整个过程清晰地揭示,挂载在内核层面的本质,正是将源文件系统的vfsmount结构以严格的层级关系,嫁接到目标文件系统的目录树之中。

IT 累计浏览 3,801

修改Linux网卡连接速度

这篇讲的是作者如何发现并解决内网Linux服务器上传速度异常缓慢的问题。服务器文件传输速度只有1MB/s,作者怀疑是网卡工作模式所致。通过 `ethtool eth0` 命令检查,果然发现网卡速度被锁定在了10Mb/s的低速模式,即使它支持100Mb/s。 针对这个问题,作者使用了 `ethtool -s eth0 speed 100 duplex full` 命令,将网卡强制设定为100Mb/s全双工模式。调整后再次检查,网卡已成功切换到新的工作状态。最终实测文件传输速度达到了10MB/s,性能恢复正常。 这篇文章简洁清晰地展示了一个常见的网络性能问题排查过程:从现象(速度慢)到诊断(查网卡模式),再到解决(调整速率参数),并验证了效果。对于运维人员或遇到类似网络瓶颈的开发者,这个用 `ethtool` 手动调整链路参数的方法,是一个直接有效的参考方案。

IT 累计浏览 1,819

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 累计浏览 1,995

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 累计浏览 1,716

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

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

IT 累计浏览 2,795

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 累计浏览 2,199

有用的linux命令——chattr

这篇讲的是Linux系统里一个容易被忽略但超实用的命令——chattr。 我们平时用的rwx权限,是操作系统层面的规定。但chattr管理的是ext文件系统赋予文件的“隐藏属性”,它有个关键区别:一旦设置,连root用户也要遵守规则,比如用chattr +i给文件加上“i”属性后,这个文件就变得“坚不可摧”:不能被删除、修改、重命名,也不能创建硬链接。文章通过实际命令截图演示了这个过程,哪怕用rm强制删除也会报错。 作者从这个防误删的实用场景切入,清晰说明了如何用lsattr查看属性、用chattr设置属性。对于运维人员或需要保护关键配置文件的开发者来说,这相当于给重要文件上了一道“系统保险锁”,能有效防止手滑或脚本误操作导致文件丢失。

IT 累计浏览 4,944

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 累计浏览 8,407

Linux 常见高危操作

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

IT 累计浏览 4,363

推荐几本 Unix/Linux 经典书

这是一份从入门到内核的 Unix/Linux 经典书单。作者结合自身阅读经验,为不同阶段的学习者梳理了那些历经时间考验的“案头必备”。他认为,在信息爆炸的今天,与其浪费时间在平庸的书籍上,不如直接啃透经典。 对于初学者,文章推荐了《Running Linux》和《Linux in a Nutshell》作为起步。而系统管理方面,两部“大部头”——《UNIX and Linux System Administration Handbook》与《Essential System Administration》被形容为该领域的百科全书。网络原理则首推《TCP/IP Illustrated, Volume 1》,无论职位是运维还是开发,理解底层协议都至关重要。 进入编程领域,从 Kernighan 与 Pike 合著、体现 Unix 哲学的《The UNIX Programming Environment》,到 Richard Stevens 的《APUE》和《Unix Network Programming》这两部巨著,构成了进阶路径。最后,针对渴望深入内核的读者,《Operating Systems: Design and Implementation》与《Understanding the Linux Kernel》是绕不开的经典,尽管后者被坦言“学习过程痛苦”,但能帮助构建完整的内核图景。 作者的核心观点是:阅读这些英文经典,不仅能更高效地掌握技术,更是为职业生涯打下坚实基础。这些书是真正能放在手边反复翻阅的伙伴。

IT 累计浏览 1,730

跟我学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 累计浏览 2,711

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

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

IT 累计浏览 3,207

Linux大棚版vimrc配置—V2.0版本

这篇讲的是Linux大棚博客更新的Vim编辑器配置方案V2.0。作者基于V1.0版本一年来的用户反馈与自身实践,对原有的vimrc配置进行了五项关键升级,旨在为中文开发者提供一个更顺手、更智能的编码环境。 核心改动聚焦于实战体验的优化:一是新增了对Go语言的原生支持,让使用Vim编写Go代码的开发者开箱即用;二是调整了文本格式化策略,通过精心设置的`formatoptions`参数,在智能换行、注释自动处理与中文多字节字符支持之间找到了更好的平衡点,同时注释掉的`textwidth`也给了用户更多自由度;三是禁用了方向键的跨行行为,以保持光标移动的直觉性;四是改进了配置文件中所有注释的表述,使其更清晰易懂。 整个配置方案并不追求大而全,而是体现了作者“解决具体问题”的思路。它从语法高亮、缩进、搜索匹配到自定义快捷键(如快速注释/取消注释、清理行尾空格),覆盖了日常编码的高频操作。这份配置更像是一个精心调校过的起点,开发者可以此为基础,按需调整,打造出属于自己的高效Vim工作流。

IT 累计浏览 4,294

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 累计浏览 4,294

linux单机根据ip查看流量

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