
linux
文章平均质量分 92
林开落L
专注眼前
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
小白也能懂的 ELF 文件:从理论到上手
ELF是Linux系统中程序的标准打包格式,包含可执行文件、共享库和目标文件。文章用通俗易懂的比喻将ELF文件比作"带说明书的玩具盒子":文件头是标签,程序头表是组装说明书,节头表是零件清单。详细解析了ELF的三层结构(文件头、程序头表、节头表),并提供了实用的readelf和objdump命令查看各部分内容。最后总结了ELF文件的运行流程:系统先读取文件头验证格式,再按程序头表加载到内存,最后从入口地址开始执行。通过生动的比喻和实操命令,让读者能快速理解ELF的核心概念和查看方法。原创 2025-08-17 21:52:29 · 393 阅读 · 0 评论 -
库制作与原理(下)
本文深入探讨了编译链接过程中ELF文件的结构与原理。主要内容包括: 目标文件(.o)是编译过程的产物,采用ELF格式存储二进制代码。通过gcc -c命令可生成单独的目标文件。 ELF文件分为四种类型:可重定位文件(.o)、可执行文件、共享目标文件(.so)和内核转储文件。ELF由四部分组成:ELF头、程序头表、节头表和节区。 从源代码到可执行文件的过程:首先将源代码编译为目标文件,然后将多个目标文件的节区合并形成最终可执行文件。 可执行文件加载时,系统会根据节区属性将多个节合并为段(segment),合并原原创 2025-08-17 18:51:56 · 963 阅读 · 10 评论 -
库的制作与原理
摘要: 本文介绍了Linux系统中硬链接和软链接的区别与应用。硬链接只能针对普通文件创建,不能用于目录(系统自带的.和..路径除外),这是因为允许目录硬链接可能导致路径环问题。而软链接则可以通过ln -s命令为目录或文件创建。文章还演示了硬链接的创建与删除操作,并解释了系统对目录硬链接的限制原因。 第二部分讲解了C语言库的制作原理,包括静态库(.a)和动态库(.so)的区别。静态库在编译链接时会将代码直接嵌入可执行文件,而动态库则在运行时加载。文章提供了创建静态库的示例代码和基本操作步骤,展示了如何将多个.原创 2025-08-16 08:31:27 · 2341 阅读 · 20 评论 -
深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理
本文将深入解析Linux文件系统的核心机制,重点探讨Ext系列文件系统的设计原理。文章从磁盘物理结构入手,详细介绍了磁盘的CHS寻址方式(磁头、柱面、扇区)及其与LBA逻辑块地址的转换关系。通过分析磁盘的逻辑抽象过程,揭示了文件系统如何将三维物理结构转化为一维线性空间进行管理。 在文件系统层面,文章重点讲解了"块"的概念(由8个512字节扇区组成4KB块)、分区原理(以柱面为最小单位)以及inode索引节点的核心作用。inode作为存储文件元信息的128字节数据结构,包含文件权限、大小、原创 2025-08-05 18:13:56 · 919 阅读 · 1 评论 -
深入理解基础 IO:从 C 库函数到系统调用的全景指南
文章摘要:本文深入探讨文件操作的核心概念与技术实现,从C语言库函数到Linux系统调用。首先解析文件的广义与狭义定义,指出Linux中"一切皆文件"的设计哲学。随后详细讲解C语言文件IO操作,包括fopen、fread/fwrite等函数的使用技巧,以及标准输入输出流的工作原理。最后深入系统调用层面,演示如何通过open、write、read等底层接口直接操作文件,并对比库函数与系统调用的差异。全文通过多个代码示例,帮助读者全面理解文件操作的实现原理和应用场景,掌握从用户态到内核态的文件原创 2025-08-04 21:44:11 · 816 阅读 · 3 评论 -
手把手教你写 Shell 命令行解释器,看透 Shell 工作原理
简易Shell实现原理 本文介绍了一个简易Shell的实现方法,主要包含以下核心功能: 命令行处理: 通过fgets获取用户输入 使用strtok分割命令参数 实现类似[root@localhost]#的提示符 命令执行机制: 区分内建命令(如cd)和外部命令 内建命令直接执行 外部命令通过fork+execvp创建子进程执行 关键实现: 环境变量管理 工作目录跟踪 命令返回码处理 该实现展示了Shell的基本工作原理,包括进程创建、命令解析和环境管理等核心概念。 代码约150行,适合学习Linux系统编程原创 2025-08-03 23:41:05 · 1031 阅读 · 0 评论 -
进程控制:从创建到终结的完整指南
} } 3.2.2 waitpid:更精准的等待 waitpid提供了更灵活的控制: pid_t waitpid(pid_t pid, int *status, int options); // 参数: // pid: 指定子进程PID(>0),或等待任意子进程(-1) // status: 同wait // options: 选项(如WNOHANG表示非阻塞) // 返回值: // 成功返回子进程PID(WNOHANG时可能返回0),失败返回-1 关键特性: 阻塞与非阻塞:通过WNOHANG选项实现非阻塞原创 2025-07-31 21:54:41 · 862 阅读 · 6 评论 -
进程调度:CPU 的 “智能排号系统”(零基础版)
本文用餐厅排号系统类比Linux进程调度机制。CPU像厨师处理排队进程(顾客),O(1)调度算法则如智能排号系统。关键点包括:1)普通优先级(100-139)与nice值(-20~19)通过"120+nice"公式对应,实现进程优先级调控;2)运行队列分活动/过期队列,均按140级优先级分组;3)bitmap位图快速定位最高优先级进程,确保调度效率恒定(O(1))。该设计兼顾公平性与高效性,通过nice值灵活控制进程资源占用程度。原创 2025-07-26 23:02:35 · 943 阅读 · 2 评论 -
零基础看懂 Linux 进程:从概念到实战
《进程入门指南:从零理解计算机核心概念》摘要 本文以通俗语言讲解进程的核心知识: 本质:进程即运行中的程序(如浏览器、微信),通过ps aux或/proc目录可查看 关键特性: 唯一PID标识和父进程PPID 通过fork()创建子进程,父子进程独立运行 五大状态: R(运行/就绪)、S(可中断睡眠)、D(不可中断睡眠)、T(暂停)、Z(僵尸进程需及时处理) 优先级:PRI值决定CPU使用权,可通过NI值调整(范围-20~19) 并发原理:CPU通过快速切换进程上下文实现"同时运行"效果原创 2025-07-26 20:43:26 · 587 阅读 · 0 评论 -
从调试小白到高手:GDB调试工具完全指南
GDB调试工具从入门到精通:掌握Linux程序调试的核心技能 本文系统介绍了GDB调试工具的使用方法。首先强调调试前必须使用-g选项编译生成Debug版本程序。基础部分详细讲解了GDB的核心操作:启动调试、查看代码(list)、设置断点(break)、单步执行(next/step)、查看变量(print)等。进阶部分介绍了cgdb分屏工具、变量监视(watch)、函数堆栈查看(backtrace)等高效调试技巧。通过示例代码演示了如何定位循环逻辑错误、追踪变量变化等常见调试场景,帮助开发者快速掌握Linux原创 2025-07-18 21:27:25 · 965 阅读 · 3 评论 -
从“善变的甲方”到协作自如:Git版本控制入门指南
Git是一款强大的分布式版本控制工具,能有效解决代码管理中的三大痛点:数据安全、协作开发和版本回退。文章介绍了Git与代码托管平台(Gitee/GitHub)的关系,详细解析了Git的核心概念(仓库、工作区、暂存区、本地/远程仓库)以及基本操作流程(初始化、add、commit、push、pull)。针对多人协作场景,重点讲解了冲突解决方法和.gitignore文件的妙用。通过Git,开发者能够轻松管理项目版本,实现高效团队协作,是程序员必备的开发工具。掌握Git的基本命令,就能显著提升开发效率和代码安全性原创 2025-07-18 16:58:41 · 917 阅读 · 0 评论 -
Linux深度探索:进程管理与系统架构
要是删掉这个路径,并不影响进程,因为你删掉的是磁盘上的文件,而进程启动时,这个程序的拷贝已经在内存了,所以删掉并不直接影响这个进程,当然后面可能会有影响,后面再说。举个场景,你在北京,你的朋友在南京,今天你两在QQ进行聊天,当你们两个聊天的时候,请帮我解释一下,今天你通过键盘输入了一个“你好”,那么“你好”这个字符串信息是如何展现在你朋友的显示器上的?pid_t是系统提供的,不是C语言的double这些,但Linux也是由C语言写的,这pid_t虽然是个系统级的类型,但它其实就是个int。原创 2025-04-21 18:59:03 · 2517 阅读 · 20 评论 -
Linux第一个系统程序——进度条
我们要知道,C语言执行代码时,一直是从上向下执行的,所有一定是先执行printf,再执行sleep。如果我们的光标在第一个位置,写入9,这时光标会向后移动,但我们想办法让光标再移动到开头,再向里面写8,…,按照这样的原理,我们就可以很容易的实现一个倒计时程序。printf打印,是把信息写在stdout(标准输出)里面,所以打印时信息没有刷出来,就用fflush刷新一下标准输出,就可以把这个字符串立即刷新出来。原来是因为把\n变成\r后,没有\n了,所以数字会被写在缓存区里,一直不被更新。原创 2025-04-19 20:56:48 · 1271 阅读 · 10 评论 -
掌握Linux项目自动化构建:从零入门make与Makefile
不会写Makefile的程序员,就像不会用筷子的美食家——永远尝不到工程化开发的精髓。在Windows环境下我们习惯使用Visual Studio等IDE的一键编译,但在Linux开发环境中,掌握Makefile就像获得了一把打开高效开发之门的钥匙。实现真正的自动化编译- 一个命令完成整个项目的构建提升编译效率- 只重新编译修改过的文件管理复杂项目- 轻松处理多文件、多目录的依赖关系跨平台移植- 一套构建规则适应不同开发环境在Linux开发中,make是一个智能编译命令,而Makefile是它的。原创 2025-03-26 22:10:28 · 1704 阅读 · 7 评论 -
Linux编译器gcc/g++使用完全指南:从编译原理到动静态链接
掌握gcc/g++的编译原理和使用技巧,是成为Linux开发高手的必经之路。希望本文能帮助您系统理解编译过程,在实际开发中游刃有余!💡 思考题:为什么说"编译器也是软件"?因为编译器本身就是用其他语言编写的程序,可以通过迭代不断升级。📌 注意:虽然g++可以编译C代码,但建议严格区分使用,避免潜在的兼容性问题。原创 2025-03-26 11:03:12 · 1054 阅读 · 16 评论 -
Linux软件包管理与Vim编辑器指南
在Linux下安装软件,一种常见的方法是下载程序的源代码,并进行编译,得到可执行程序。然而,这种方法既耗时又繁琐。为了方便,人们将一些常用的软件提前编译好,做成软件包,存放在服务器上。通过包管理器,用户可以方便地获取这些编译好的软件包,直接进行安装。软件包管理:Linux下使用yum可以方便地管理软件包,包括安装、卸载和更新。Vim编辑器:Vim是一个强大的文本编辑器,掌握其基本操作和配置可以大大提高编辑效率。原创 2025-03-12 15:49:08 · 1212 阅读 · 16 评论 -
Linux必备技能:打包压缩与权限管理详解
掌握打包压缩和权限管理是Linux使用的核心技能。通过合理压缩文件提升效率,深入理解权限机制保障系统安全。实践过程中,善用热键和工具(如。打包压缩是通过特定算法将多个文件合并或压缩,减少体积的技术。打包后的文件不仅体积更小,还能作为一个整体传输,提升效率。),并灵活调整权限设置,能让你的Linux之旅更加顺畅!:创建一个共享目录,设置粘滞位,体验权限控制的魅力吧!原创 2025-03-08 16:10:05 · 1145 阅读 · 12 评论 -
Linux入门必备:基础指令详解
掌握这些基础指令后,你已能高效操作Linux系统。建议多实践以巩固记忆,后续可深入学习Shell脚本编写和权限管理等进阶内容。掌握Linux命令行操作是开发者、运维人员的基本技能。本文整理常用Linux指令及使用场景,助你快速上手。删除空目录(仅当目录无内容时生效)误删可能导致数据丢失。显示当前所在目录的绝对路径。创建空文件或更新文件时间戳。移动文件/目录 或 重命名。以树状结构显示目录内容。按名称/类型查找文件。原创 2025-03-03 00:37:55 · 1290 阅读 · 16 评论 -
Linux的诞生:一场自由与协作的技术革命
在今天的互联网世界,Linux几乎无处不在——从智能手机(Android内核)到超级计算机,从云计算平台到家用路由器,它的身影渗透在技术的各个角落。但这样一个改变世界的操作系统,并非诞生于某家商业巨头的实验室,而是一个芬兰大学生“为了好玩”发起的个人项目。1970年代,贝尔实验室开发的Unix系统凭借其简洁的设计和强大的多用户能力,成为学术界和企业的宠儿。(GNU’s Not Unix),旨在创建一个完全自由的操作系统,但直到1990年,GNU仍缺少一个关键组件——内核(即操作系统的核心)。原创 2025-02-28 00:40:56 · 1159 阅读 · 10 评论