Linux
文章平均质量分 70
这个专栏讲述的是Linux相关的开发技术
哎呦,帅小伙哦
这个作者很懒,什么都没留下…
展开
-
cmake常用指令
基本语法格式:指令(参数1 参数2 …)参数之间使用空格或分号分开;指令是大小写无关的,但是参数是大小写相关的cmake_minimum_required用来指定cmake的最小版本要求cmake_minimum_required(VERSION 2.18.0)project定义工程名set定义变量,set(变量名 value1 value2 …)include_directories(dir1 dir2 …)添加多个头文件搜索路径,绝对路径也可以,原创 2024-08-13 20:13:57 · 152 阅读 · 0 评论 -
cmake常用的内置变量
CMake 提供了一系列内置变量,这些变量可以帮助你在构建过程的各个阶段获取系统信息、控制构建行为以及配置项目。这些变量通常在 CMakeLists.txt 文件中使用,以决定不同的配置和编译选项。原创 2024-08-12 20:14:39 · 415 阅读 · 0 评论 -
Sylar服务器框架——协程模块
【代码】Sylar服务器框架——协程模块。原创 2024-07-03 13:29:27 · 571 阅读 · 0 评论 -
调用pthread_create时系统做了哪些事情
需要注意的是,在多核处理器上,新创建的线程可能立即在另一个核心上开始执行,而调用pthread_create的线程继续在原来的核心上执行。退出线程时(通过返回从启动例程或调用pthread_exit)会释放线程的执行上下文和部分资源,但线程的标识符和某些资源会保持不变,直到调用pthread_join或采取类似措施以回收这些资源。初始化寄存器和线程上下文:设置新线程的程序计数器(PC)、堆栈指针(SP)等寄存器,并初始化新线程的执行上下文以准备运行。线程标识符分配:系统为新线程分配一个唯一的线程ID。原创 2024-04-17 22:46:54 · 282 阅读 · 0 评论 -
Linux系统中查找当前目录下指定的文件内容
linux命令原创 2023-06-30 17:48:08 · 4223 阅读 · 0 评论 -
鸟哥私房菜第19章——认识和分析日志文件
1,日志记录系统在什么时候由哪个进程做了什么样的事情。日志文件可以解决系统方面的错误、解决网络服务的问题、过往事件记录薄。2,日志文件可以帮助我们了解很多系统重要的事件,包括登陆者的部分信息,因此日志文件的权限通常是设置为仅有root才能够读取而已。日志文件一般放在目录/var/log下。日志是怎么产生的呢?有两种方式,一种是由软件开发商自行定义写入的日志文件与相关格式。另一种是由Linux distribution提供的日志文件管理服务来统一管理,你只要将这个信息丢给这个服务后,它就会自己分门别类地将原创 2021-03-20 16:06:41 · 147 阅读 · 2 评论 -
鸟哥私房菜第18章——认识系统服务
1,系统服务我们称为daemon,daemon的主要分类如下:1)可以独立启动的stand alone优点:因为是一直存在内存持续的提供服务,因此对于发生客户端的请求时,stand alone的daemon响应速度较快。2)通过一个super daemon来统一管理的这种服务的启动方式是通过一个统一的daemon来负责唤起服务。这种机制的优势在于,当没有客户端的请求时,各项服务都是未启动的情况,等到有来自客户端的请求时,super daemon才唤醒相对应的服务。需要注意的是super daemon原创 2021-03-20 14:18:11 · 99 阅读 · 0 评论 -
鸟哥私房菜第17章——程序管理
1,有的时候会发现,明明将进程关闭了,怎么过一阵子它又自动产生?而且新产生的那个进程的PID与原先的还不一样,这是怎么回事呢?如果不是crontab工作调度的影响,肯定有一个父进程存在,所以你杀掉进程后,父进程会主动再生成一个。所以“擒贼先擒王”,找出那个父进程,然后直接将它删除就对啦。2,CPU切换进程的工作与CPU运行的调度会影响到系统的整体性能。但是Linux使用的多任务切换行为是一个非常棒的机制,会让用户感觉到整台主机好像就有用户自己一样。3,要进行bash的job control必须要注意到的原创 2021-03-19 22:21:57 · 105 阅读 · 1 评论 -
鸟哥私房菜第16章——例行性工作
1,两种工作调度的方式:其一:例行性的,就是每隔一定的周期要来办的事项;其二:突发性的,这次做完以后就没有的那一种。Linux中使用at与crontab这两个命令实现,其中at是个可以处理仅执行一次就结束调度的命令,不过要执行at时,必须要有atd这个服务的支持才行。crontab这个命令所设置的工作将会循环一直进行下去,可循环的时间为分钟、小时、每周、每月或每年等。能让crontab生效的服务则是crond这个服务。...原创 2021-03-19 15:51:04 · 200 阅读 · 1 评论 -
鸟哥私房菜第15章——磁盘配额(Quota)与高级文件系统管理
1,Quota的用途:限制某一用户组所能使用的最大磁盘配额(使用用户组限制);限制某一用户的最大磁盘配额(使用用户限制);针对www server,例如,每个人的网页空间的容量限制等2,Quota的使用限制仅能针对整个文件系统;内核必须支持quota;只针对一般用户有效3,Quota针对整个文件系统的限制项目主要分为下面几个部分1)容量限制或文件数量限制,也可以限制inode用量和block用量;2)soft/hard,hard表示用户的用量绝对不会超过这个限制值、soft表示用户在低于sof原创 2021-03-18 16:40:59 · 156 阅读 · 0 评论 -
鸟哥私房菜第14章——Linux账号管理与ACL权限设置
1,每个登陆的用户至少都会去的两个ID,一个是用户ID(UserID,简称UID),一个是用户组ID(Group ID,简称GID)。每个账号与ID的对应关系就在/etc/passwd中。/etc/passwd中每一行都代表一个账号,有几行就代表有几个账号在你的系统中。里面有很多账号本来就是系统正常运行所必需的的,我们可以简称它为系统账号,例如bin,daemon,adm等。这个文件里的内容有7个字段,之间使用":"分隔。第一个字段:账号名称第二个字段:密码,后来密码改放到/etc/shadow中了原创 2021-03-17 20:39:12 · 154 阅读 · 0 评论 -
鸟哥私房菜第8章——Linux磁盘与文件系统管理
1,主分区与扩展分区最多可以有4个(硬盘的限制,因为分区表只有64位);扩展分区最多只能有一个(操作系统的限制);逻辑分区是由扩展分区持续分出来的分区;能够被格式化后作为数据访问的分区为主要分区与逻辑分区,扩展分区无法格式化;逻辑分区的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分区(5号到63号),SATA硬盘则有11逻辑分区(5号到15号)2,通常文件系统会将这两部分的数据分别存放在不同的块,权限与属性放置在inode中,实际数据会放置到data block中。另外,还原创 2021-03-16 22:02:46 · 147 阅读 · 0 评论 -
鸟哥私房菜第9章——Linux文件与文件系统的压缩和打包
1,我们知道Linux中有压缩文件的扩展名大多是*.tar,.tar.gz,.tgz,.gz,.Z,*.bz2。其中,*.Z compress程序的压缩文件(已经不再流行)*.gz gzip程序压缩的文件*.bz2 bzip2程序压缩的文件*.tar tar程序打包的数据,并没有压缩过*.tar.gz tar程序打包的文件,其中经过gzip的压缩*.tar.bz2 tar程序打包的文件,其中经过bzip2的压缩需要注意的是,gzip和bzip2程序是现在流行的压缩程序,但是这些命令通常仅原创 2021-03-15 22:45:40 · 126 阅读 · 0 评论 -
鸟哥私房菜第7章——Linux文件与目录管理
首先申明,并不是所有的内容都会总结,这里只记录本人不熟悉或者没有接触过的内容。1,.代表当前目录;…代表上一级目录;-代表前一个工作目录;~account代表account这个用户的主文件夹。.和…是在所有的目录下面都会存在的目录。2,新建新目录和删除空目录mkdir [-mp] 目录名称-m:配置文件案的权限。直接设置,不需要看默认权限(umask)-p: 帮助你直接将所需要的目录递归的建立起来rmdir 注意这个命令是删除空目录,不过可以加入参数-p来删除符合目录。3,假设你是root,如原创 2021-03-15 15:53:33 · 116 阅读 · 0 评论 -
鸟哥私房菜第6章——Linux的文件权限与目录配置
1,Linux中文件的权限有读写执行,而且引入了所有者,所属组,其他人的概念。这在之前的文章中已经记录过了。需要注意的是Linux中所有的系统的账号与一般身份用户,还有那个root的相关信息都是记录在/etc/passwd这个文件内。至于个人的密码则是记录在/etc/shadow这个文件下。2,ls -al命令查询的内容含义在前面的文章中已经进行了记录。这里需要注意的是,使用这个命令查询出来的信息第一行一定是一个隐藏文件,就是文件名第一个字符为"."的文件3,chgrp命令,chown命令,chmod命原创 2021-03-14 17:13:31 · 173 阅读 · 0 评论 -
鸟哥私房菜第5章——在线求助man page
1,命令行模式登陆后所取得的程序被称为shell,这是因为这个程序负责最外层的跟用户的通信工作。2,下面是Linux命令的基本格式3,在Linux系统中是区分大小写的。4,查看当前登陆的Linux所支持的语言: echo $LANG如果需要修改当前登陆Linux所支持的语言的话,使用命令LANG=en_US,需要注意的是等号两边是没有空格符的,这样一来,就能在“这次登陆”查看英文信息了。如果你注销当前Linux后,刚才执行的命令(LANG=en_US)就没有用了。5,Linux命令bc可以调用计算原创 2021-02-27 17:20:36 · 243 阅读 · 2 评论 -
鸟哥私房菜第3章——主机规划与磁盘分区
1,在Linux系统中,每个设备都被当成一个文件对待。在linux系统中,几乎所有的设备文件都在/dev(device)这个目录内。所以你会看到/dev/hda,/dev/fd0等的文件名。下面的图片可见常见的设备与其在Linux当中的文件名。 对于SATA接口来说,由于SATA/USB/SCSI等磁盘接口都使用SCSI模块来驱动,因此这些接口的磁盘设备文件都是 /dev/sd[a-p]的格式。但是与IDE接口不同的是,SATA/USB接口的磁盘根本没有一定的顺序,怎么决定设备文件名呢?这原创 2021-02-26 22:31:04 · 2188 阅读 · 1 评论 -
ctrl + r 查找历史命令
在Linux系统下一直用上下键查找以前输入的命令,这个找刚输入不久的命令还是很方便的,但是比较久远的命令,用上下键效率就不高了。那个history命令也是个花架子,虽然功能多,但不好用,网上找了下,发现了用ctrl + r这个快捷键查找历史命令,研究了一下发现真是好用。按下这个快捷键后,进入了反向搜索状态,这时你输入一个字符,系统会找到最近一个包含这个字符的命令,如果不是你想要的命令,你可以继续输入,系统继续查找最近一个包含你所输入的字符串的命令,直到找到你要的命令。找到你想要的命令后,你可以按回车转载 2020-11-10 09:54:02 · 765 阅读 · 0 评论 -
如何使用Linux命令查看端口是否被占用
使用netstat命令 使用方法是netstat -anp | grep 端口号,如果状态是LISTEN就说明端口被占用,注意,状态一定要是LISTEN。使用fuser命令 使用方法是fuser -v -n tcp 8087。出现类似上图的内容就说明端口被占用。...原创 2020-10-27 10:52:21 · 430 阅读 · 0 评论 -
Linux命令——uptime
这个命令的用法比较简单,但是很实用,可以查看系统的负载,以及机器运行的时间。从左向右: 11:01:42 当前时间 up 2 days,15:49 当前机器运行了2天15个小时49分钟 3 users 当前机器有3个用户真正使用 load average:0.06,0.04,0.05 当前机器的一分钟内,三分钟,十五分钟内的平均负载分别是0.06,0.04,0.05注意:uptime可以查看系统负载!!...原创 2020-10-16 11:14:56 · 2725 阅读 · 0 评论 -
Linux面试常问命令
1,rm 命令 -r 递归的删除文件夹下的内容 -f 强制删除,如果文件夹下没有指定的文件,也不会进行提示。例如,rm -f file0。如果当前文件夹下没有file0这个文件,不会报错。2,mkdir 命令 -p 使用这个参数可以建立多级目录。3,cp,mv命令 cp /test1/file1 /test3/file2 如将/test1目录下的file1复制到/test3目录,并将文件名改为file2 mv /test1/f...原创 2020-10-10 19:05:44 · 1420 阅读 · 0 评论 -
使用公私钥实现linux服务器免密登录
以从机器A登录机器B为例,假设此时使用的是root用户登录的机器A第一步:进入/root/.ssh目录(其实不进入这个目录也是可以的,生成秘钥之后记得把私钥放到这个文件夹下面就可以),执行命令ssh-keygen -t rsa这时会让你输入生成文件的名字(包括路径的名字),注意私钥最后是要放在/用户名/.ssh/的路径下面的,名字可以自己起。回车第二步:输入公私钥的密码,因为是要免密登录,所以这里不输入密码,直接回车。没有意外这个时候就会生成好公私钥了。第三步:把刚才生成的公钥放到.原创 2020-09-30 14:49:36 · 381 阅读 · 0 评论 -
Linux中文件描述符及其分配规则
文件描述符fd 通过对open函数的学习,我们知道了文件描述符就是一个小整数,可以再次用代码验证一下。 用系统调用函数open打开了四个文件,然后打印他们的文件描述符fd: #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main () { int fd0...转载 2020-07-30 21:42:03 · 1873 阅读 · 0 评论 -
epoll中的边缘触发和水平触发
一.基本概念 我们通俗一点讲:Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll_wait()时,它还会通知你在上没读写完的文件描述符上继续读写,当然如果你一直不去读写,它会一直通知你!!!如果系统中有大量你不需要读写的就绪文件描...转载 2020-05-26 11:26:38 · 2041 阅读 · 0 评论 -
Linux——网络编程(UDP、广播、组播、domain)
1,UDP协议 在计算机网络的文章中已经进行了详细介绍,这里不再描述。 注意:UDP也有可能出现缓冲区被填满后,再接收数据时丢包的现象。由于它没有TCP滑动窗口的机制,通常采用如下两种方法解决:1)服务器应用层设计流量控制,控制发送数据速度。 2)借助setsockopt函数改变接收缓冲区大小。如:#include <sys/socket.h>i...原创 2020-04-07 22:45:45 · 647 阅读 · 0 评论 -
Linux——网络编程(epoll、epoll反应堆、心跳、线程池)
1,epoll函数epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的...原创 2020-04-07 17:12:23 · 4243 阅读 · 1 评论 -
Linux——网络编程(TCP状态转换、select、poll)
1,TCP状态转换图(注意下面两张图是一张图,看的时候自己注意连接处) 这张图由三部分组成,粗线部分是主动发起连接和主动关闭连接时的状态转换图;虚线部分是被动发起连接,被动关闭连接的状态转化图;细线部分是两端同时操作部分的状态转化图。 上图中各部分的所表示的含义如下: CLOSED:表示初始状态。LISTEN:该状态表示服务器端的某个SOCKET处于监听状态...原创 2020-04-06 23:19:22 · 299 阅读 · 0 评论 -
Linux——网络编程(三次握手、并发、并发服务器的实现)
1,三次握手是客户端服务器建立连接的时候使用的,这一部分内容在计算机网络的文章中已经详细介绍过了,这里不再进行描述。2,四次握手是客户端和服务器端断开连接的时候使用的,需要注意的是,Linux下面才在办关闭状态(在计算机网络的文章中已经介绍过了),即允许一端关闭连接,一端不关闭连接。因此要关闭连接的时候必须是两对应达。下图中第二个红框框起来的就是四次握手。3,网络层的一个数据包最大的大...原创 2020-04-06 10:56:37 · 225 阅读 · 1 评论 -
Linux——使用Socket实现C/S模型
1,C/S模型创建流程图 注意,下图,TCP客户端没有调用bind函数,这时候会有默认的IP和端口号。而服务器端就要进行绑定,因为如果让它分配随机的情况下,客户端调用connect函数的时候不知道绑定的服务器端的socket信息。 2,服务器端代码如下:#include <stdio.h>#include <unistd.h>#i...原创 2020-04-05 17:12:47 · 459 阅读 · 0 评论 -
Linux——网络编程(网络协议基础、TCP、UDP、常用网络术语)
1,协议的概念从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定: 第一次,传输文件名,接收方接收到文件名,应答OK给传输方; 第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK; 第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此,无论...原创 2020-04-05 09:50:18 · 308 阅读 · 0 评论 -
Linux——线程同步
1,同步概念 同步 线程同步2,互斥量(互斥锁)3,读写锁4,条件变量5,信号量6,进程间同步信号量 文件锁原创 2020-03-23 09:22:56 · 250 阅读 · 0 评论 -
Linux——线程,线程控制,线程属性
1,线程概念线程与进程的关系 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。 独居(进程);合租(线程)。...原创 2020-03-21 21:35:14 · 209 阅读 · 0 评论 -
Linux——信号,进程间关系,守护进程
1,竞态条件(时序竞态)pause函数 调用该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu) 直到有信号递达将其唤醒。 int pause(void); 返回值:-1 并设置errno为EINTR 返回值: ①如果信号的默认处理动作是终...原创 2020-03-21 10:01:18 · 321 阅读 · 0 评论 -
Linux——信号与信号捕捉
1,信号的概念信号的属性 信号在我们的生活中随处可见,如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪......他们都有共性:1. 简单 2. 不能携带大量信息 3. 满足某个特设条件才发送。 信号是信息的载体,Linux/UNIX 环境下,古老、经典的通信方式,现下依然是主要的通信手段。信号的机制...原创 2020-03-20 09:29:16 · 503 阅读 · 0 评论 -
Linux——进程间通信IPC
Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。...原创 2020-03-19 12:18:35 · 179 阅读 · 0 评论 -
Linux——子进程回收
exec函数族 fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。 将当前进程的.text、.data替...原创 2020-03-18 09:59:28 · 566 阅读 · 0 评论 -
Linux——进程基础与进程控制
进程和程序 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁....) 进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程) 程序→剧本(纸) 进程→戏(舞台、演员、灯光、道具...) 同一个剧...原创 2020-03-17 14:53:26 · 193 阅读 · 0 评论 -
Linux——IO操作
1,C库IO函数中,FILE* ptr是不可避免的会使用到文件指针,文件指针实际上是一个结构体,里面包括三部分内容。其一:文件描述符,作用是所用到对应的磁盘文件;其二:文件读写位置指针(读写操作的时候只有一个这样的指针),其作用是,帮助进行读写,可以使用fseek函数对文件读写位置指针进行重置;其三:IO缓冲区,其作用是通过指针可以找到对应的内存块,默认大小是8kb,是为了减少对硬盘操作的次数才引...原创 2020-03-16 10:51:56 · 381 阅读 · 0 评论 -
Linux——gdb调试,makefile的编写
1,gdb调试 前提:需要对应用程序进行调试,就必须在用gcc编译的时候添加参数-g生成调试信息。 启动gdb调试命令: gdb 包含调试信息的应用程序名字。之后就可以使用gdb的命令进行操作gdb命令 1)查看代码 l 查看程序的源代码,默认显示的是包含main的那个文件,下面的命令显示指定的。 l...原创 2020-03-12 14:42:35 · 449 阅读 · 0 评论 -
Linux——基础(vim,gcc编译,静态库,动态库)
1,vim基本使用介绍 vim被称为编辑器之神,vim是可以打造成IDE的,现阶段水平的作者用到,这里不再详述。只介绍简单的使用。vim的三种模式 1)命令模式 -- 打开文件之后,默认进入命令模式,vi 文件名字 2)编辑模式/输入模式 --需要输入一些命令,切换到编辑模式 3)末行模式 --在末行模式中可以输入一些命令(不...原创 2020-03-11 20:21:08 · 678 阅读 · 0 评论