
初识Linux · 系统篇
文章平均质量分 92
初识Linux
_lazy.
人生就是旷野!学习也是。
展开
-
初识Linux · 基本指令(1)
今天是Linux系列的第一章节,对于Linux的主线学习大概会更新两个半月左右,中间穿插着算法等的学习,那么这里对于Linux的历史背景就不赘述了,有兴趣的同学可以上网自行搜索。我们首先抛出几个问题,为什么我们要学习Linux?Linux究竟是什么?Linux相对于闭源的操作系统来说有什么优点?Linux的应用场景是哪里?第一,为什么学习Linux?在当今的科技时代中,Linux在其中扮演着举足轻重的角色,不仅是为了加强IT职业的素养,对于从事这门工作的人来说Linux是必须要掌握的技术。原创 2024-08-19 00:00:00 · 2143 阅读 · 32 评论 -
初识Linux · 基本指令(2)
上文是Linux的部分基础指令,主要是开胃菜,先熟悉一下,但是本文还是指令的学习。但是在学习指令之前,我觉得我们应该对指令一个正确的认识,所以在前言部分我们先使用windows进行些许介绍,看:当我们打开谷歌浏览器的快捷方式,以及打开该exe文件的时候,打开的都是同一个谷歌浏览器,难道没有人怀疑为什么快捷方式可以直接打开浏览器吗?这是因为快捷方式的本质就是指向的该exe文件。同理,指令本质上就是一个一个的可执行程序。原创 2024-08-19 01:11:44 · 927 阅读 · 10 评论 -
初识Linux · 基本指令(完)
本文是Linux基本指令的最后一节了,涉及的指令较多~有了前文的铺垫,我们知道指令的最基本的知识点是指令就是可执行程序,知道这个就够了,其次,我们在这里引入一个思想,Linux中一切皆文件,即便是显示器,也是文件,至于为什么,看下文咯。原创 2024-08-20 06:39:24 · 1524 阅读 · 13 评论 -
初识Linux · 权限
继上文我们将常用的指令介绍的七七八八了,本文着重探索Linux文件中的权限部分,上文介绍的许多指令都是和文件挂钩的,并且有一句话说得好,Linux中一切皆文件,所以我们本文,先介绍完文件权限的预备知识,再着重介绍一下文件的权限等问题。原创 2024-08-22 01:30:00 · 819 阅读 · 26 评论 -
初识Linux · yum和vim
我们学习Linux的时候,是有编程语言的基础的,那么呢,我们学习Linux的时候最迫切的就是希望能打印出来一点东西,所以在最开始的几章的时候,我们学会了使用nano,来打印Hello world:但是使用nano实在是没有vim好,比如我们要快速的定位,快速的删除等,所以本文会着重介绍vim,对于yum,我们一开始就用上了,第一次接触man的时候,我们就是yum install man,安装我们的Linux青春修炼手册,所以我们大致对yum也有了一定的了解,本文的第一个重点就是介绍yum。原创 2024-08-22 19:18:13 · 1285 阅读 · 23 评论 -
初识Linux · 有关gcc/g++
继上文介绍了vim 和 yum,相当于介绍了 文本编译器,我们可以利用vim写代码,那么写代码的我们了解了,现在应该了解编译器了吧?这不,gcc 和 g++就出来了,我们就简单介绍一下gcc 和 g++的一些区别,咱们的侧重点是在程序的翻译上面。原创 2024-08-28 04:00:00 · 1915 阅读 · 23 评论 -
初识Linux · 有关makefile
我们上文介绍了gcc和g++的基本使用,带了许多的子指令,但是有的时候啊,一个一个敲指令确实有点麻烦了,此时,一个工具就能派上用场,即自动化工具makefile。我们不妨理解为语言中的宏,命令的重新命名都可以通过makefile来表示,这就大大简化了工程量了,所以,有的时候makefile的使用从侧面也决定了工程的完备程序以及效率问题。原创 2024-09-03 22:46:04 · 1023 阅读 · 29 评论 -
初识Linux · 有关gdb
当我们Linux学到了这里的时候,我们大概会有一种感觉是,从VS2022转战Linux,写代码对我们来说是一种重新构建读写代码的一个过程,从文本编辑器,到文本编译器,再到今天的调试器gdb,读写代码的每个部分在Linux这里都是单独拉出来的,所以不免许多人会感受到困难,甚至于某些简单的代码在Linux这里都有点感觉晦涩难懂了,但是呢,难关总会过去的,咱们今天把gdb一看,我们就能再跨越代码的一大关卡 -调试。原创 2024-09-07 21:40:14 · 1308 阅读 · 23 评论 -
初识Linux · 进度条
我们目前学习了些许知识,已经足够支持我们写一个非常非常小的项目了,即进度条,相信大家都有过下载游戏,等待游戏更新完成的时候,那么此时就有一个进度条,代表着游戏的更新进度,那么我们今天就来模拟实现这个过程,在此之前,我们需要一些预备知识。原创 2024-09-07 21:40:37 · 1328 阅读 · 40 评论 -
初识Linux · 进程(1)
都说类和对象是C++中的第一个里程碑节点,那么Linux系统编程部分的第一个里程碑节点就是进程的引入,可以说我们前面的所有学习,都没有真正的开始学习Linux,我们只不过是从0开始了解一个新的软件的最基本使用而已,我们现在开始了解的是更深层次的东西,所以学习进程之前,我们应该具备一定的预备知识,所以本文注重的是预备知识,后面再介绍进程。原创 2024-09-11 15:31:17 · 1237 阅读 · 33 评论 -
初识Linux · 进程(2)
本文会开始慢慢切入进程了,当然,切入进程之前,我们需要再次复习一下操作系统,后面接着是介绍什么是进程,如何查看进程,在Linux中对应的文件是哪个等相关的问题,进程大概会持续更新多节,所以说进程的知识点还是相当杂乱的,就更需要同学们予以注意了。原创 2024-09-11 23:08:57 · 1122 阅读 · 18 评论 -
初识Linux · 进程(3)
继上文介绍了着重介绍了进程的内部属性,以及在操作系统层面进程如何被组织起来的,如何调用系统接口,有关task_struct,进程的部分理解等,今天,我们就从进程的相关属性入手,原创 2024-09-15 10:24:20 · 1351 阅读 · 31 评论 -
初识Linux · 进程(4)
承接上文,进程1到3我们分别介绍了从操作系统层面认识进程,什么是进程,进程的相关属性有哪些,如何创建进程,以及颠覆三观的函数fork,最后介绍了从哪里看进程的部分详细信息,以及深化了一下Linux中一切皆文件的思想->因为进程本质上也是目录!本文作为进程的收尾工作,要介绍的是进程的状态,什么是僵尸进程,什么是孤儿进程,简单描述进程的调度问题,调度问题会在地址空间详细介绍,以及进程的优先级问题,进程的切换问题等。原创 2024-09-15 23:12:16 · 1439 阅读 · 28 评论 -
初识Linux · 环境变量
今天介绍的是一个较为陌生的名词,环境变量,在学习环境变量之前,我们需要一定的预备知识,这个预备知识是命令行参数,所以今天我们介绍环境变量的时候,介绍顺序是先介绍命令行参数,然后直接看有关环境变量的现象,到更多的环境变量,最后我们尝试来理解环境变量。现在进入第一个话题,预备知识——命令行参数。原创 2024-09-20 00:00:00 · 1789 阅读 · 59 评论 -
初识Linux · 地址空间
本文介绍的是有关地址空间,咱们的介绍的大体思路是,先直接看现象,通过现象我们引入地址空间的概念,然后是简单的介绍地址空间,如何理解地址空间等,在往后的学习中,我们大概会介绍地址空间3 - 4次,因为地址空间有很多内容一次性还介绍不完,并且在本文中,我们能够理解之前颠覆代码三观的函数——fork(),现在就进入正题。原创 2024-09-30 00:00:00 · 2201 阅读 · 69 评论 -
初识Linux · 进程终止
由上文的地址空间的学习,我们已经知道了进程不是单纯的等于PCB + 自己的代码和数据,进程实际上是等于PCB + mm_struct(地址空间) + 页表 + 自己的代码和数据。在地址空间那里我们结合写时拷贝重新理解了进程具有独立性,也理解了为什么fork函数会返回所谓的两个值,那么今天的话题是进程控制,我们拿fork举例,为什么fork返回给父进程的是子进程的pid,而子进程返回的值的0呢?原创 2024-09-30 00:00:00 · 1193 阅读 · 33 评论 -
初识Linux · O(1)调度算法
在初识进程的那一块,我们已经知道了进程并不是一直占用cpu资源的,而是存在时间片的概念,即,每个进程都有一定的时间来执行该进程,时间一到,该进程就应该自动到后面进行排队,同时,进程的数据也应该被不同的寄存器记录下来,方便下一次执行该进程的时候,可以接着上次结果运行。那么问题就来了,进程被调度的时候,是如何调度的,如果调度的过程中,有别的进程来排队,那么会不会导致随着进程数量的增多,导致进程排队的时间越来越多,最后甚至运行不了?原创 2024-10-01 00:00:00 · 2251 阅读 · 59 评论 -
初识Linux · 进程等待
通过上文的学习,我们了解了进程终止,知道终止是在干什么,终止的三种情况,以及有了退出码,错误码的概念,对于错误码,我们知道不同的人对于错误码有自己的一套体系,对于退出码,我们知道可以使用echo $?来查看,并且知道了如果终止进程。那么本文,我们来学习进程等待,我们从三个方面来看,进程等待是什么?为什么要等待?等待是在做什么?从以上几个方面,相信同学对于Linux中的进程等待有更深层次的理解。原创 2024-10-01 01:30:00 · 2101 阅读 · 51 评论 -
初识Linux · 进程替换
由前面的章节学习,我们已经了解了进程状态,进程终止以及进程等待,今天,我们学习进程替换。进程替换我们从如下几个点开始介绍,第一,直接看现象,第二,解释原理,第三,将代码改成多线程版本,第四,使用所有的替换函数,认识参数的含义。废话不多说,直接进入主题。原创 2024-10-03 22:05:28 · 2302 阅读 · 67 评论 -
初识Linux · 自主Shell编写
本文介绍是自主Shell编写,对于shell,即外壳解释程序,我们目前接触到的命令行解释器,有bash,还有SSH,对于今天模拟实现的Shell编写,我们模拟的是bash,以及需要的预备知识前文已经介绍了,进程的多方面的知识,在自主Shell编写里面比较重要的是进程程序替换,进程终止,进程等待,进程状态什么的,都是自主Shell编写里面的辅助知识罢了。那么,话不多说,我们直接进入到Shell编写部分。原创 2024-10-04 17:59:16 · 1517 阅读 · 37 评论 -
初识Linux · 文件(1)
本文以及下篇文章,揭露的都是Linux中文件的奥秘,对于文件来说,初学Linux第一节课接触的就是文件,对于C语言,我们使用fopen可以打开文件,对于C++,我们可以使用ofstream可以打开文件,那么对于这么多打开文件的方式,难道每个不同的语言,我们都要单独去学习如何使用对应的函数吗?当然不是,我们不妨回想最初学习的OS的结构图:对于该结构,我们设想一个问题,文件属于哪里?文件属于磁盘,而磁盘属于硬件,那么对于文件来说,我们能跨过OS直接操控文件吗?当然不可以,那么C语言提供的文件函数是否……原创 2024-10-05 21:28:17 · 1762 阅读 · 76 评论 -
初识Linux · 文件(2)
由前文文件(1)的介绍,我们引出了三个问题:高级语言和系统调用函数之间是否存在关系?fd返回值的012和C语言打开的三个流是否有什么关系?不同的宏和不同函数的选项之间是否存在某种关系?这是我们文件一里面引发的问题,那么在文件(2)里面呢,我们通过对文件深层次的理解,就会知道,以上三个问题的答案了。那么现在,我们就进入主题吧。原创 2024-10-14 02:00:00 · 1492 阅读 · 37 评论 -
初识Linux · 重定向和缓冲区
理解重定向是如何实现的?那么对于第二个目标,就是加深对缓冲区的理解。以上是本文的概念,那么进入主题吧。原创 2024-10-19 00:00:00 · 1043 阅读 · 85 评论 -
初识Linux · 预备文件系统
我们在上文探讨的问题都是基于文件是被打开的情况,那么对于文件没有被打开的情况,我们是没有探讨过的,而本文作为文件系统的预备知识,着重介绍的硬件,对,没错,是硬件部分,介绍的是磁盘方面的知识。有人会好奇,我们学习文件系统和硬件内容有什么关系呢?一个是OS层面的,一个是外设层面的。->在冯诺依曼结构体中,cpu可是不能直接和外设打交道的,要借助OS,所以我们有必要学习磁盘,借助于磁盘的学习,我们对文件系统理解会更加容易一点。原创 2024-10-23 00:00:00 · 1637 阅读 · 70 评论 -
初识Linux · 重定向和缓冲区(续)
本文是重定向和缓冲区的续篇,所以篇幅并不会很长。本文的主要目标是介绍stderr,对于0 1 即stdin stdout默认打开我们是能够理解的,stderr是什么我们好像并没有使用过?并且本文会加深一下缓冲区的理解和重定向的理解。那么话不多说,进入正题吧。原创 2024-10-23 00:00:00 · 2055 阅读 · 80 评论 -
初识Linux · 文件系统
前文我们介绍了磁盘,介绍磁盘的原因是因为我们需要在理解文件系统之前,通过磁盘的了解,介绍一些文件相关的内容,比如文件是如何在磁盘里面存储的,什么是CHS定址法,为什么OS不使用CHS定址法,什么是LBA块等。我们今天的介绍顺序是,先简单搭建起来对文件系统的理解,再深挖细节问题。那么,进入今日的话题吧!原创 2024-10-24 00:00:00 · 2780 阅读 · 81 评论 -
初识Linux · 软硬链接
前文我们介绍了磁盘系统的理解,并且基于磁盘系统对文件系统的整体框架有了一个简单的理解,我们都是通过“想要见识没有打开的文件”这个话题引出来了以上的两个主题,紧随其后的,是软硬链接部分,对于软硬链接部分,我们仍然从是什么 为什么 怎么做来了解这部分的知识点。那么,进入主题吧!原创 2024-10-25 19:49:03 · 980 阅读 · 46 评论 -
初识Linux · 动静态库(incomplete)
继上文,我们从磁盘的理解,到了文件系统框架的基本搭建,再到软硬链接部分,我们开始逐渐理解了为什么运行程序需要./a.out了,这个前面的.是什么我们也知道了。可是我们在文件权限部分,我们已经见识了最基本的库,知道了Linux的动态库的后缀是.so 静态库是.a,Windows系统的动态库是.dll,静态库是.lib。并且我们知道库的名字要去掉前缀,去掉后缀。这是我们最开始的对于库的认识。那么我们是否是否使用过库呢?原创 2024-10-26 22:58:11 · 1223 阅读 · 63 评论 -
初识Linux · 匿名管道
引入管道之前,我们引入几个问题,进程通信的相关问题。第一个是进程之间为什么要通信,对于进程间通信来说,进程是具有独立性的,而进程 = 内核数据结构 + 代码数据,进程通信就是因为需要协同,协同的本质是通过数据的的流动来协同的。所以第二个问题,进程如何通信?进程间通信是通过数据进行通信的,那么也就是说A进程给某些数据,B进程需要接受到这个数据,可是以什么作为数据流通的平台呢?此时管道就出场了,管道可以说是作为信息的载体保证两个进程之间可以通信。原创 2024-11-11 00:00:00 · 2028 阅读 · 72 评论 -
初识Linux · 命名管道
有了前文匿名管道的基础,我们介绍匿名管道的时候就轻松许多了,匿名管道和命名管道的区别主要是在于,匿名管道不需要文件路径,并且匿名管道常用于父子进程这种具有血缘关系的场景,使用命名管道的时候,我们常常用于的情况是两个进程毫无联系,使这两个毫无关系的进程可以进行通信。对于匿名管道来说,我们知道文件对象以及文件对象里面的文件对象里面属性集合,操作集合都不会重新创建,对于命名管道来说也是一样的,所以对于内核级别的文件缓冲区也是这个样子的,OS就没有必要创建两个了,毕竟浪费空间时间的事OS可不想做。原创 2024-11-11 00:00:00 · 1125 阅读 · 39 评论 -
初识Linux · 共享内存
size代表的是开辟的共享内存的大小,对于shmflg,也就是共享内存的标志,我们这里就介绍两个常用的,一个是IPC_CREAT 一个是IPC_EXCL,使用时候我们可以分为IPC_CREAT使用,IPC_EXCL单独使用没有意义,IPC_CREAT | IPC_EXCL使用。其中key是16进程的,所以我们前面会转成16进程的方便观察,shmid是0,owner是lazy,perms权限为0,共享内存的大小是4096,nattch对应的是0,代表的意思是挂接的进程为0,status状态。原创 2024-11-12 03:45:00 · 1325 阅读 · 14 评论 -
初识Linux · 消息队列和信号量
对于消息队列,信号量,共享内存都是隶属于system V这个标准下的进程间通信,其实上文的共享内存已经是基本上快被淘汰的了,对于其他的两个,消息队列和信号量,我们这里主要是以介绍为主,怎么具体的使用就暂时先不介绍了,主要是通过原理和函数部分进行介绍。并且其实在网络部分,也会重新介绍信号量,所以这里我们主要是了解即可。原创 2024-11-13 17:51:55 · 622 阅读 · 7 评论 -
初识Linux · 信号产生
前文已经将进程间通信介绍完了,介绍了相关的的通信方式。信号和信号量之间的关系是什么呢?答案是,它们之间的区别就是老婆和老婆饼之间一样,没有关系。对于信号部分,我们分为四个阶段来介绍,一个是信号的预备知识,一个是信号产生,一个是信号保存,一个是信号处理。在本文中,介绍信号的预备知识和信号产生。那么话不多说,直接进入主题吧!原创 2024-11-14 22:52:31 · 2439 阅读 · 5 评论 -
初识Linux · 信号保存
前文我们已经介绍了信号产生,在时间的学习线上,信号的学习分为预备知识,信号产生,信号保存,信号处理,本文我们学习信号保存,在前言部分,我们介绍几个信号保存中的概念。信号递达:实际执行信号的处理动作。信号未决:信号从产生到递达之间的状态。对于信号产生之后,在递达的这个过程,成为未决,就像老师给你布置了作业,你接受到了做作业的这个信号,但是因为贪玩,不想做,这个状态,就是未决。原创 2024-11-15 21:49:51 · 1358 阅读 · 8 评论 -
初识Linux · 信号处理
按照信号学习的时间戳,从信号的预备知识,到信号的产生,到了信号的保存,终于,我们进入了信号学习的尾声,信号处理部分。那么,信号处理部分,我们介绍的顺序是从捕捉信号入手,到多个子问题,子问题包括了内核态VS用户态,其中要了解的是再谈地址空间,谈谈键盘输入数据的过程,谈谈如何理解OS正常的运行,在OS正常运行这里,理解系统调用,理解OS如何运行的,最后是内核态和用户态的VS。那么话不多说,我们直接进入主题吧!原创 2024-11-17 20:15:45 · 1110 阅读 · 6 评论 -
初识Linux · 信号处理 · 续
在前文,我们已经介绍了信号产生,信号保存,信号处理的主题内容,本文作为信号处理的续篇,主要是介绍一些不那么重要的内容,第一个点是可重入函数,第二个点是在信号处理这里的进程等待。那么话不多说,我们进入主题吧!原创 2024-11-18 20:33:04 · 1331 阅读 · 8 评论 -
初识Linux · 线程概念
Linux的学习从开始到现在,我们已经经历了许多大boss,从一开始的熟悉指令,到第一次在gcc环境下编译C语言的代码,到理解文件系统,比如理解了文件的权限,万物皆文件的概念,此时,是我们经历的第一次大boss,文件系统。原创 2024-11-20 21:10:39 · 1218 阅读 · 5 评论 -
初识Linux · 线程控制(1)
前文我们已经介绍了线程的基本概念,知道查看线程是使用ps -aL查看,并且因为线程的特殊性,我们必须在用户层和操作系统层面接一层库,也就是线程库,编译程序的时候需要将程序link到线程库里面。我们也见识了最基本的线程创建,使用函数pthread_createa,但是仅仅从创建来学习线程,或者说仅仅从概念中学习线程的所有内容实在是有一点不可靠,所以本文我们介绍线程的各种操作。大体的介绍思路是我们从各种角度的问题出发,问题介绍的差不多了,欸我们不妨自己试试模拟实现一个所谓的线程。int main()原创 2024-12-09 00:43:25 · 992 阅读 · 5 评论 -
初识Linux · 线程控制(2)
在前面Linux的线程控制1中,我们介绍了如下的几个问题:主线程和子线程的执行顺序,主线程先退出还是子线程先退出,什么是tid,全面看待线程函数传参,全面看待线程函数的返回值。以上是N个子问题的部分问题,本文,我们要学习N个子问题的剩余问题以及我们要简单的模拟实现一下线程。那么话不多说,我们直接进入主题吧!原创 2024-12-09 00:43:34 · 678 阅读 · 9 评论 -
初识Linux · 线程互斥
本文的主题是线程互斥,但是我们不能光单独的把概念引出来,我们肯定要一个场景,所以我们将抢票这个场景引出来,模拟一下抢票的场景,随即引出今天的主题。那么对于线程互斥这个主题,我们从以下几点介绍:认识锁和它的接口->解决历史问题->原理角度理解锁->实现角度理解锁。当然了,因为没有理解抢票这个场景,所以我们暂时不知道锁是什么是正常的,那么,直接进入主题吧!原创 2024-12-10 00:00:00 · 1039 阅读 · 10 评论