
Linux学习之旅
文章平均质量分 94
学习Linux的路线
Stark、
一只“程序猿”:目前了解有C#、Java、Python,熟悉C/C++,linux系统编程,MySQL数据库,数据结构与算法等。
其它涉及知识:HTML基础、Qt框架、Git、Redis工具等
持续学习路线:工具链(Docker等)、前端(CSS、JavaScript、Vue等)、后端(网络编程、后端框架等)
感兴趣的方向:人工智能(机器学习、强化学习、深度学习;大模型:LangChain框架、垂直领域整合)
座右铭:梦想是一盏明灯,照亮我们前行的路,无论风雨多大,我们都要坚持不懈。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux网络编程】Socket编程-Socket理论入门
本文介绍了计算机网络通信的基础知识,重点探讨了Socket编程的理论基础。首先,文章解释了IP地址和MAC地址的作用及其格式,IP地址用于网络中的逻辑标识,而MAC地址则是硬件设备的唯一标识。接着,文章详细介绍了ARP和RARP协议,这些协议用于在IP地址和MAC地址之间进行转换。随后,文章深入探讨了Socket的概念,Socket是网络编程的抽象接口,分为流式Socket和数据报式Socket,分别基于TCP和UDP协议。文章还介绍了网络字节序的概念,API函数、Sockaddr地质结构原创 2025-05-18 15:32:47 · 887 阅读 · 0 评论 -
【Linux网络编程】Socket编程:协议理论入门
网络协议(Protocol)是一种特殊的软件,是计算机网络实现其功能的最基本机制。但网络协议不是一套单独的软件,它融合于其它所有软件系统中,因此,协议在网络中随处可见。从顶层软件,到底层硬件,每一层都遵循一定的协议规则。TCP:Transmission Control Protocol,传输控制协议。是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP:User Datagram Protocol,用户数据报协议。是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。原创 2025-05-17 18:35:29 · 1113 阅读 · 0 评论 -
【Linux系统编程】多线程编程:semaphore(信号量)实现生产者消费者模型
信号量是操作系统提供的一种协调共享资源访问的方法。信号量是由内核维护的整型变量(sem),它的值表示可用资源的数量。【重点:信号量的值 -- 表示可用资源的数量】核心作用:互斥访问:控制邻接区的独占访问(类似于互斥锁)【场景一】资源计数:管理有限数量资源(如数据库连接池等)【场景二】线程同步:协调多线程执行顺序(生产者消费者模型) 【场景三】信号量的类型:二进制信号量:信号量只取0或1,功能类似于互斥锁(Mutex)计数型信号量:信号量值为非负整数,表示资源数量,用于管理多个同类资源。原创 2025-02-15 10:30:00 · 1285 阅读 · 0 评论 -
【Linux系统编程】多线程编程:cond(条件变量)实现生产者消费者模型
线程同步典型的案例即为生产者消费者模型,而借助条件变量来实现这一模型,是比较常见的一种方法。假定有两个线程,一个模拟生产者行为,一个模拟消费者行为。两个线程同时操作一个共享资源(一般称之为汇聚),生产者向其中添加产品,消费者从中消费掉产品。相较于互斥量而言,条件变量可以减少竞争。如直接使用互斥量,除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果汇聚(链表)中没有数据,消费者之间竞争互斥量是无意义的。有了条件变量机制以后,只有生产者完成生产,才会引起消费者之间的竞争。原创 2025-02-14 10:54:49 · 1232 阅读 · 0 评论 -
【Linux系统编程】多线程编程:线程同步机制-rwlock(读写锁)
读写锁(Readers-Writer Lock)是一种多线程同步机制,用于控制对共享资源的访问。与传统的互斥锁(Mutex)不同,它允许多个读操作同时进行,但写操作必须独占访问。这可能比普通的互斥锁更高效,特别是在读多写少的场景下。使用读写锁的场景通常包括共享数据结构如缓存、数据库等。比如,一个数据库系统中,如果读请求(如查询)远大于写请求(如更新),使用读写锁可以让多个查询线程并行访问数据,从而提升系统的响应速度。原创 2025-02-14 09:19:09 · 816 阅读 · 0 评论 -
【Linux系统编程】多线程编程:线程同步机制-mutex(互斥量/互斥锁)
线程同步是指多线程通过特定的设置(如互斥量,条件变量等)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的!线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。子线程没有独立的地址空间,大部分数据都是共享的,如果同时访问数据,就会造成混乱,所以要进行控制,线程之间要协调好先后执行的顺序。原创 2025-02-08 11:06:38 · 1341 阅读 · 0 评论 -
【Linux系统编程】多线程编程:线程同步机制-SpinLock(自旋锁)
自旋锁(Spinlock)是一种 同步机制,用于多线程或多核环境中保护共享资源。其核心特点是:当一个线程尝试获取锁时,若锁已被占用,该线程会通过 循环忙等待(Busy-Waiting) 持续检查锁状态,而非进入阻塞状态。这种机制避免了上下文切换的开销,但会占用 CPU 资源。对比互斥锁互斥锁在获取不到锁的时候会让线程进入睡眠状态,而自旋锁则是让线程一直循环检查锁的状态,直到获取到锁为止。这样在等待锁的时候不会让出CPU,所以适用于锁持有时间非常短的场景,避免上下文切换的开销。原创 2025-02-08 11:31:40 · 850 阅读 · 0 评论 -
【Linux系统编程】多线程编程-POSIX线程
在Linux中,线程是系统调度的基本单位,是进程中的一个执行流。线程共享进程的资源(如内存空间、文件描述符等),但拥有独立的执行上下文(如栈、寄存器等)。原创 2025-02-06 11:18:43 · 1252 阅读 · 0 评论 -
【Linux系统编程】进程间通信(管道:匿名管道、命名管道、实战练习)
进程间通信是不同进程间交换信息的一种机制。进程可能在同一台计算机上,也可能在网络中的不同计算机上。原创 2025-02-03 20:02:44 · 845 阅读 · 0 评论 -
【Linux底层探究】一步一图带你理解虚拟内存与物理内存的映射过程
之前我们学过虚拟内存的布局模型,今天我们来了解一下虚拟内存于物理内存的映射过程。原创 2025-01-21 20:13:56 · 1508 阅读 · 0 评论 -
【Linux系统编程】进程管理(一篇入门-进程:基本概念、PCB进程块、进程的创建、等待、终止、状态,exec函数族的使用)
本节主要内容:进程的一些基本概念,进程控制块PCB,以及如何在一个C程序里创建进程、终止进程、等待进程,包括孤儿进程、僵尸进程等特殊状态的进程,并涉及回收进程的概念。最终是exec函数族的函数使用方法及用途。程序与进程:程序是已经写好的并经过编译后得到的二进制文件;进程是运行起来的二进制文件。所以在这里,我们可以浅显的将程序理解为死的,而进程是活的。比较形象的类比是:程序是一个剧本,进程是一场演出。一方面:剧本只占用一张纸的资源,而演出需要耗费人力、物物力、时间、场地等等资源。原创 2025-01-21 18:29:52 · 1033 阅读 · 0 评论 -
【Linux系统编程】文件系统--文件存储/软硬链接/inode/dentry
在当今的计算机世界中,文件系统是操作系统中至关重要的一部分,它负责管理数据的存储和访问。尤其是在Linux系统中,,还影响了系统的性能和安全性。了解Linux文件系统的结构和工作原理,可以帮助我们更有效地管理文件、优化系统性能,并解决潜在的问题。接下来,我们将深入探讨Linux文件系统的基本概念、常见类型以及它们的特点。原创 2025-01-08 10:50:15 · 1071 阅读 · 0 评论 -
【Linux系统编程】文件IO--fcntl/lseek/阻塞与非阻塞/文件偏移
本文主讲:阻塞与非阻塞、文件偏移量、fcntl函数与lseek函数,中间会涉及一些其他的概念:例如,位图、位或运算符在linux中的用法等。原创 2024-12-22 18:41:42 · 935 阅读 · 0 评论 -
【Linux系统编程】文件IO--read/write/缓冲区(详)
本文主要将文件IO的第二部分:read和write,以及使用read和write实现简单的cp功能,从Linux命令行向main函数中传递参数,额外会有缓冲区的相关知识。原创 2024-12-20 21:10:24 · 2418 阅读 · 0 评论 -
【Linux系统编程】基本概念
本文主要介绍一些系统编程阶段的一些常见概念:操作系统、内核、系统调用(详细讲解)、中断、程序和进程、虚拟内存、并发(通俗讲解)。原创 2024-12-19 23:27:05 · 1291 阅读 · 0 评论 -
【Linux系统编程】文件IO--open/close/文件描述符(详)
文件描述符是Unix/Linux系统中进程与文件、设备之间的接口,是操作系统中分配给每个打开文件或资源的一个非负整数。本文包括:文件描述符、open/close函数。在文件描述符部分,我们将拓展PCB进程控制块、文件描述符、最大打开文件数、FILE结构体的认识。原创 2024-12-20 20:43:01 · 1861 阅读 · 0 评论 -
【Linux项目实战】进度条
在C语言和Linux环境中,\r是回车符,\n是换行符,用于控制文本格式和输出。在创建进度条小程序前我们应该理解这两个字符的含义。进度条是一个什么样子的呢?首先有一个待填充进度槽,有填充内容,有进度百分比显示,有加载动画。原创 2024-12-16 22:45:50 · 2211 阅读 · 69 评论 -
【Linux开发工具】makefile项目管理
在Shell编程中,变量是用于存储数据值的名称。注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不太一样。同时,变量命名需要遵循以下规则:1.只含字母、数字、下划线:字母大小写敏感,不能以数字开头,这条和C/C++一样,注意一下即可。2.避免使用关键字:C/C++也是需要避免关键字的,Shell也一样,需要避免的关键字例如:(if,then,else,fi,for,while)3.使用大写字母表示常量:Shell的常量就类似于宏了,一般使用全大写字母命名,如PI=3.14等。原创 2024-12-15 20:16:53 · 2018 阅读 · 47 评论 -
【Linux开发工具】gdb调试器
【list number】【l number】:list或小写L,用于查看代码,从number开始往下十行,如果不输入number,那么默认从未读的第一行开始,比如:刚开始调试时,我输入了一个l,那么他会向你展示文件的从第1行开始的10行代码,然后紧接着输入l,那么它将从第11行开始往下10行。我们通过list查看当前位置(应该是第10行)附近的十行内容:我们看到,第8行为int main,第9行为花括号{,所以第10行才是真正的main函数内的第一条语句所在行。【run】【r】:输入后,开始执行代码。原创 2024-12-12 22:05:57 · 955 阅读 · 0 评论 -
【Linux底层探究】虚拟空间布局模型&地址回填&数据段合并(万字详解)
包括上节的动态库与静态库,加上本节后面两个内容其实都是对gcc的扩展与补充知识,也是需要了解和掌握的知识。在开讲之前,我们先来说一下在32位x86的Linux系统中,虚拟地址空间布局模型:(系统编程阶段有重要意义)①text段:用来存放程序执行的内存区域。这部分区域的大小在程序运行前确定,并且内存区域通常是只读(某些架构也允许代码段为可写,即允许修改程序)。②rodata段:read only data segment,即只读数据段。存放一些,例如字符串常量等。③data段:用来存放程序中。原创 2024-12-12 12:18:03 · 1274 阅读 · 0 评论 -
【Linux系统编程】动态库&静态库
库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译成库文件;在链接步骤中,链接器从库文件取得所需的代码,复制到生成的可执行文件中。Linux中常见的库文件有两种,一种以.a为后缀,为静态库,另一种以.so为后缀,为动态库,动态库也称为共享库。原创 2024-12-11 18:01:23 · 1147 阅读 · 0 评论 -
【Linux开发工具】gcc编译器
在预处理阶段,预处理器会读取C语言源代码,对其中的预编译指令(如#include,#define,#pragma等)进行处理。这一步会展开宏定义、处理条件编译指令、插入头文件内容、删除注释等。处理后的代码文件通常以.i为拓展名,但该文件还是C代码。:在编译阶段,编译器将预处理后的代码转换为机器可识别的语言,也就是汇编代码。这一步包括语法分析、语义分析、检查代码的规范性,确保没有语法错误。处理后的代码通常以.s为扩展名。原创 2024-12-10 23:44:17 · 1335 阅读 · 0 评论 -
【Linux开发工具】vim编辑器
本文包括Linux中的vim编辑器的:配置、基本命令。以及命令模式、末行模式、编辑模式这三种模式的切换方法,命令模式的基本命令、末行模式的基本命令,最后还有vim的分屏操作。文章末尾附上一张vim键盘图。原创 2024-12-10 22:41:36 · 1392 阅读 · 0 评论 -
【Linux基础命令】补充总结
本文包括一些其他的基本的指令。主要可以帮助大家:ifconfig:查看ip地址、hostname:重命名主机名、alias:为命令起别名、使用指令关机重启、观察系统资源、查看用户信息和系统信息等原创 2024-12-06 09:11:46 · 656 阅读 · 0 评论 -
【Linux基础命令】压缩与解压
为了使传输的文件大小尽可能地小,我们采用压缩的方式生成压缩文件,然后将压缩包传输过去就可以了。衡量压缩方法地好坏主要有两点综合考量:一是压缩速度,二是压缩程度。很好理解,压缩一个文件,我当然不能一直等他压缩吧,不然还赶不上直接传输呢。另外,压缩程度不够的话,文件还是那么大,这跟我们的诉求不一样啊,我们就是为了尽可能地小,它压缩一下就压缩了百分之一,这还不如不压缩,毫无意义。不知道大家学过数据结构中地哈夫曼树吗,哈夫曼编码就是一种压缩算法。原创 2024-12-03 10:44:15 · 1311 阅读 · 0 评论 -
【Linux基础命令】用户与权限
【】用户是Linux系统工作中重要的一环,用户管理包括 用户 与 组账号 的管理【】在Linux系统中,不论是由本机或是远程登录(SSH)系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。【】Linux系统中的root账户通常用于系统的维护和管理,它对Linux操作系统的所有部分具有不受限制的访问权限。【】在Linux安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”【】在大多数版本的Linux中,都不推荐直接使用root账号登陆系统。原创 2024-11-27 17:32:56 · 1093 阅读 · 0 评论 -
【Linux基础命令】软件包安装
在我们安装Linux系统的时候,不同的发行版本提供的默认指令有所不同,如果你想使用一些命令,可以从Ubuntu或Centos服务器去下载这些命令。(本文以Ubuntu为例进行讲解)。假设现在我们有三台机器,想要获取下载一些命令用来后续工作使用或解决当下工作需求。按照我们的理解,就是这样的,直接从Ubuntu服务器下载。这样也对,但也不对,因为Ubuntu的服务器在国外。原创 2024-11-27 17:07:59 · 2805 阅读 · 0 评论 -
【Linux基础命令】查阅与统计
在使用linux时,我们免不了指令的使用、查看文件的内容以及统计文件的字词行数等信息。本文包含指令:which、man、whoami、pwd;cat、head、tail、less、more;wc、find。包含的重要知识点有:帮助指令,文件内容的查询、统计与查找,输出重定向,管道。原创 2024-11-25 14:19:28 · 1590 阅读 · 0 评论 -
【Linux基础命令】文件与目录
在Linux中,有着一句话,叫做:一切皆文件。也就是任何东西都是以文件的形式存储的。本文包含的指令有:ls、pwd、cd、du;mkdir、touch、cp、mv、rm等。还有文件的分类等信息原创 2024-11-24 23:42:36 · 1059 阅读 · 0 评论