Linux
文章平均质量分 94
zhangcoder
KEEP CODING! 文章的配套资料 http://zhangcoder.ysepan.com/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
纪念人生提交的第一个即将并入Linux内核的补丁
作者分享了提交首个Linux内核补丁的喜悦经历。虽然补丁技术含量不高,但标志着正式参与开源社区开发。文章附上了补丁提交链接和社区讨论记录原创 2025-12-19 22:40:04 · 441 阅读 · 0 评论 -
OS39.5.【Linux】分析ar命令生成的归档文件的格式
分析Linux/Unix中ar命令生成的归档文件格式。通过十六进制编辑器解析test.a归档文件,发现其包含文件头魔数"!<arch>\n"和60字节的元数据结构体ar_hdr。该结构体存储了文件名、时间戳、权限、大小等元数据,并以`\n结尾。文件内容保持原样未压缩,按偶字节对齐。文章详细解析了各字段含义,包括16字节文件名(以/结尾)、12字节时间戳、6字节UID/GID、8字节权限、10字节文件大小(ASCII形式)等元数据,展示了归档文件的具体存储结构。原创 2025-12-18 08:00:00 · 1051 阅读 · 0 评论 -
OS44.【Linux】进程间通信 管道通信代码部分(1)
本文介绍了Linux系统中匿名管道通信的实现方法。通过pipe系统调用创建管道文件,使用fork创建子进程实现父子进程通信。父进程负责读取管道数据,子进程负责写入数据。文章详细讲解了write_pipe和read_pipe函数的实现,包括字符串处理、管道读写操作以及进程同步机制。特别强调了管道通信中父子进程的协同工作关系,以及数据传输过程中用户空间与内核空间的交互流程。最后通过完整代码演示了管道通信的实际应用,展示了父子进程间数据传输的动态过程。原创 2025-12-09 08:00:00 · 931 阅读 · 0 评论 -
OS43.【Linux】进程间通信 管道通信理论部分
本文摘要:进程间通信(IPC)是不同进程间数据交互的方式,本质是让进程共享同一份资源。操作系统作为第三方提供和管理这些资源,通过系统调用实现资源创建、使用和释放。重点讲解了匿名管道的实现原理:父子进程通过继承文件描述符共享内存级管道文件,实现单向通信。管道通信要求进程间必须存在血缘关系,且建议严格遵循单向通信原则(关闭不使用的端口)。文章还解释了tty的含义,并指出双向通信需使用两个管道。原创 2025-12-01 08:00:00 · 654 阅读 · 0 评论 -
OS42.【Linux】动态库文件的位置无关、深入分析PLT和GOT
深入探讨动态库和静态库的工作原理。主要内容包括:1) 动态库使用位置无关代码(PIC)技术,通过-fPIC选项编译,使库函数能加载到任意虚拟内存地址;2) 分析ASLR机制使动态库每次加载地址随机化;3) 详细解析PLT(过程链接表)和GOT(全局偏移表)的协作机制,PLT实现延迟绑定,GOT存储动态链接函数地址;4) 通过Cutter和GDB工具验证加载器通过DynamicLoaderOperation修改GOT表数据的过程。文章揭示了动态库加载的核心原理:使用相对地址偏移,通过基地址+偏移量的方式原创 2025-11-28 08:37:56 · 871 阅读 · 1 评论 -
OS41.【Linux】程序的入口地址、可执行文件的位置无关的解释
文章摘要:本文首先回顾了虚拟地址与物理地址的区别,解释了程序编译后内部地址的概念。通过分析可执行文件的ELF文件结构,说明了如何通过readelf命令查看程序入口地址。重点比较了位置无关(PIE)和位置相关(no_pie)可执行文件的区别:PIE类型(DYN)在运行时加载到随机虚拟地址(基址+偏移),而传统EXEC类型(no_pie)加载到固定地址。通过gdb调试验证了两种类型在内存中的地址映射差异,为理解程序加载执行机制提供了实践参考。原创 2025-11-26 08:23:17 · 669 阅读 · 0 评论 -
OS40.【Linux】动态库和静态库 自制动态库
文章摘要:文章探讨了C语言静态库和动态库的实现与使用问题。在静态库部分,通过除法函数示例展示了错误处理机制(如除零错误)的实现方式,并分析了Linux默认从右向左传参带来的问题及解决方法。动态库部分详细讲解了制作过程、权限要求、加载机制和共享特性,介绍了四种让操作系统找到自制动态库的方法:环境变量设置、启动脚本修改、系统目录拷贝和ldconfig配置。文章还涉及汇编代码分析、Pascal调用约定对比等底层细节,为开发者提供了全面的库文件开发实践指导。原创 2025-11-19 08:33:05 · 736 阅读 · 0 评论 -
OS39.【Linux】动态库和静态库 自制静态库
介绍Linux下静态库的制作和使用方法。主要内容包括:1)回顾静态链接原理,对比动态链接;2)演示如何创建静态库文件(.a文件)并通过Makefile自动化构建;3)详细讲解发布静态库的正确方式,包括头文件和库文件的组织;4)重点说明使用静态库时的三个关键参数:-I指定头文件路径、-L指定库路径、-l指定库名;5)补充gcc的默认搜索路径机制。文章通过多个代码版本逐步解决静态库使用中的常见问题,最终给出了完整的静态库编译命令示例。原创 2025-11-11 08:13:41 · 806 阅读 · 0 评论 -
OS37.【Linux】EXT2文件系统实验1 格式化+超级块的重要性
本文通过两个实验探讨EXT2文件系统的关键特性。实验1详细演示了在Linux下格式化U盘为EXT2文件系统的过程,包括卸载挂载点、备份数据等操作,并分析了文件系统结构参数。实验2重点研究了超级块的重要性,通过人为破坏主超级块验证了备份超级块的恢复机制,介绍了使用e2fsck和dd命令从备份超级块恢复主超级块的方法。研究揭示了EXT2文件系统中超级块的关键作用和备份机制,为理解文件系统损坏与修复提供了实践参考。原创 2025-10-28 07:45:00 · 889 阅读 · 0 评论 -
OS37.【Linux】简单理解EXT2文件系统(2)
浅析了EXT2文件系统的核心机制。首先介绍了i_block数组的三级索引结构,推导出单个文件最大存储容量的计算方法;其次详细阐述了inode和block位图的管理机制,解释了删除文件时仅需修改位图而无需清空数据块的原理。文章还分析了文件系统"满"的三种情况,并重点讲解了超级块和组描述符的关键作用。在文件操作层面,系统性地揭示了新建、删除、查找和修改文件时内核的底层处理流程,特别强调了目录作为特殊文件的实现方式及其inode查找机制。最后,针对文件访问效率问题,介绍了EXT原创 2025-10-25 08:00:00 · 762 阅读 · 0 评论 -
OS36.【Linux】简单理解EXT2文件系统(1)
Ext2文件系统采用分层结构管理磁盘数据,主要包括启动块、数据块、inode表等区域。数据块以4KB为单位存储文件内容,inode表则记录文件属性(不含文件名),每个inode有唯一编号。文件系统通过三级索引机制管理大文件:前12个直接索引指向数据块,第13个为二级索引(指向块号表),第14个为三级索引(多级间接寻址)。关键结构体ext2_inode包含文件权限、大小、时间戳等信息,其中i_block数组实现索引功能。inode数量在格式化时固定,无法动态调整。这种设计通过多级索引平衡了小文件存储效率和大文原创 2025-10-20 08:00:00 · 1795 阅读 · 0 评论 -
OS34.【Linux】文件IO (3) 缓冲区的补充和模拟实现fopen、fwrite、fclose函数
探讨C语言和操作系统缓冲区的区别与作用,解释了缓冲区存在的必要性(提高效率和格式化支持),分析了代码运行结果与缓冲策略的关系。通过模拟实现fopen、fwrite、fclose函数,详细讲解了如何为FILE结构体添加缓冲区,并比较了不同刷新策略的效率差异。实验证明,减少刷新次数(即减少系统调用)能显著提升效率,这解释了为什么缓冲区机制对程序性能至关重要。文章还包含缓冲区的三种刷新策略(立即刷新、行缓冲、全缓冲)的具体实现细节。原创 2025-09-29 08:00:00 · 678 阅读 · 0 评论 -
OS33.【Linux】文件IO (3) 缓冲区
本文探讨了C语言缓冲区的相关概念,通过对比不同示例代码的运行结果,分析了缓冲区在文件操作中的作用。文章指出C语言提供的缓冲区与操作系统内核缓冲区不同,并通过实验验证了close(1)会阻止缓冲区内容输出到屏幕。同时介绍了FILE结构体的组成,特别是其中的文件描述符字段。最后讨论了exit和_exit函数的区别,以及C语言缓冲区的三种刷新策略:行缓冲、全缓冲和无缓冲,并说明不同输出设备对应的刷新机制。文章为理解C语言文件操作和缓冲区机制提供了详细的技术分析。原创 2025-09-24 07:45:00 · 888 阅读 · 0 评论 -
【Linux】LRU缓存(C语言模拟实现)
介绍C语言实现LRU缓存算法的方法,重点讲解了如何结合uthash哈希表库来优化性能。主要内容包括:1) uthash哈希表的基本操作(创建、添加节点、查找、销毁);2) LRU缓存的实现思路,使用双向链表维护访问顺序;3) 详细代码实现,包括缓存初始化、get/put操作和内存释放;4) 提交结果展示。该实现通过哈希表快速查找,结合链表维护访问顺序,达到了O(1)时间复杂度的操作效率。原创 2025-09-22 08:00:00 · 673 阅读 · 0 评论 -
OS32.【Linux】文件IO (3) 重定向和理解“一切皆文件“
本文主要探讨Linux系统中的重定向机制及其底层实现原理。文章首先回顾了文件描述符和read系统调用的基本概念,详细解释了重定向的两种实现方法:通过close+open组合以及使用dup2系统调用。随后分析了输入/输出重定向在shell中的具体应用,包括如何为自制shell添加重定向功能。文章深入剖析了"Linux一切皆文件"的设计理念,通过虚拟文件系统(VFS)和文件操作结构体(file_operations)解释了不同设备的统一访问机制。最后,从面向对象的角度解读了Linux文件系统原创 2025-09-19 08:00:00 · 980 阅读 · 0 评论 -
【Linux】LRU缓存(C++模拟实现)
本文介绍了LRU缓存的设计与实现。LRU(最近最少使用)是一种常见的缓存淘汰算法,当缓存满时淘汰最近最少使用的数据。文章以LeetCode 146题为例,提出使用哈希表(unordered_map)存储键值对,双向链表(list)维护访问顺序的高效实现方案:链头存放最新访问数据,链尾存放LRU数据。通过哈希表存储链表迭代器,实现O(1)时间复杂度的查找和更新操作。具体实现包括:1)get操作需将被访问数据移至链头;2)put操作区分键存在(更新值)与不存在(插入新值,若缓存满需先删除链尾数据)两种情况。文章原创 2025-09-16 08:52:47 · 1047 阅读 · 0 评论 -
OS31.【Linux】文件IO (2) 文件描述符
介绍Linux文件IO中的文件描述符机制。首先回顾了文件描述符的基本概念,指出操作系统通过struct file结构体管理文件属性,并用链表组织打开的文件。重点分析了文件描述符的分配规则:默认从3开始编号,0-2被stdin、stdout、stderr占用;系统会寻找最小的未使用数组下标作为新文件描述符。通过实验验证了FILE结构体包含_fileno成员,与文件描述符关联。最后解释了文件引用计数机制,说明只有当引用计数归零时内核才会真正关闭文件。文章还提供了查看标准流文件描述符的两种方法,并建议进一步原创 2025-09-14 09:29:19 · 624 阅读 · 0 评论 -
OS29.【Linux】自制简单的Shell的修bug记录
分析了一个隐蔽的C程序bug,该bug导致环境变量environ[0]被意外修改。通过gdb调试发现,问题出在split_commandline函数中,由于main函数的argv数组和environ数组在内存中连续存放,当argv数组越界时修改了environ[0]的值。解决方法是避免使用main函数传递的argv数组,改为定义独立的argv数组空间。文章还验证了Linux进程内存布局中argv和environ数组的连续性,并参考了SystemV ABI规范说明这一特性。这个bug展示了内存越界的隐蔽性原创 2025-09-13 08:40:41 · 673 阅读 · 0 评论 -
OS28.【Linux】自制简单的Shell v.1.0版本
介绍自制Shell的实现过程,重点讲解命令行提示符的格式设计、命令字符串的读取与切割、常规命令和内置命令的执行机制。通过系统调用获取用户名、主机名和当前目录,巧妙处理路径显示;使用strtok函数切割命令参数;区分常规命令(fork+exec执行)和内置命令(直接执行)。文章还详细实现了cd、env、export、echo等内置命令,并提供了代码实现和运行测试示例。最后总结了Shell的基本工作原理和参考资料,为开发简易Shell提供了完整的技术方案。原创 2025-09-11 10:57:16 · 861 阅读 · 0 评论 -
OS27.【Linux】进程程序替换(下)
本文摘要:文章详细介绍了Linux中exec系列函数的使用方法,包括执行自定义可执行文件、调用shell脚本和Python脚本的示例。重点探讨了exec函数传递参数和环境变量的机制,验证了环境变量在子进程中的继承特性。文章还介绍了putenv函数和自定义环境变量的方法,并深入分析了exec系列函数底层都调用了execve系统调用的实现原理。通过glibc源代码分析,证实了6个exec函数最终都转换为execve系统调用。这些内容为理解Linux进程替换和环境变量传递机制提供了实用参考。原创 2025-08-25 09:12:10 · 859 阅读 · 0 评论 -
OS30.【Linux】文件IO (1) open、write和close系统调用
介绍Linux系统下文件操作的相关知识,包括:1. 复习文件概念和分类,强调文件=内容+属性,以及打开文件与进程的关系。2. 对比C语言字符串和文件字符串的区别,指出文件字符串不需要以\0结尾。3. 讲解三个默认打开的文件流(stdin/stdout/stderr)及其使用。4. 详细说明open系统调用的使用方法,包括flags参数组合、mode参数权限设置等。5. 介绍write系统调用的使用注意事项,包括文件位置、截断和追加等写入方式。6. 最后分析C语言fopen函数与open系统调用的对比原创 2025-09-04 20:28:55 · 813 阅读 · 0 评论 -
OS22.【Linux】环境变量
探讨Linux环境变量的概念与应用。通过实验对比系统命令与自制程序的执行差异,解释了PATH环境变量的作用机制。文章详细介绍了环境变量的全局属性、获取方法(包括env命令、getenv()函数、envp参数和environ变量),并区分了环境变量与本地变量的不同特性。此外,还分析了系统命令的分类(常规命令与内建命令),以及man和help命令的区别。最后简要提及了自定义程序入口函数的实现方法。全文通过代码示例和命令行操作,系统性地阐述了环境变量在Linux系统中的重要地位和工作原理。原创 2025-08-03 17:00:02 · 1004 阅读 · 0 评论 -
OS26.【Linux】进程等待 (下) 和 进程程序替换(上)
介绍Linux进程管理中waitpid的WNOHANG选项和exec系列函数。waitpid的WNOHANG参数可实现非阻塞轮询,父进程在等待子进程时可执行其他任务。exec系列函数(如execl、execv等)用于进程程序替换,能够替换当前进程的代码段和数据段而不创建新进程。文章详细讲解了各exec函数的区别与命名规则,包括参数传递方式(列表/数组)、路径搜索方式(是否使用PATH环境变量)和环境变量处理方式。这些函数通过修改进程的代码段入口地址实现程序替换,替换失败才会返回执行原代码。原创 2025-08-20 18:09:06 · 708 阅读 · 0 评论 -
OS25.【Linux】进程等待 (上)
介绍Linux系统中僵尸进程的清理方法及进程等待机制。主要内容包括:1)验证僵尸进程无法被kill命令终止;2)清理僵尸进程的两种方法:终止父进程或父进程主动收尸;3)详细讲解wait和waitpid系统调用的使用,包括等待单个/多个子进程、阻塞特性等;4)深入分析wstatus参数的位图结构,解释如何通过位运算获取子进程退出状态;5)说明进程退出信息的存储位置和waitpid可能失败的情况。文章通过实验代码演示了如何提取进程退出状态信息,并分析了正常退出和异常退出的不同处理机制。原创 2025-08-19 08:36:29 · 919 阅读 · 0 评论 -
OS24.【Linux】进程终止
1.知识回顾 fork()的使用 2.使用fork()创建多个进程 情景引入:fork()炸弹 示例代码讲解 3.进程终止 进程退出的几种情况 退出码 strerror函数 全局变量errno ★退出码和错误码不是一回事 代码是否异常终止 exit函数 对比return和exit 对比exit和_exit _exit系统调用 _Exit函数 4.总结本文退出进程的几种方法原创 2025-08-18 10:09:27 · 794 阅读 · 0 评论 -
OS23.【Linux】初识进程地址空间
深入探讨了进程地址空间的概念及其在操作系统中的重要作用。首先回顾了C/C++内存区域划分,通过实验验证了栈区向下增长、堆区向上增长的特性。重点阐述了进程地址空间的本质是内核数据结构,包含页表、CR3寄存器等关键组件,以及写时拷贝机制的工作原理。通过分析mm_struct结构体,详细说明了操作系统如何管理进程地址空间。文章还解释了进程地址空间存在的意义:保护物理内存、实现进程隔离,并指出进程地址空间不等于实际内存。最后介绍了操作系统的懒加载机制和缺页中断原理,更新了进程的组成公式为"内核数据原创 2025-08-05 10:09:32 · 1066 阅读 · 0 评论 -
OSE1.【Linux】练习题组1
整理了7个Linux系统相关的知识点练习题,涵盖文件系统、命令使用、文件操作和开发工具等方面。主要内容包括:1)Linux 2.6.*内核默认支持ext2/ext3/ext4/xfs文件系统;2)uname -r命令查看内核版本;3)top命令查看CPU占用;4)批量删除.c文件的两种方法;5)yum命令的正确用法;6)Vim中全局替换字符串的语法;7)Makefile的工作原理和伪目标特性。这些题目涉及Linux系统管理的基础知识,通过解析帮助理解常用命令和工具的核心功能。原创 2025-07-28 12:09:19 · 812 阅读 · 0 评论 -
OS21.【Linux】进程状态(2) O(1)调度算法、进程切换和其他概念
介绍了Linux进程调度的核心机制。首先回顾了O(1)调度算法,详细解析了运行队列和过期队列的双指针数组结构,以及通过位图快速定位最高优先级进程的方法。其次阐述了进程的竞争性、独立性、并行和并发概念。重点讲解了进程切换的完整过程,包括上下文保存机制,特别说明了32位系统下TSS(任务状态段)在保存寄存器值方面的关键作用。文章还补充了进程上下文保存位置的讨论,指出除了PCB外,任务状态段TSS也是重要存储位置。最后提供了关于进程上下文和操作系统进程管理的拓展阅读资源。原创 2025-07-26 09:23:48 · 855 阅读 · 0 评论 -
OS20.【Linux】进程状态(2) 僵尸进程、孤儿进程和进程优先级
首先回顾了Linux进程的基本概念,然后重点讨论了两种特殊进程状态:僵尸进程和孤儿进程。僵尸进程是已终止但未被父进程完全回收的进程,可能导致内存泄漏;孤儿进程则是父进程终止后由init进程接管。文章还详细介绍了进程优先级的概念,包括PRI和NI值的含义及修改方法(通过nice、renice和top命令)。最后简要说明了如何在图形界面调整进程优先级。全文提供了代码示例和命令行操作演示,帮助理解进程状态管理和优先级调整的实际应用。原创 2025-07-25 09:23:44 · 1259 阅读 · 0 评论 -
OS19.【Linux】进程状态(1)
介绍了操作系统中的进程状态分类,包括运行状态、阻塞状态、挂起状态和就绪状态,并对比了不同操作系统教材中的定义差异。重点分析了Linux内核中的进程状态实现(R/S/D/T/t/X等),通过实验演示了进程在不同状态下的表现。特别解释了D状态(不可中断睡眠)的特性及其与S状态的区别,并提供了模拟高IO场景的代码示例。文章还涉及进程调度算法、前台/后台进程、虚拟内存管理等核心概念,最后介绍了交换分区及其查看方法。这些内容为理解操作系统进程管理机制提供了全面指导。原创 2025-07-21 08:26:12 · 1666 阅读 · 0 评论 -
OS18.【Linux】进程基础知识(2)
Linux进程基础知识,重点分析了进程创建机制。文章首先介绍了psajx命令获取PID的原理,通过系统调用遍历PCB链表获取进程信息。随后详细讲解了fork()系统调用,包括其返回值设计原理(父进程获子进程PID,子进程获0)、父子进程分流机制,并通过实验代码验证了父子进程的执行流程。文章还对比了fork()和vfork()的差异,指出vfork()会阻塞父进程且共享父进程存储空间。最后总结了两种创建进程的方法:通过bash执行可执行文件和使用fork()/vfork()系统调用。全文深入浅出原创 2025-07-19 11:47:49 · 1193 阅读 · 0 评论 -
OS17.【Linux】进程基础知识(1)
介绍Linux进程的基本概念和管理方法。主要内容包括:1.进程的浅层定义 - 正在运行的程序;2.查看进程的多种方法(ps、top、/proc目录);3.进程管理实践(查看、终止进程);4.进程控制块(PCB)的组成和作用;5.Linux内核中task_struct结构体的详细解析。文章通过代码示例和命令演示,帮助读者理解进程标识符(PID)、工作目录、程序计数器等核心概念,并深入分析了操作系统如何通过PCB组织和管理进程。最后提供了Linux内核源代码中task_struct的完整定义,为后续学原创 2025-07-18 11:25:02 · 677 阅读 · 0 评论 -
OS16.【Linux】冯依诺曼体系结构和操作系统的浅层理解
冯依诺曼体系结构是现代计算机的基础架构,其核心是将程序指令和数据存储在同一个存储器中。该体系由CPU、存储器、输入/输出设备通过总线连接组成。程序运行必须加载到内存,CPU通过控制器和运算器处理数据。操作系统通过驱动程序间接管理硬件资源,本质是对数据进行组织管理。系统调用是程序访问操作系统服务的接口,程序在执行时会在用户态和内核态之间切换以确保安全。库函数是对系统调用的封装,为开发者提供更便捷的编程接口。整个计算机系统的运行都建立在冯依诺曼体系结构的基础上。原创 2025-07-11 18:57:25 · 849 阅读 · 0 评论 -
OS15.【Linux】gdb调试器的简单使用
介绍了Linux下GDB调试器的使用方法。主要内容包括:调试前的准备工作,需使用-g选项编译生成debug版本;断点的分类与原理,分为软件断点和硬件断点;通过示例代码演示了常用调试命令的使用,如list查看代码、break设置断点、run运行程序、info查看信息、next/step单步调试、print查看变量等。文章还对比了GDB命令与Visual Studio调试功能的对应关系,并介绍了finish、continue、setvar等进阶命令的使用方法。原创 2025-07-03 20:22:08 · 763 阅读 · 0 评论 -
OS14.【Linux】git的简单使用
介绍了Git的基本概念和使用方法。Git是一个免费开源的分布式版本控制系统,由Linus Torvalds开发。文章讲解了如何创建Git仓库,安装Git,使用git clone克隆仓库,配置用户信息。重点介绍了常用命令:git add提交文件变更到暂存区,git commit记录本地修改,git push推送更改到远端仓库,以及git log查看提交历史和git status检查仓库状态。最后解释了.gitignore文件的作用,通过实例验证了其对特定类型文件的忽略效果,如.app后缀文件不会被上原创 2025-07-02 19:13:00 · 698 阅读 · 1 评论 -
OSE3.【Linux】练习:编写进度条及pv命令项目中的进度条函数
本文介绍了Linux下进度条的实现方法,重点讲解了C语言中回车换行、缓冲区、sleep/usleep函数的使用技巧。通过倒计时程序作为预备实验,逐步构建了5个版本的进度条:从基础版本到添加中括号、百分比、旋转动画等特效。文章还分析了pv命令项目中进度条显示函数的调用方式,并提供了模拟下载过程的回调函数实现。最后讲解了如何生成2GB测试文件并使用pv命令监控复制进度。代码示例和效果演示完整展现了Linux环境下进度条的开发流程和优化思路。原创 2025-07-01 18:54:28 · 857 阅读 · 0 评论 -
OS13.【Linux】项目的自动化构建工具:make
介绍Linux下使用make和makefile编译大型项目的方法。首先以Redis为例演示了简单的make编译流程,然后详细讲解了makefile的基本语法,包括依赖关系、依赖方法和清理规则的编写。文章还探讨了make的自动化推导机制、时间判断原理,以及.PHONY伪目标和简写符号的使用。最后介绍了如何通过修改文件时间或使用.PHONY修饰来强制重新编译,以及用@符号隐藏命令执行细节的技巧。原创 2025-06-24 16:22:34 · 972 阅读 · 0 评论 -
OS12.【Linux】gcc和g++以及动静态链接
讲解了GCC的使用,包括gcc与g++的区别、编译过程的四个阶段(预处理-E、编译-S、汇编-c、链接)。重点介绍了编译器选项(-std、-O、-Wall/-Werror、-g)的使用场景,动态库(.so)与静态库(.a)的差异及ldd/file命令的用法。通过实例演示了从源代码到可执行文件的完整编译流程,分析了动静态链接的优缺点:动态库节省资源但依赖系统环境,静态库独立性强但体积较大。文中还涵盖了宏定义(-D)、调试信息(-g)原创 2025-06-10 19:52:44 · 1295 阅读 · 0 评论 -
OS11.【Linux】vim文本编辑器
Vim是一款多模式文本编辑器,包含命令模式、插入模式和底行模式三种主要模式。命令模式下可使用gg/G移动光标、yy/dd复制删除行、u撤销等高效操作;插入模式用于文本输入;底行模式用于保存退出(:wq)和执行外部命令(:!gcc)。 Vim支持分屏操作(vs文件),可同时编辑多个文件(ctrl+ww切换)。配置通过修改用户家目录的.vimrc文件实现,推荐使用一键配置脚本。NeoVim作为改进分支,兼容Vim并提供更多功能。文中还介绍了微软Edit编辑器作为替代选择。原创 2025-06-06 14:39:02 · 1002 阅读 · 0 评论 -
OS10.【Linux】yum命令
Linux系统中的软件安装方法,重点讲解了yum包管理器的使用。主要内容包括: 软件安装方法: 直接编译源代码(较复杂) 使用yum等包管理器(推荐) yum常用命令: yum list:查看软件包 yum install/remove:安装/卸载软件 其他命令:yum search/makecache/update/upgrade 扩展yum源: 安装epel-release扩展源 通过扩展源安装sl小火车等软件 yum源管理: 配置文件位置:/etc/yum.re原创 2025-06-01 17:22:42 · 1153 阅读 · 0 评论
分享