Linux学习
文章平均质量分 55
学习linux笔记
一起慢慢变强
既可以朝九晚五,又可以浪迹天涯
展开
-
进程间通信之匿名管道和命名管道
管道是计算机通信领域设计者,设计出的一种单向通信的方式,linux原生提供管道通信。1、匿名管道是用来进行具有血缘关系的进程进行进程间同通信 -- 常用于父子通信。4、管道是基于文件的,文件的生命周期是随进程的,管道的生命周期是随子进程的。管道是用来进行具有血缘关系的进程进行进程间同通信 -- 常用于父子通信。3、管道提供的是面向流式的服务 -- 面向字节流 -- 协议。5、管道是单向通信的(半双工通信的一种特殊情况)b、写慢,读快,管道没有数据的时候,读必须等待。d、读关,写继续写,os终止写进程。原创 2022-11-26 18:08:39 · 819 阅读 · 0 评论 -
进程间通信的基本概念
进程间通信1、目的和必要性实现数据共享,资源共享,事件通知,进程控制等单进程,无法使用进程间的并发能力,无法实现多进程之间的协同工作,所以需要使用进程间的通信来使得多进程进行协同(进程间通信不是目的是手段)1、进程是具有独立性的,拥有自己虚拟地址空间 + 页表,来保证进程运行的独立性(进程内核数据结构+进程的代码和数据)2、进程间通信成本高(因为进程独立性很强,所以通信成本高)3、本质1、进程间通信的前提,让不同的进程看到同一块“内存”(特定的结构组织)原创 2022-11-19 19:07:48 · 230 阅读 · 0 评论 -
linux下的c/c++动静态库
静态库概念静态库是以.a结尾,程序在编译链接的时候将代码直接拷贝进自己的代码中,程序运行起来就不用使用静态库了,由于静态库将库中的代码全部拷贝进来,所以程序会变得很大库中没有main函数(为了方便别人使用自己的库,因为一个项目里面不能有两个main函数)原创 2022-11-08 20:16:46 · 1568 阅读 · 1 评论 -
linux中的inode文件编号和软硬链接
一个文件,对应一个inode属性节点,inode编号,linux在磁盘上存储文件的时候,将内容和属性分开存储ls -i可以查看文件的inode编号要了解inode编码,我们可以从磁盘下手,linux下df -h可以查看磁盘状态磁盘由磁盘盘片,磁头、、、等一些设备组成,我们向磁盘磁盘写入数据,本质是改变磁盘上的正负性为了我们能够很好的使用磁盘,我们会对磁盘进行分区,将磁盘一步步的细分,盘片-盘面-磁盘-扇区,我们对磁盘的管理本质上是对一个个小的扇区进行管理 boot block:启动块,用于扇区是否正常的su原创 2022-11-05 20:34:42 · 1334 阅读 · 0 评论 -
linux下的文件描述符
文件描述符从0开始,当我们打开文件的时候,os通过file*指针将这些文件用数据结构管理起来,当我们创建进程的时候,进程里面有一个文件指针,用来指向我们打开的文件,而文件描述符就是文件指针的下标,用来表示指向哪个文件,从而建立联系。从没使用的最小数开始分配,假如0被关闭了,那么下个打开的文件的文件描述符就是0。1、标准输出,默认对应显示器。2、标准错误,默认对应显示器。0、标准输入,默认对应键盘。原创 2022-10-14 14:56:42 · 276 阅读 · 0 评论 -
linux下的文件操作系统接口(open,write,read,lseek,close)
以下函数都是linux下的接口创建进程的时候会默认打开三个文件,0(stdin),1(stdout),2(stderr)原创 2022-10-11 21:32:12 · 933 阅读 · 0 评论 -
linux下的进程控制
为了节省内存空间,父子进程大部分时候都是使用同一个位置的代码,只有当父子进程中某些变量的值发生改变的时候,编译器为了让他们互不影响,就会发生写时拷贝。WEXITSTATUS(status) 若非零,提取子进程退出码(查看进程退出码) 底层实现(status>>8)&0xFF。pid == -1 等待任意一个子进程退出 wait(int *status)函数,等待任意进程。子进程返回0,父进程返回子进程的pid,假如进程创建失败返回-1。假如我们不等待子进程退出,那么子进程会变成僵尸进程导致内存泄露。原创 2022-09-23 10:15:00 · 321 阅读 · 0 评论 -
进程地址空间
计算机通过页表来记录虚拟地址和物理地址,然后计算机通过页表的映射,通过虚拟地址找到物理地址,来进行变量的调用。,叫做cookie,保存申请的属性,所以free只要传入起始地址就行。我们发现val的地址都在同一区域,但是他们的val值却不一样。所看到的的并不是物理地址,而是虚拟地址。我们进程使用的地址不是物理地址,而是。虚拟地址(线性地址)申请的字节比设置的大。原创 2022-09-11 09:54:15 · 153 阅读 · 0 评论 -
环境变量的参数
export PATH=$PATH:hello程序所在路径 设置一个新的环境变量(仅在当前登录期间有效)通过一张环境表组织起来,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串,最后一个指针是NULL。我们使用一些命令比如ls,没有指定路径就可以使用,是因为环境变量PATH已经设置了这些命令的路径,以:分开。set 显示本地定义的shell变量和环境变量。将我们的程序所在路径加入环境变量PATH当中。子进程的环境变量是由父进程继承过来的。原创 2022-09-10 20:23:34 · 835 阅读 · 0 评论 -
进程的概念
一个子进程已经退出,但是还不允许被os释放,处于一个被检测的状态-僵尸状态(一般是父进程或os检测),此时会一直等待父进程读取退出状态代码。Z(zombie):僵尸状态,一个进程已经退出,但是还不允许被os释放,处于一个被检测的状态-僵尸状态(一般是父进程或os检测)多个进程在一个cpu下采用进程切换方式,使得一段时间内,多个进程都能够进行运行,称为并发。linux中,运行命令,也是创建一个进程,内核上的说法是担任分配系统资源的实例。父进程退出,子进程还在,子进程就叫做孤儿进程!原创 2022-09-10 19:23:14 · 600 阅读 · 0 评论 -
操作系统(OS)
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件。内核(进程管理,内存管理,文件管理,驱动管理)为用户程序(应用程序)提供一个良好的执行环境。其他程序(例如函数库,shell程序等等)与硬件交互,管理所有的软硬件资源。转载 2022-09-10 11:09:48 · 1047 阅读 · 0 评论 -
冯诺依曼结构体系
1.cpu读取数据(数据+代码),基本上是从内存中读取的。cpu不和外设直接交互。2.cpu要处理数据,需要先将外设中的数据,加载到内存中。cpu只和内存打交道。控制器:cpu可以响应外部事件(协调外部事件,比如拷贝数据到内存)运算器:算数运算,逻辑运算。原创 2022-09-10 10:58:38 · 164 阅读 · 0 评论 -
linux下的gdb调试器
我们的程序在发布的时候,有两个版本,release和debug,其中release是发行版本,debug是调试版本。step(s) 进入函数调用(逐过程,需设置断点让程序运行起来)next(n) 单行执行(逐语句,需设置断点让程序运行起来)break(b) 函数名 在某个函数开头第一行代码处设置断点。list(l) 数字 查看数字-5 - 数字+4行代码。break(b) n 在第n行设置断点。原创 2022-09-10 10:06:37 · 95 阅读 · 0 评论 -
linux下的版本控制器git
git pull 假如本地仓库与远程不同步,会产生冲突,需使用强制通知。.gitignore 提交时候不想提交某些后缀文件,可以添加到.gitignore。git init 初始化git,是当前目录有.git文件。git commit -m 日志 提交代码到本地仓库中。git rm 文件 删除文件(删除完后需要提交)git add . 添加全部文件到本地仓库。git add 文件 添加文件到本地仓库。原创 2022-09-04 15:40:48 · 111 阅读 · 0 评论 -
linux软件包管理器yum
yum list : grep 想要查找的内容 查找yum可以下载的软件。yum install -y 软件 安装软件。yum list 查看可以yum的软件。yum remove 软件 删除软件。-y 安装时候不再询问。原创 2022-09-04 15:15:09 · 56 阅读 · 0 评论 -
linux项目的自动化构建工具-make/makefile
PHONY:目标 伪目标文件(总是被执行的,每次使用都会被执行,总是会根据依赖关系,执行依赖方法,一般习惯clean加)make 只能执行第一个遇到的方法,假如第一行有文件找不到,就会继续往后面执行寻找。make会在当前目录下找名字叫“Makefile”或“makefile”的文件。makefile是一个文件。,需要make 依赖关系。编写makefile。如果需要执行其他方法。原创 2022-09-04 11:47:51 · 324 阅读 · 0 评论 -
linux下gcc,g++的使用
O0,-O1,-O2,-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 gcc -E 文件 -o 要生成的文件。-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.-o 文件输出到文件 gcc 文件 -o 要生成的文件。-static 此选项对生成的文件采用静态链接。-g 生成调试信息。-Wall 生成所有警告信息。-w 不生成任何警告信息。原创 2022-09-04 11:19:15 · 376 阅读 · 0 评论 -
linux下的动态静态库
4、链接(链接 -> 多个.o , .obj -> 合并形成一个可执行.exe)yum install -y glibc-static c语言静态库。1、预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译)将库中需要的方法的地址,直接填入可执行程序中,建立关联(节省资源)windows:.dll(动态库),.lib(静态库)Linux:.so(动态库) , .a(静态库)而代码在链接过程中,有两种库(静态库与动态库)2、编译(c->汇编)动态链接 - 动态库。静态链接 - 静态库。原创 2022-09-04 11:13:19 · 320 阅读 · 0 评论 -
linux中的vim工具
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入件。删除光标所在位置到后面的n个字符(包括自身) nx n为数字。删除n行(包括当前行) ndd n为数字。上下左右移动 h(左),j(下),k(上),l(右)跳转到第n行 :n n为数字。原创 2022-09-04 10:57:39 · 715 阅读 · 0 评论 -
linux粘滞位
假如用户在同一个目录下共同完成文件的写入,虽然我们可以设置权限使得别人不能写入查看,但是别人可以删除我们所写的文件,为了防止这种情况,我们可以使用粘滞位,这样我们只能删除自己所创建的文件了 (粘滞位只能给目录进行添加)当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由。chmod -t mytemp 删除粘滞位。chmod +t mytemp 添加粘滞位。二、该目录的所有者删除。三、该文件的所有者删除。原创 2022-09-04 09:07:56 · 127 阅读 · 0 评论 -
linux权限
更换拥有者和所属组需要root权限,我们可以使用sudo暂时以root的身份运行,使用一次,但是在信用列表中才可以用sudo。2,代表文件的属性,-为普通文件,d为目录,l为软链接,b为块设备文件,p为管道文件,c为字符设备文件,s为套接口文件。3,代表文件的权限,每三个为一组,从左到右分别为拥有者,所属组,其他人的权限,没有权限为-1,代表总大小,单位字节,也包括隐藏文件的大小(以.开头的是隐藏文件)root只能有一个,普通用户可以有多个,root基本上不受权限的约束。原创 2022-09-03 21:23:16 · 609 阅读 · 0 评论 -
linux的基础指令和通配符
新建一个不存在的文件,假如文件存在,则会更改文件的时间到touch的时间。:cp [选项] 文件 想要移到的路径 或者 cp 文件 想要移动的路径。grep -n '数据’ [文件] 从文件中找到指定的数据并且显示行数。:列出该目录下的所有子目录与文件,或者列出文件的文件名以及额外的信息。tar [选项] [压缩命名tar.gz(tgz)] 要压缩的文件。-v :压缩的过程中显示文件!grep -v '数据' [文件] 从文件中搜索初数据以外的内容。mv [某个路径的文件] [剪切文件路径]...原创 2022-08-31 21:15:00 · 584 阅读 · 0 评论