
Linux
文章平均质量分 86
两片空白
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux查找命令使用的正则表达式
正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。正则表达式可以在文本中查找、替换、提取和验证特定的模式。一般的查找命令是:grep,sed,awk。原创 2023-09-15 11:27:46 · 333 阅读 · 0 评论 -
sed命令_Linux sed命令:替换、删除、更新文件中的内容
sed 是 stream editor 的缩写,中文称之为“流编辑器”。sed 命令是一个面向行处理的工具,它以“行”为处理单位,针对每一行进行处理,处理后的结果会输出到标准输出(STDOUT)。你会发现 sed 命令是很懂礼貌的一个命令,它不会对读取的文件做任何贸然的修改,而是将内容都输出到标准输出中。转载 2023-05-08 15:05:24 · 3457 阅读 · 0 评论 -
awk命令
awk默认使用空格,换行符,制表符作为分隔符,可以使用'-F'自定义分隔符。原创 2023-02-10 21:50:50 · 1579 阅读 · 0 评论 -
malloc和free,brk和sbrk和mmap和munmap的使用和关系以及内存分配的原理
写博客原创 2021-11-17 15:52:48 · 2764 阅读 · 0 评论 -
Linux下的软件包管理器(yum),编译器(vim),编译器(gcc/g++),调试器(gdb)使用大汇总
一.软件管理器yum 1.1 概念 在Linux下安装软件,一种办法是下载到程序的源代码,并且进行编译,得到可执行程序。但是这样太麻烦了,于是有些人将一些常用的软件提前编译好,做出软件包凡在一个服务器上,通过软件包管理器就可以方便的获取到编译好的软件包们直接安装。 yum就是Linux下常用的软件包管理器。我们可以通过yum下载某些软件。相当于手机里的应用商店。 在Linux下下载软件的方式由3种下载源代码进行安装 rpm包安装...原创 2021-11-09 16:10:25 · 1213 阅读 · 0 评论 -
Linux常用指令
前言 命令是linux下的一个个可执行程序。执行不用加路径,是因为可执行程序保存在PATH环境变量中。一.基本操作文件相关操作 ls指令 语法:ls [选项] [目录或文件]功能:对于目录,该命令列出该目录的子目录和文件。对于文件列出文件名及其它信息常用选项:-a:列出目录显得所有文件,包括以'.'开头的隐藏文件 -l:列出文件的详细信息ls -als -l == ll//组合使用ls -al pwd命令 语法:pwd功能:显示用户当...原创 2021-11-07 22:35:10 · 10476 阅读 · 1 评论 -
读者写者问题,单例模式,自旋锁
一.读者写者问题 1.1 概念 读者和写者问题,描述的就是有些公共数据修改的机会比较少,读的机会反而很多。在编写多线程时,这种情况时非常常见的。比如:登录账户,每次登录的时候都在不断的读取后台数据库中保存的账户和密码信息,但是用户很少会修改。再比如:看新闻,一条新闻会有很多用户浏览,但是很少会有人修改。 通常情况下,再读的过程中,往往伴随着查找,中间耗时比较长。如果给这种代码加上互斥锁,会极大的降低我们程序的效率。但是又一种锁可以专门解决读多写少的情况,...原创 2021-09-27 10:45:21 · 664 阅读 · 0 评论 -
Linux——线程池
一.概念 线程池:见名知义,就是多个线程构成的集合。其中线程的个数是确定的,并不是固定的。 为什么要有线程池? 如果每次都只创建一个线程,首先当用户请求过多时,每次都需要创建一个线程,创建线程需要时间和调度开销,这样会影响缓存的局部性和整体的性能。其次,如果无上限一直创建线程,还会导致CPU的过分调度。 线程池已经创建好了一定数量的线程,等待着分配任务,这样避免了处理任务时的线程创建和销毁。线程池里线...原创 2021-09-26 11:06:45 · 1678 阅读 · 0 评论 -
Linux多线程——生产者消费者模型
一.生产者消费者模型 1.1 什么是生成者消费者模型 一个进程中的线程有两种角色,一种是生产者,一种是消费者。生产者为消费者提供任务,消费者拿到任务,解决任务。在生成者和消费者之间还有一个"交易场所",是一个内存块。生成者线程将任务放到内存块中,消费者线程在内存块中拿任务。当内存块数据达到一高水位线时,生产者会进行等待,唤醒消费者拿任务,当内存块数据达到一低水位线时,消费者会等待,并且唤醒生产者生产任务。 生成者,消费者存在着3种关系。生产者和生产者之间......原创 2021-09-24 22:03:46 · 4308 阅读 · 2 评论 -
Linux多线程——互斥和同步,死锁
一.线程互斥 1.1 相关概念临界资源:多线程执行流共享的资源叫临界资源。并不一定所有的共享资源是临界资源,是多个线程访问的资源才是临界资源。临界区:每个线程内部,访问临界资源的代码,叫做临界区。 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问灵界资源,通常对临界资源起保护作用。一个能进,一个不能进 原子性:不会被人后调度机制打断的操作,该操作只有两态,要么完成,要么未完成,没有中间态。可以理解成只有一个汇编代码。比如修改一个变量,一个执行流进来,要修改时,又有一...原创 2021-09-24 10:43:20 · 2378 阅读 · 0 评论 -
Linux多线程——概念
前言 Linux系统中并没有真正意义上的多线程,因为linux内核中并没有为线程构建数据结构。它的线程使用进程来模拟的。一.线程的概念 1.1 什么是线程 现在再理解进程:进程是承担分配系统资源的基本实体 线程是进程里的一个执行流,CPU调度的基本单位是线程。就比如上图的一个tast_struct就是一个线程。它们共用一个进程地址空间。一个进程可以有一个或者多个执行流。 由于在Linux中没有真正意义上的线程,...原创 2021-09-22 20:54:20 · 1911 阅读 · 4 评论 -
volatile关键字
volatile作用:保存内存的可见性。告诉编译器,volatile修饰的变量,不允许优化,对该变量的任何操作都必须再真实的内存中进行操作。比如:对2号信号自定义捕捉方式:我们知道变量数据都保存在内存中,但是只有CUP能进行运算。运算时变量的数据会从内存拿到寄存器里。当我们在函数中使用一些不会修改的变量时,编译器可以对其进行优化。因为数据不会改变,我们可以让CPU在运算时,只要在该数据的寄存器里拿数据就好了,就不用到内存拿数据,效率...原创 2021-09-18 18:07:32 · 177 阅读 · 1 评论 -
Linux之信号
一.信号的概念 1.1 认识信号 我们从两方面来认识信号:从生活方面:拿个生活中的例子: 你在网上买了件东西,之后只需要等待快递的到来,在这期间你会去干自己的其它事情,但是你知道你有一个快递。在网上你买了一个东西就是信号的注册,快递员该你打电话要你拿一下快递,就是给你发送了一个信号。你收到信号之后,你知道怎么去处理这个信号,在这里就是去拿快递。但是你也不一定立马去拿,你可能会等你忙完现在的事在去处理。 在...原创 2021-09-18 17:25:46 · 2644 阅读 · 2 评论 -
进程间通信之共享内存
接博客:进程间通信之管道一.共享内存实现进程间通信的原理 共享内存实际是操作系统在实际物理内存中开辟的一段内存。 共享内存实现进程间通信,是操作系统在实际物理内存开辟一块空间,一个进程在自己的页表中,将该空间和进程地址空间上的共享区的一块地址空间形成映射关系。另外一进程在页表上,将同一块物理空间和该进程地址空间上的共享区的一块地址空间形成映射关系。 当一个进程往该空间写入内容时,另外一进程访问该空间,会得到写入的值,即实现了进程间的通信。...原创 2021-09-16 10:00:51 · 15452 阅读 · 7 评论 -
进程间通信之管道
目录前言进程间通信的目的:一.管道 1.1 匿名管道 1.1.1 匿名管道的使用场景 1.1.2 匿名管道实现通信的原理 1.1.3 怎么创建管道1.1.4 怎么实现进程间通信 1.1.5 管道通信额四种情况1.1.6 匿名管道的特征1.2 命名管道 1.2.1 命名管道的原理 1.2.2 创...原创 2021-09-14 19:53:20 · 4014 阅读 · 1 评论 -
理解命令行解释器(shell)原理
目录一.实现的功能二.怎么实现2.1.怎么实现可以执行一般的指令2.2 怎么实现重定向的功能三.具体代码一.实现的功能能够执行一般的指令,如ls -a -l,ps等。支持重定向(输出重定向,追加重定向和输入重定向的功能)。二.怎么实现2.1.怎么实现可以执行一般的指令首先要获取命令行通过fgets命令从标准输入,获得输入的命令。解析获得的命令行将命令行分解,以空格作为分隔符,分割命令行用到字符串函数strtok函数。执行命令我们都知道,命令实际上都是原创 2021-08-25 17:13:37 · 995 阅读 · 0 评论 -
编写一个第三方库(动态库和静态库)
一.定义1.动态库和静态库一个库主要包含的是一批头文件和一个或者多个源文件。头文件是函数的声明,说明有什么方法可以使用。源文件,其实是一些二进制文件(目标文件.o),是具体函数的实现。动态库:在linux下是后缀为.so文件,在windows下是后缀为.dll文件。程序在运行的时候去动态链接的库。多个程序可以共享使用动态库代码。 静态库:在Linux下是后缀为.a的文件,在windows下是后缀为.lib的文件。程序在编译链接时静态链接的库。2.动态链接和静态链接动态...原创 2021-08-25 15:23:16 · 2324 阅读 · 5 评论 -
了解inode,软链接和硬链接
一.inode1.1 什么是inode 文件包含属性和数据。inode是文件一个文件的属性集合,它和文件的关系是1对1的关系。一个文件只有一个inode。 文件的数据,保存在数据块中,文件数据和文件的关心是多对1的关系。一个文件可以有很多内容。1.2 简单了解文件系统1.2.1 硬盘硬件结构 文件保存在硬盘中,为了理解首先我们先来了解一下硬盘的物理结构。一个磁盘具有两个磁盘面,每个磁盘面都可以保存数据。磁盘读写的最小单位为扇区,一般含...原创 2021-08-24 15:22:41 · 1631 阅读 · 1 评论 -
Linux下的基础IO(了解系统下的文件和重定向原理)
一.C语言文件IO操作(库函数)文件分为文本文件和二进制文件。文本文件:在内存中什么样,保存在硬盘时需要转化,需要转化成字符,这个操作需要程序员做。二进制文件:在内存中什么样,在硬盘就什么样。1.打开文件fopenfopen打开文件失败返回NULL,打开成功返回一个C语言的文件指针FILE*。fopen参数: path:打开文件的路径,默认当前路径。当前路径是指可执行程序所在的路径。但是在VS中为源文件所在的路径,可执行程序在debug目录下。 ...原创 2021-08-23 14:50:33 · 723 阅读 · 2 评论 -
make和makefile用法补充
makefile默认只能生成一个可执行程序,将从上到下的第一个文件,作为目标文件。 但是还有其它的用法:使用命令make 文件名,想生成哪个就哪个生成多文件:makefile以#注释,%指当前目录的通配...原创 2021-08-11 10:07:01 · 199 阅读 · 0 评论 -
进程的操作(创建,终止,等待,替换)
目录一.进程创建1.初始fork函数2.执行fork系统做了什么3.fork返回值4.写时拷贝4.1 写时拷贝概念4.2 为什么要有写时拷贝5. fork常规用法6. fork失败的原因7. 总结二.进程终止1. 进程退出的场景2. 进程常见的退出方法3.exit和return的区别4. _exit和exit区别4.1 发现问题4.2 结论4.3 解决问题三.进程等待1. 进程等待的必要性2. 进程等待方法2.1 wa.原创 2021-08-10 20:51:41 · 527 阅读 · 2 评论 -
进程地址空间
在博客C/C++内存管理一文中,我们了解到了C/C++的内存管理,大概了解了内存分布情况。实际完整的进程地址空间如下。来一段代码验证一下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int g_val1=1; 4 int g_val2; 5 int main(int argc,char *argv[],char *env[]){ 6 //代码区地址 7 print.原创 2021-08-08 12:29:57 · 314 阅读 · 0 评论 -
了解环境变量
目录一.基本概念1.常见的环境变量二.命令1.查看环境变量的方法2.其它相关指令3.测试PATH三.环境变量的组织方式四.通过代码获取环境变量五.通过系统调用获取环境变量六.环境变量通常具有全局属性七.windows系统中的环境变量一.基本概念 当我们在使用Linux系统时,使用的命令实质上都是一些可执行程序。但是你又没有发现一个问题。我们在执行这条命令时并不知道这个可执行程序在哪,并且执行这条命令时不许要带路径。但是,我们自己编写...原创 2021-08-07 12:39:14 · 4686 阅读 · 0 评论 -
用户态和内核态的区别
1.操作系统需要两种CPU状态内核态(Kernel Mode):运行操作系统程序,操作硬件用户态(User Mode):运行用户程序2.指令划分特权指令:只能由操作系统使用、用户程序不能使用的指令。 举例:启动I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机非特权指令:用户程序可以使用的指令。 举例:控制转移 算数运算 取数指令 访管指令(使用户程序从用户态陷入内核态)3.特权级别特权环:R0、R1、R2和R3R0相当于内核态,R3相当于用户态.转载 2021-08-05 21:25:48 · 276 阅读 · 0 评论 -
Linux——了解进程
目录一.进程概念1.基本概念2.进程描述——PCB2.1 task_strcut和PCB的区别2.2 task_struct内容分类2.3 组织进程2.4查看进程2.5 通过系统调用获取进程标识符二.创建进程——fork(初识)1.如何理解进程的创建2.如何创建进程2.1 为什么fork会有两个返回值?2.2 fork父子进程的执行顺序和代码数据的复制问题?三.进程的状态3.1 Z僵尸状态3.2 孤儿进程四.进程优先级1.概念2..原创 2021-08-05 19:49:49 · 506 阅读 · 2 评论 -
Ptrace 详解 转载
转载:Ptrace 详解引子:1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。这表明这个进程处于什么状态?2.strace可以方便的帮助我们记录进程所执行的系统调用,它是如何跟踪到进程执行的?3.gdb是我们调试程序的利器,可以设置断点,单步跟踪程序。它的实现原理又是什么?所有这一切的背后都隐藏着Linux所提供的一个强大的系统调用ptrace().1.ptrace系统调用ptra转载 2021-08-05 15:58:03 · 1073 阅读 · 0 评论 -
操作系统基本概述
目录一.概念 1.1操做系统是什么? 1.2操作系统包括什么?二.如何理解管理 2.1 什么是管理 2.2 操作系统怎么进行管理三.为什么要有操作系统四.系统调用和函数库的概念五.总结一.概念 1.1操做系统是什么? 操作系统是一款搞"管理"的软件。由于它也是一款软件,也会在内存中运行。 1.2操作系统包括什么? ...原创 2021-08-04 10:48:31 · 336 阅读 · 2 评论 -
冯诺依曼结构
一.冯诺依曼组成(硬件构成) 计算机一共有5大单元组成:输入设备,输出设备,存储器,控制器,运算器。他们之间由总线连接。输入设备:向计算机输入数据和信息的设备。包括键盘,鼠标,摄像头,网卡和硬盘等等(网卡是因为从网络接收数据相当于输入设备,硬盘往硬盘写东西,硬盘相当于输入设备)输出设备:是计算机的终端,用于接收计算机发出的数据信息。包括显示器,声卡,网卡,硬盘。(网卡是因为通过网卡发送数据到网络上,硬盘从硬盘上读取文件) 存储...原创 2021-08-03 17:06:23 · 3519 阅读 · 0 评论 -
Linux项目自动化构建工具make与makefile
目录背景一.什么是make和makefile二. 为什么存在make和makefile三.怎么使用make和makefile2.1 依赖关系2.2 依赖方法2.3 伪目标2.4 问题2.5 make原理2.6 makefile文件的其它写法背景会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些...原创 2021-08-02 16:53:31 · 796 阅读 · 2 评论 -
缓冲区(buffer)与缓存(cache)
转载:[缓冲区(buffer)与缓存(cache)](https://www.cnblogs.com/mlgjb/p/7991903.html)下面介绍缓冲区的知识。一、什么是缓冲区缓冲区(buffer),它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。二、为什么要引入缓冲区我们为什么要引入缓冲区呢?高速设备与转载 2021-07-31 15:22:48 · 465 阅读 · 0 评论 -
Linux权限概念
前言在现实生活中我们对于权限的理解,就是对于我们普通人就是,一件事情,你可以做到什么程度,甚至你能不能做。这就体现了你对这件事情的权限。比如,现在在播放器中看电影,有的电影只能vip看,对于普通用户就没有看的权限。 在linux中也是一样的,对于某些文件,目录等,对于不同的访问者,进行的操做不同,这取决你对这个文件有没有操作的权限。 通俗一点来说,权限就是对于某个操作,你能否做。一.linux下的两种用户超级用户:可以在linux...原创 2021-07-28 14:43:40 · 1430 阅读 · 0 评论