
Linux
文章平均质量分 96
记录Linux的学习历程
孤寂大仙v
悟已往之不谏,知来者之可追
展开
-
【Linux笔记】进程间通信——system v 共享内存
共享内存是Linux系统中进程间通信(IPC)的一种方式,允许多个进程直接访问同一块物理内存区域。它的核心特点是零拷贝——数据直接在内存中共享,无需通过内核缓冲区中转,因此成为速度最快的IPC机制。共享内存是system v的一种标准,Linux内核支持这种标准,专门设计了这个模块。两个进程访问同一块物理内存,如上图共享内存通过页表映射到两个进程的地址空间,两个进程就可以看到同一块资源,进而实现进程间的通信。原创 2025-03-30 14:15:31 · 645 阅读 · 12 评论 -
【Linux笔记】进程间通信——命名管道
命名管道是一种特殊的文件类型,它在文件系统中有一个名字,就像普通文件一样,但它的作用不是存储数据,而是用于进程间通信。与匿名管道不同,命名管道可以在不相关的进程之间进行通信,并且可以跨越不同的主机(在支持网络命名管道的系统中)。特点半双工或全双工:命名管道可以配置为半双工或全双工模式。在半双工模式下,数据可以在两个方向上传输,但不能同时进行;在全双工模式下,数据可以同时在两个方向上传输,这使得通信更加灵活,能满足不同应用场景的需求。原创 2025-03-29 08:46:19 · 1114 阅读 · 9 评论 -
【Linux笔记】进程间通信——匿名管道||进程池
简介进程间通信(IPC,Inter-Process Communication)是操作系统中不同进程之间交换数据、协调工作的核心机制。由于每个进程拥有独立的内存空间,彼此隔离,因此需要特定的技术手段实现跨进程协作。进程间通信(IPC)是指运行在同一台计算机或不同计算机上的多个进程之间进行数据交换和通信的技术。由于每个进程都有自己的地址空间,它们无法直接访问彼此的数据,因此需要通过特定的机制实现通信。IPC是操作系统和多进程编程中的一个重要概念,广泛应用于分布式系统、多任务操作系统以及各种应用程序之间。原创 2025-03-29 08:05:46 · 984 阅读 · 38 评论 -
【Linux笔记】动态库与静态库的理解与加载
# 一、ELF文件ELF 文件是一种二进制文件格式,它定义了文件的结构和内容,使得操作系统、链接器和调试器等工具能够正确地处理和解释文件。这种格式具有良好的可移植性和扩展性,能够适应不同的硬件平台和操作系统。ELF 文件主要由以下几个部分组成:- ELF 头(ELF Header)位于文件的开头,包含了文件的基本信息,如文件类型(可执行文件、目标文件等)、机器架构(如 x86、ARM 等)、**入口地址(程序开始执行的地址**)等。**ELF 头还指明了程序头表和节头表的位置和大小**。原创 2025-03-19 10:52:31 · 903 阅读 · 3 评论 -
【Linux笔记】动态库与静态库的制作
库就像是编程世界里的 “工具包”,里面装着别人已经写好的代码模块,可以直接拿过来用。比如你要建一座房子,不需要自己炼铁造钉子,直接买现成的钉子(库)就能加快速度。静态库(.a/.lib)特点:编译时 “打包” 进你的程序,变成程序的一部分。比喻:像外卖套餐里的固定配菜,直接塞进你的饭盒带走。优点:独立运行,不需要额外依赖;缺点:程序体积变大,修改库后需要重新编译整个程序。动态库(.so/.dll)特点:运行时才 “链接” 到程序,程序和库是分开的文件。原创 2025-03-19 10:52:01 · 870 阅读 · 2 评论 -
【Linux笔记】理解Ext2文件系统(下)
当进程调用open()、creat()等系统调用打开一个文件时,文件系统会在磁盘上找到该文件的 inode(索引节点),inode 存储了文件的元数据和数据块指针。同时,内核会为这个打开的文件分配一个新的文件描述符,并在文件描述符表中记录该文件描述符与 inode 的关联。后续进程对文件的操作(如read()、write())就通过文件描述符来定位到具体的文件,进而通过 inode 访问文件的数据。例如,read(fd, buffer, size)这个系统调用中,fd就是文件描述符,内核根据它找到对应的 i原创 2025-03-10 07:30:00 · 1022 阅读 · 8 评论 -
【Linux笔记】理解文件系统(上)
**扇区是磁盘存储数据的基本单位,是磁盘上的一个弧形区域**。常见的扇区大小为 512 字节。扇区是数据在磁盘上存储的最小单元,计算机在向磁盘写入数据时,会将数据按扇区进行划分并存储;读取数据时,也以扇区为单位进行读取。不同盘面(磁头)上相同位置的磁道组成一个柱面。在进行数据读写时,通常会按柱面、磁头、扇区的顺序来访问磁盘上的数据,这样可以充分利用磁盘的存储结构,提高数据访问的效率。原创 2025-03-09 10:06:24 · 1188 阅读 · 46 评论 -
【Linux笔记】基础IO(下)
缓冲区是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。原创 2025-03-09 08:06:00 · 1357 阅读 · 52 评论 -
【Linux笔记】基础IO(上)
> 文件类型> - **普通文件**:包含用户数据,如文本文件、二进制可执行文件、图像文件、音频文件等。文本文件可以用文本编辑器打开查看和编辑,二进制文件则包含了机器可执行的指令或特定格式的数据。> - **目录文件**:用于组织和管理其他文件和目录,类似于 Windows 系统中的文件夹。它包含了指向其他文件和目录的索引信息。 > - **设备文件**:在Linux中,硬件设备也被视为文件,分为字符设备文件和块设备文件。字符设备文件通常用于像串口、终端这样以字符流方式进行数据传输的设备;块设备文件用原创 2025-03-03 10:46:02 · 1764 阅读 · 94 评论 -
【Linux笔记】进程控制
## fork函数在linux中fork函数,它从已存在进程中创建⼀个新进程。新进程为子进程,而原进程为父进程。下面这篇文章讲过一点进程创建:[【Linux】进程概念(PCB)与进程创建(fork)](https://blog.youkuaiyun.com/GGDxianv/article/details/144947824?spm=1001.2014.3001.5501)> 进程调用fork,当控制转移到内核中的fork代码后,内核做: > > - 分配新的内存块和内核数据结构给子进程> - 将父进程原创 2025-02-15 22:24:22 · 2033 阅读 · 0 评论 -
【Linux笔记】进程地址空间与虚拟地址空间
*进程地址空间**:是从进程角度出发,描述一个进程在运行时能够访问和使用的内存地址范围,是与具体进程紧密绑定的概念,强调的是进程对内存资源的占有和使用,每个进程都有一套独立的进程地址空间,用于存放该进程运行所需的各种资源,如代码、数据、堆栈等。**虚拟地址空间**:是一种系统层面的内存管理抽象概念,是对整个系统中内存地址的一种虚拟划分方式,它为每个进程提供了一个看似独立、连续且独占的地址空间,让进程在这个虚拟的地址环境中运行,而不必关心实际物理内存的布局和其他进程的内存使用情况。-----**涵原创 2025-01-25 18:44:34 · 1756 阅读 · 0 评论 -
【Linux笔记】环境变量
在 Linux 系统中,环境变量是一种动态命名的值,它可以影响系统运行时进程的行为。这些变量包含了有关系统配置、用户偏好以及应用程序运行环境等信息。例如,PATH环境变量定义了系统在哪些目录中查找可执行文件。当你在终端中输入一个命令(如ls)时,系统会根据PATH环境变量所指定的目录顺序来查找ls这个可执行文件。环境变量(environment variables)⼀般是指在操作系统中用来指定操作系统运行环境的⼀些参数。原创 2025-01-21 21:46:34 · 6456 阅读 · 0 评论 -
【Linux笔记】进程优先级与进程切换
进程优先级是操作系统用来确定进程获取CPU资源顺序的属性。它体现进程在资源分配中的重要性,优先级高的进程更易先获得CPU处理时间。优先级分为静态和动态两种。静态优先级在进程创建时确定,基本不变,如系统进程的优先级通常较高。动态优先级在进程运行中可根据进程行为和系统状态改变,像长时间占用CPU的进程优先级可能会被降低,等待后重新就绪的进程优先级可能会提高。它有助于合理分配资源、优化系统性能。简而言之是进程得到CPU资源的先后顺序。进程优先级的值越低优先级越高,反之优先级优先级越低。原创 2025-01-19 22:12:01 · 1743 阅读 · 0 评论 -
【Linux笔记】进程状态
进程状态是指一个进程在其生命周期中所处的特定阶段或状况。它反映了进程当前正在进行的活动或者等待的事件,并且决定了操作系统如何对该进程进行调度和资源分配。操作系统通过跟踪进程的状态,合理地分配 CPU 时间、内存和其他系统资源,以确保多个进程能够高效地并发执行。原创 2025-01-17 11:43:48 · 2878 阅读 · 0 评论 -
【Linux笔记】进程概念(PCB)与进程创建(fork)
我们磁盘中的可执行程序,CPU要想拿到并且执行,代码和数据要先放在内存中。对于没有了解过的人可能以为放在内存中的代码和数据就是进程,其实不然。操作系统是一个软件在内存中,当磁盘中的可执行程序被内存拿到,可执行程序的代码和数据会被内存拿到,内存中的操作系统会对代码和数据进行描述然后组织为数据结构(**先组织在描述**)形成**内核数据结构对象**,对进程的管理就变成了对数据结构对象的增删查改。 内核数据结构对象可以称为**PCB**,也叫做**进程控制块**。内核数据结构对象通过指针指向本身的代码和数据也指原创 2025-01-07 19:40:24 · 1452 阅读 · 0 评论 -
【Linux笔记】进程铺垫——冯诺依曼体系与操作系统概念
冯诺依曼体系是现代计算机的基本架构。主要特点是存储程序控制,用二进制表示数据和指令,指令和数据分开存储且顺序执行。由运算器、控制器、存储器、输入设备、输出设备组成。1946 年由冯・诺依曼提出,随着第一台 “存储程序” 计算机 EDVAC 诞生奠定基础。该体系奠定现代计算机基础,推动计算机技术发展,促进计算机应用的普及。原创 2025-01-05 08:27:43 · 2965 阅读 · 0 评论 -
【Linux开发工具】版本控制器git
Git 是一个开源的分布式版本控制系统,最初由 Linus Torvalds(Linux 内核的创始人,大佬就是大佬)开发,用于管理 Linux 内核的源代码。它被设计用来高效地管理大规模的代码库,并支持分布式团队协作。今天,Git 已成为世界上最流行的版本控制系统,广泛应用于个人开发、团队协作以及开源项目中。去中间化,分布式的版本控制器。Git 的发展历史Git 是由 Linus Torvalds 于 2005 年开发,最初为替代 Linux 内核项目使用的版本控制系统 BitKeeper。原创 2024-12-21 09:23:06 · 2203 阅读 · 52 评论 -
【Linux开发工具】gcc和g++和调试器 gdb/cgdb使用
GCC(GNU Compiler Collection)是一个开源的编译器集合,支持多种编程语言,其中 gcc 和 g++ 是最常用的两种编译器。gcc:用于编译 C 语言程序。它是编译 C 代码的主要工具,也能处理一些其他语言(如 Objective-C、Fortran 等),但默认用于 C。//这将编译 source.c 并生成可执行文件 output。g++:用于编译 C++ 程序。它不仅能编译 C++ 代码,还会自动链接 C++ 标准库(如 libstdc++)。原创 2024-12-21 09:22:30 · 1078 阅读 · 57 评论 -
【Linux开发工具】自动化构建-make/Makefile
make 是一个自动化构建工具,常用于 C/C++ 项目的编译和管理。它通过读取 Makefile 文件,自动处理文件依赖和编译过程,避免重复编译,提高效率。Makefile 是一个文本文件,包含了构建规则和依赖关系,告诉 make 如何从源代码生成目标文件。目标(target):编译后生成的文件。依赖(dependencies):目标文件所依赖的源文件。命令(commands):如何生成目标的命令。原创 2024-12-20 13:07:00 · 1422 阅读 · 55 评论 -
【Linux开发工具】yum/apt和vim编辑器
在Linux中,在Centos和Ubuntu下,我们通常都用yum和apt进行安装我们想要下载在Linux中的软件包。这二者虽然命令不同,但核心功能类似,都是用于管理软件包和依赖的工具。那么软件包和软件包管机器有什么联系呢?其中在Linux下安装软件,可以直接下载程序的源码进行编译后得到可执行程序。当然这种方式过于麻烦,这时就出现了**软件包。把一些常用的软件提前编译好,做成了软件包放在一个服务器上,通过包管理器以方便的得到这个编译好的软件包,在Linux上直接安装。**原创 2024-12-20 13:06:32 · 944 阅读 · 42 评论 -
【Linux】ubuntu下一键配置vim
Linux下ubuntu系统对vim进行一键式配置原创 2024-12-06 08:37:07 · 1152 阅读 · 9 评论 -
Linux权限(超详细彻底搞懂Linux的权限)
inux下有两种用户,超级用户(root)和普通用户超级用户:可以在Linux下做任何事情不受限制。普通用户:在Linux下受限。可以通过whoami指令查看,当前是超级用户还是普通用户。原创 2024-12-05 08:00:00 · 7649 阅读 · 82 评论 -
Linux常见指令(初学者必看)
语法:pwd功能:显示当前用户所处路径。当没有对用户路径进行操作的时候,显示默认所路径。语法:ls[选项][目录]功能:显示当前目录下的文件ls-l 列出目录下文件的详细属性(ll指令和ls-l相同)ls-l-a 列出当前目录下的所以文件 包含隐文件下面包含不常用指令语法:cd 目录名功能:改变工作目录。将当前工作目录改变到指定的目录下。cd … 是返回上级目录cd /home/litao/linux/ : 绝对路径cd …/day02/ : 相对路径cd ~:进入用户家目cd -:原创 2024-10-12 17:31:30 · 2886 阅读 · 88 评论