
Linux
文章平均质量分 90
Linux的基本知识
不是笨小孩i
C/C++领域优质创作者,阿里云专家博主,2023新星计划C/C++赛道TOP1,平凡的日子不动声色就很美好,不完美才是常态。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Ubuntu下载protobuf
如果我们在执行configure是修改安装⽬录,那么还需要在/etc/profile 中添加⼀些内容。进入之后执行autogen.sh,但如果下载的是具体的某一门语言,不需要执行这⼀步。如果要在 C++ 下使⽤ ProtoBuf,可以选择cpp.zip。5 ⽣成 protobuf-21.11 ⽂件,进⼊⽂件。然后重新执行以下 /etc/profile文件即可。希望支持全部语言,选择 all.zip。执⾏configure,有两种执行方式。2 下载protobuf。然后把下面内容拷贝过去。原创 2024-10-19 13:12:01 · 804 阅读 · 13 评论 -
Git常用指令
git commit 后⾯的 -m 选项,要跟上描述本次提交的 message,由⽤⼾⾃⼰完成,这部分内容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们自己看的。–global 是⼀个可选项,如果使⽤了该选项,表⽰这台机器上所有的 Git 仓库都会使⽤这个配置。标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。Git 还提供可以创建带有说明的标签,⽤-a指定标签名,-m指定说明文字。在Git中打标签⾮常简单,⾸先,切换到需要打标签的分支上。原创 2024-09-20 19:35:18 · 1460 阅读 · 17 评论 -
HTTP协议
HTTP(超文本传输协议),是一个应用层协议。原创 2024-09-04 21:16:09 · 1064 阅读 · 12 评论 -
IO多路转接
调用epoll_create创建一个epoll模型;调用epoll_ctl, 将要监控的文件描述符进行注册;调用epoll_wait, 等待文件描述符就绪;原创 2024-08-03 23:40:01 · 1170 阅读 · 6 评论 -
MAC、ARP、NAT
所以对于一次ARP的请求,不管是MAC报头还是ARP报头的目的以太网地址都是广播地址FF:FF:FF:FF:FF:FF这个局域网的所有主机都会对这个报文进行解析,得到ARP的数据报,对比目的IP之后是自己的就留下构建应答报文,不是话就丢弃,应答因为知道了对方的MAC地址,就不需要进行广播了,所以其他的主机收到了并不会对MAC报头进行解析,直接丢弃,所以请求和应答各个主机的做法也是不同的。如果不符,则直接丢弃。在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;原创 2024-07-26 15:15:24 · 2024 阅读 · 20 评论 -
IP协议和路由转发
路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。每一个局域网都会存在自己专属的和局域网的网络号,而路由的过程就是不断的比对网络号进行路由,路由到局域网在根据主机号找到对应的主机,所以IP就提供了将数据包从A主机送到B主机的能力。网关就是下一跳的地址。原创 2024-07-24 19:31:27 · 1635 阅读 · 21 评论 -
TCP协议
首先建立连接是需要有成本的,不管是客户端还是服务器,都是需要成本的,如果是一次握手,单台主机就可以通过某种手段大量的向服务器发送请求,这样服务器直接就建立连接的话,单台主机就可能使服务器瘫痪,二次握手也是这样,收到客户端的的请求就建立连接,也会导致这样的问题,这样大量的向服务器发送SYN的问题为iSYN洪水问题。如果是三次握手,就保证了一定是客户端先建立连接,然后才是服务器建立连接,这样就不容易出现上述的问题,当然上述的问题对于三次握手依然存在,但是想要单台主机就做到就比较困难了。为什么要进行三次握手。原创 2024-07-19 16:16:40 · 2676 阅读 · 27 评论 -
UDP协议
所以UDP在发送报文前只需要把把头的结构化字段填好,然后防止报文的前面就可以像服务器进行请求了,但是不管是服务器还是客服端,都一定存在大量的UDP报文,所以OS也一定要对这么多的报文进行管理,所以OS也会存在对报文描述的结构体,报文本质就是数据,所以就是一段缓冲区,所以描述报文的结构体里面一定会存在指针。UDP的报头非常简单,存在16位源端口和16为目的端口,16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度,如果校验和出错, 就会直接丢弃。UDP协议是传输层的协议,是在应用层之下的。原创 2024-07-17 18:11:24 · 1196 阅读 · 18 评论 -
HTTPS
数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进行运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。原创 2024-07-16 17:41:48 · 1704 阅读 · 15 评论 -
守护进程(精灵进程)
因为已经成为一个独立的会话,已经没必要和用户交互什么的了,但是代码中可能还存在打印什么的函数,所以可以把标准输入输出错误流重定向给/dev/null 这个文件是Linux中都有的一个文件,Linux会自动的把写入到这里的内容丢弃。每次我们远端登录Linux,OS会给我提供bash和一个终端,用来给我们用户提供命令行服务,这就叫做一个会话,然后我们在该终端下启动的所有进程,都是默认在当前会话中的一个进程组(一个进程也可以自成进程组)。守护进程是一个独立的会话,不隶属于任何一个bash的会话。原创 2024-07-14 18:15:54 · 702 阅读 · 20 评论 -
socket编程
本文章主要介绍Linux下套接字的相关接口,和一些基础知识。原创 2024-07-07 22:31:35 · 1746 阅读 · 25 评论 -
网络基础知识
答案是可以的,它们可以直接通过Mac地址进行广播,对于不是发给自己的直接丢弃,是发给自己的就进行解包,但是局域网中通知只允许一台主机在局域网中发消息,如果多台主机同时进行发送消息,就会发生消息碰撞,这就是一个碰撞域,所以局域网本身就是一个临界资源,碰撞避免和检测重发就是进行互斥访问。TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。因为每个层之间的协议是不一样的,无法通信。原创 2024-07-01 23:03:29 · 1676 阅读 · 25 评论 -
生产者消费者模型
当然这个生产消费模型最重要的也是生产数据和消费数据两个接口,对于生产者来说,刚开始需要先申请信号量,然后生产数据,生产完之后需要归还消费者的信号量,因为生产了一个数据,就可以允许生产者进来消费一个了,对于生产者同理,但是不管是生产者还是消费者,它们的信号量都可能不是1,所以在生产数据和消费数据的过程中可能会存在多个执行流同时进入,所以在生产和消费的过程中还是需要加锁的。信号量的本质是一把计数器,当一个资源被分成多份,可以被多个线程共用的时候,就可以使用信号量。: 解耦、支持并发、支持忙闲不均。原创 2024-05-29 19:04:56 · 1016 阅读 · 27 评论 -
线程互斥和同步
比如说上面的抢票逻辑,假设没有票之后线程不退出还要接着抢票,工作人员会过一段时间放一批票进去,那么如果不用条件变量的话,没有票后,线程就会疯狂的申请锁和释放锁,会不断地消耗CPU资源,所以我们希望的是没票了你就在那等,工作人员放票之后通知你,你在抢,不通知你就一直在那等。这是因为我们在等待的时候,前提就是我们申请了一遍锁,然后访问临界资源不满足条件开始等待,这样就会面临锁在我自己这里,我自己被阻塞了,导致后面线程无法进来,所以需要把自己的锁传进去,这个函数会进行解锁操作,再醒来时,会自动重新申请锁资源。原创 2024-05-28 21:12:10 · 878 阅读 · 24 评论 -
线程的概念和控制
我们使用的所有的线程的函数都不是系统直接提供的,是原生线程库提供的,而原生线程库一定不只会有我们一个进程用,所以原生线程库中一定会存在多个进程创建的多个线程,所以线程库一定要把我们多个进程创建的线程给管理好,所以线程库中会存在描述线程的结构体,结构体中有很多线程的数据(属于哪个进程,线程id等),然后再用数据结构把各个描述线程的结构体管理起来。对上提供线程控制的接口。因为线程是在进程的地址空间中运行的,并且线程创建更简单,只需要复制进程的PCB,只有一小部分的数据是私有的,大部分数据都和进程是一样的。原创 2024-05-23 22:41:46 · 1689 阅读 · 19 评论 -
进程信号 signal
如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信号的处理函数sighandler。当前正在执行main函数,这时发生中断或异常切换到内核态。在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。原创 2024-05-15 23:11:59 · 1166 阅读 · 31 评论 -
【进程间通信】共享内存
共享内存的通信方式,不会提供同步机制,共享内存是直接裸露给所有的使用者的,所以一定要注意共享内存的使用安全问题。共享内存可以提供较大的空间。共享内存是所有进程间通信中速度最快的。可以减少数据拷贝的次数。为什么说共享内存是最快的?这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据,也就会减少很多的数据的拷贝。原创 2024-05-08 23:32:56 · 1291 阅读 · 39 评论 -
【进程间通信】管道和命名管道
一个文件被打开了两次,因为他们打开的方式不一样,所以他们的标记为也一定不一样,它们在内存中的file结构体一定是存在两份的,但是文件的属性和操作集合都是一样的,所以文件属性和操作集合以及文件缓冲区是存在一份的,每个file结构体中会有一些基本的属性(读写位置等等),其次还会有一些指针,分别指向自己的属性和方法集合以及缓冲区。我们可以看到fd数字是一个文件描述符数组,所以Linux管道是复用了很多文件部分的代码的,所以在通信的时候很多还是文件的操作。管道是Unix中最古老的进程间通信的形式。原创 2024-05-04 18:36:35 · 1401 阅读 · 43 评论 -
动静态库以及动态链接
库是给别人用的,所以库中一定不存在main函数。。原创 2024-04-27 17:09:37 · 1317 阅读 · 42 评论 -
文件系统和软硬链接
图中圈红的就是我们自己文件的inode。对于普通文件来说,创建一个普通文件只需要通过inode位图找到一个没有用过的inode,然后把位图修改成1,通过inode表,索引找到inode,把属性填进去,把内容放进block中,修改blocd的位图,把内容存在的block的下标填入自己的block数组中,就搞定了。文件分为打开的文件和没有被打开的文件,而只有打开的文件是在内存的,也就是我们之前讲的,然而大部分文件都不是被打开的(当前不需要被访问的),它们都在磁盘中存放,显而易见,他们也是需要被管理的。原创 2024-04-21 17:00:55 · 1499 阅读 · 45 评论 -
重定向原理和缓冲区
缓冲区的本质就是一快内存,用来存放数据的。原创 2024-04-17 22:20:56 · 1399 阅读 · 19 评论 -
自定义实现shell/bash
正文开始前给大家推荐个网站,前些天发现了一个巨牛的学习网站,,忍不住分享一下给大家。[点击跳转到网站]原创 2024-04-06 22:46:34 · 1348 阅读 · 24 评论 -
文件基础和文件fd
正文开始前给大家推荐个网站,前些天发现了一个巨牛的学习网站,,忍不住分享一下给大家。。原创 2024-03-01 17:14:42 · 1629 阅读 · 45 评论 -
进程的控制
进程等待就是通过wait/waitpid的方式,让父进程对子进程进行资源回收的等待过程。原创 2024-02-27 17:36:22 · 1143 阅读 · 35 评论 -
命令行参数环境变量和进程空间地址
正文开始前给大家推荐个网站,前些天发现了一个巨牛的学习网站,,忍不住分享一下给大家。。原创 2024-01-18 15:53:19 · 1429 阅读 · 50 评论 -
进程切换和是Linux2.6内核中进程调度的算法
正文开始前给大家推荐个网站,前些天发现了一个巨牛的学习网站,,忍不住分享一下给大家。。原创 2024-01-16 15:11:46 · 1477 阅读 · 44 评论 -
进程状态和优先级
每个CPU都会在系统层面上维护一个叫运行队列的东西,当我们的进程都准备好了,可以随时被调度,就会被放到运行队列中等待执行,所以只要在运行队列的进程都是运行状态。原创 2023-11-12 11:28:16 · 904 阅读 · 78 评论 -
Linux进程
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。对于运算器和控制器都是属于CPU的,CPU处理数据的速度是非常快的,其次是内存,接下来才是各种外设。这里的存储器其实就是内存了。离CPU越近,速度越快,价格越贵,存储效率越高。不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备),因为外设的速度太慢了,如果CPU直接和外设打交道,会让CPU速度下降很多。外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。原创 2023-11-02 18:38:07 · 701 阅读 · 56 评论 -
Linux基础工具
系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。原创 2023-10-07 17:55:08 · 583 阅读 · 71 评论 -
Linux 权限
👀👀👀👀👀👀👀🌹欢迎大家三连关注,一起学习,一起进步!!💓。原创 2023-10-06 11:15:32 · 2512 阅读 · 56 评论 -
Linux基本指令(二)
👀👀👀👀👀👀👀🌹欢迎大家三连关注,一起学习,一起进步!!💓。原创 2023-10-03 11:33:11 · 1841 阅读 · 53 评论 -
Linux基本指令(一)
👀👀👀👀👀👀👀🌹欢迎大家三连关注,一起学习,一起进步!!💓。原创 2023-09-30 09:24:17 · 1143 阅读 · 60 评论