
Linux
文章平均质量分 84
又秃又弱
博客主要记录和分享本人学习,请斟酌帖子,勿一味的输入知识
展开
-
redis | 事务 持久化 缓存穿透和雪崩
比如:在写文本的时候,马上 要到双十一零点,很快就会迎来一波抢购,这波商品时间比较集中的放入了缓存,假设缓存一个小时。缓存穿透的就是用户想要查询一个数据,发现Redis中没有,也就是缓存没有命中,于是向持久层数 据库发起查询,发现也没有这个数据,于是本次查询失败。解决方案3 -- 数据预热 数据预热的含义就是在正式部署之前,先把可能的数据先预先访问一遍,这样部分可能大量访问的数 据就会加载到缓存中,在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间, 让缓存失效的时间点尽量均匀。原创 2023-03-18 11:20:46 · 677 阅读 · 0 评论 -
redis基本入门| 怎么安装redis?什么的是redis?怎么使用?Linux内有哪些基本类型和特殊类型?
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings), 散列(hashes), 列表(lists), 集 合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间 (geospatial) 索引半径查询。原创 2023-02-22 09:23:24 · 430 阅读 · 0 评论 -
【shell】awk、sed、sort是什么?怎么用?
本文只讲解了一些简略的知识框架,如需详细学习,附录几本参考书籍,百度网盘自行下载:链接:https://pan.baidu.com/s/1uqBeL7FF0GiG4EzmWk90sg?pwd=3905提取码:3905。原创 2023-02-09 17:23:40 · 953 阅读 · 0 评论 -
什么是shell?怎么编写脚本?怎么调用脚本?
shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。下图显示了shell(实际上是两种shell:bash、csh)和其他程序环绕在Linux内核的四周。在大多数Linux发行版中,默认的shell程序/bin/sh实际上是对程序/bin/bash的一个连接。可以使用如下命令来查看bash的版本号。原创 2023-02-02 23:01:49 · 1671 阅读 · 0 评论 -
守护进程编程流程及代码实现
守护进程的编程流程:1.fork退出父进程,保证留下的子进程是组员进程2.利用setsid()创建新会话,把子进程挪到新的会话中//获取会话是getsid(3.fork退出父进程,保证在新会话中的子进程是组员进程4.执行chdir(”/“),将工作目录改在根目录下,因为进程运行周期较长,可能会导致后期卸载不掉,所以放在不可被卸载的工作目录下5.设置掩码umask(0) //4和5的顺序可以调换。umask :第一位数字代表的是特殊权限忽略0原创 2023-02-01 11:42:00 · 468 阅读 · 0 评论 -
Git和Github
git:可执行程序,代码版本控制工具github:托管代码git基本概念。原创 2023-02-01 11:31:15 · 1047 阅读 · 0 评论 -
io复用函数的使用
一般多客户端在和服务器通信时,服务器在执行recv时会先阻塞,然后按照顺序依次处理客户端,无论客户端有无数据都会被处理,这样大大降低了执行效率。此时就引入i/o复用技术,提高网络程序效率io的处理方式是没有数据的客户端忽略不管,一旦接收就阻塞起来,有数据的客户端接收。原创 2022-12-13 09:08:29 · 504 阅读 · 0 评论 -
网络编程/计算机网络
无状态的优点是简单、高效。TCP/IP 协议体系结构中,数据链路层的功能描述为实现网卡接口的网络驱动程序,以 处理数据在物理媒介上的传输,不同的物理网络具有不同的电气特性,网络驱动程序隐藏了 这些细节,为上层协议提供了一个统一的接口。因此,这一层的主要功能 是在物理层提供的比特流的基础上,通过差错控制,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。端口可以理解为应用程序代号,是软件层次的,用于表示一个进程/应用程序,目的是方便查找,可以实现不同主机之间的通信。原创 2022-11-25 16:09:56 · 1807 阅读 · 0 评论 -
【Linux】文件及目录
检索时,对以‘/’开头的路径名,须从根目录开始检索,否则,从当前目录开始,并把与之对应的i节点作为工作索引节点,然后用文件路径名中的第一分量名与根或与当前目录文件中的各目录项的文件名,逐一进行比较。若结果为0,便回收该内存i节点,再对该文件的磁盘i节点中的连接计数减1,若其结果也为0,便删除此文件,并回收分配给该文件的盘块和磁盘i节点。创建一新文件时,就为之建立一个磁盘索引结点,以将文件的有关信息记入其中,并将用户提供的文件名和磁盘索引结点号一并组成一个新目录项,记入其父目录文件中。原创 2022-11-22 20:46:12 · 471 阅读 · 0 评论 -
【Linux】文件及目录
系列目录。原创 2022-11-22 20:31:51 · 852 阅读 · 0 评论 -
【线程】多线程安全
Linux对很多不可重入的库函数提供了对应的可重入版本,在函数名尾部加_r。在多线程程序中调用库函数,一定要使用其可重入版本,否则可能导致预想不到的结果。值得说明的说strtok函数中有个内部指针用来标记走到哪个位置,而该指针的生存期超越函数,是个静态。代码实现程序创建了2条线程,即2个执行路径,在其中一条执行路径中fork,fork出对当前路径的进程复制。复制后,只启用1条执行路径,启用的路径是当前fork所在的执行路径。为什么除了第一组外,其余的main内打印的是buff数组的字符?原创 2022-11-22 09:14:47 · 756 阅读 · 0 评论 -
【线程】线程同步
前言线程同步的实现方法:信号量、互斥锁、条件变量、读写锁。下面就对着四种方法进行展开描述原创 2022-11-18 11:41:36 · 329 阅读 · 0 评论 -
【线程】多线程编程
概念线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境和调度者的身份,县城可分为内核线程和用户线程。线程运行在内核空间,由内核来调度。当进程的一个内核线程获得CPU的使用权时,他就加载并执行一个用户线程线程库负责管理所有执行线程,比如线程的优先级、时间片等。线程库利用longjmp来切换线程的执行,使他们看起来像”并发“执行,但实际内核仍然是把整个进程作为最小单位来调度。一个进程的所有执行线程共享该进程的时间片,他们对外表现出相同优先级。线程的实现方式分为三种模式:完原创 2022-11-17 09:38:53 · 3141 阅读 · 0 评论 -
【Linux】进程间通信——管道
当从一个进程连接数据流到另一个进程时,使用“管道”。原创 2022-11-16 21:16:43 · 1129 阅读 · 0 评论 -
【Linux】进程间通信——消息队列
如下图所示,对message1.c编译为mess1,执行该程序,发现a1写入的”hello1“被读取输出在屏幕上。message.c:发送消息”hello1",该进程运行一次,就会有1个“hello1"被添加入消息队列中。如下图所示,对message.c编译为mess,执行该文件1次,执行ipcs命令查看发现消息队列被添加一次。通过代码掌握消息队列是如何发送与接收消息。在消息队列中读取消息。原创 2022-11-16 20:15:59 · 2014 阅读 · 2 评论 -
【Linux】进程间通信——共享内存
例2:进程A从键盘循环获取数据并拷贝到共享内存中,进程b从共享内存中获取并打印数据。要求进程a输入一次,进程b输出一次,a不输入,b就不输出。一般给0代表可读可写,可以给SHM_RDONLY 为只读模式,其他为读写。例1:进程A向共享内存写入数据,进程B从共享内存中读取数据并显示。A(./main)未输入时,B(./test)不输出(阻塞着)而输出的时候一直输出S内的数据,没有控制,会一直循环输出。正确流程是写入一次读取一次,不写入不读取。A输入end,A,B退出。A输入一个,B读取一个。原创 2022-11-11 09:38:48 · 1936 阅读 · 0 评论 -
【Linux】进程间通信——信号量
PV操作:假设一个信号量变量sv,则如下表的两个操作定义: 保证同一时刻只能有一个进程对某个资源进行访问,防止因多个程序同时访问一个共享资源而引发的问题,使得在任意时刻只有一个执行线程访问代码的临界区域。而一个进程要持续不断的运行以等待某个内存位置被改变。头文件:#include 信号量的使用只需用一个最简单的二进制信号量即可,在下面例子讲述用完整编程接口为二进制信号量创建一个非常简单的pv类型接口。例子: 用进程a和进程b模拟访问打印机,进原创 2022-11-04 11:20:37 · 1887 阅读 · 0 评论 -
【stat】系统调用
stat结构中返回的st_mode标志还有一些与之关联的宏,他们定义在头文件中,这些宏包括对访问权限、文件类型标志以及一些用于帮助测试特定类型和掩码的定义。stat函数返回是通过文件名查找到的状态信息,当文件名是一个符号链接时,sta返回是的是该链接所指向的文件信息。原创 2022-10-30 13:12:54 · 482 阅读 · 0 评论 -
【Linux】bash项目mybash的实现
命令解释器:收到命令后解析它然后执行用户运行./main、ls等命令时,就是交付给bash运行,当其结果呈现给用户bash工作原理先fork自己一份,复制出来一份子进程,然后子进程替换成要执行的命令。不断复制自身,然后用exec执行程序原创 2022-10-25 18:30:31 · 947 阅读 · 0 评论 -
【Linux】文件与目录的底层系统调用
Linux系统上一个常见问题就是扫描目录,也就是确定一个特定目录下存放的文件。在shell程序设计中,这很容易做到——只需要让shell做一次表达式的通配符扩展。在过去,UNIX操作系统的各种变体都允许用户通过编程访问底层文件系统结构。我们仍然可以把目录当作一个普通文件那样打开,并直接读取目录数据项,但不通用的文件系统结构及其实现已经是这种方法没什么可移植性了。现在,一整套标准的库函数已经被开发出来,使得目录的扫描工作变得简单。与目录文件操作有关的函数在dirent.h头文件中声明。原创 2022-10-25 11:03:51 · 1088 阅读 · 0 评论 -
SCFS、SFJ代码实现
SFJ、FCFS代码及运行结果原创 2022-10-18 15:26:19 · 608 阅读 · 0 评论 -
【Linux】信号
通过signal系统调用更改信号的响应方式以signal 2举例:SIGINT ->2信号 //键盘按下 Ctrl+c 时,会产生终端中断信号此时,输入ctrl+c会输出sig=2,那怎么使值停下来?输入 ctrl \:产生终端退出3.SIG_IGN忽略。原创 2022-10-18 11:32:14 · 1334 阅读 · 0 评论 -
【Linux】进程替换exec
的库标准写:char *myargv[]={"ps","-f",0};的库标准写: execle("/usr/bin/ps","ps","-f",(char *)0,envp);的库标准写: char *myargv[]={"ps","-f",0};的库标准写:char *myargv[]={"ps","-f",0};的库标准写:execl("/usr/bin/ps","ps","-f",(char *)0);的库标准写:execlp("ps","ps","-f",(char *)0);原创 2022-10-16 18:43:56 · 432 阅读 · 0 评论 -
【OS】虚拟内存
进程中的所有存储器访问都是逻辑地址,这些逻辑地址在运行是动态地被转换为物理地址。基于分页技术或者分页和分段技术组合的虚拟内存,是现代计算机中内存管理最新常用的方法之一。虚拟内存对应用程序完全透明,使得每个进程在执行时好像有无限的内存可用。操作系统为每个进程在磁盘创建一块虚拟地址空间,即虚拟内存。在需要的时候可以把部分虚拟内存载入到真正的内存中。这样,多个进程便可以共享相对比较小的内存。原创 2022-10-12 15:39:42 · 357 阅读 · 0 评论 -
【Linux】文件描述符&先打开open文件再fork&先fork再open
首先,fork创建的子进程的pcb,然后,子进程把父进程的拷贝一份。子进程的file.txt就是拷贝父进程的,也就是他俩共享fork之前的文件描述符。总结:父进程的文件描述符fork以后,子进程也可以访问,而且父子进程共享文件偏移量。(父进程打开一个文件,fork之后的子进程也可以使用,父子进程共享)补充:在这种情况下,共享偏移量,如果父子进程共同编写文件会出错,因此,父进程一般情况下把文件给子进程,子文件编写。原创 2022-10-11 13:55:02 · 1091 阅读 · 1 评论 -
【gcc/gdb】指令使用
GCC是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。GCC可以针对多种硬件平台编译出可执行程序,其平均执行效率比一般编译器生成的程序要高20~30%。使用GCC由C语言源代码文件生成可执行文件的过程要经历四个相互关联的步骤:预处理、编译、汇编和链接。使用[-o filename]参数,可以在c程序编译后,输出可执行的文件名为filename;如果没有这个参数,GCC将使用缺省的可执行文件名a.out。原创 2022-10-11 13:33:23 · 1109 阅读 · 0 评论 -
【Linux】fork()
1、fork是什么2、 fork复制原理3、逻辑地址与物理地址4、计算fork()输出次数例题分析——打印几个A?原创 2022-10-11 10:25:14 · 3381 阅读 · 0 评论 -
【LINUX】退出码和文件
Linux 下进程的退出包括了正常退出和异常退出,正常退出包括了 A) main() 函数中通过 return 返回;B) 调用 exit() 或者 _exit() 退出。异常退出包括了 A) abort() 函数;B) 收到了信号退出。man 2 waitWIFEXITED 正常退出的状态WEXITSTATUS 正常获取退出码。原创 2022-09-28 18:55:39 · 972 阅读 · 0 评论 -
【Linux】指令格式
根据系统预先生成的文件/目录数据库(/var/lib/slocate/slocate.db)查找匹配的文件/目录,查找速度很快,如果有刚进行的文件改变而系统未到执行定时更新数据库的时间,可以打入updatedb命令手动更新。注:ls与其它命令搭配使用可以生出很多技巧(最简单的如"ls -l | more"),更多用法请输入ls --help查看,其它命令的更多用法请输入 命令名 --help 查看.显示服务器当前目录下所有文件(略同于Linux的 ls -l指令)注意:(1)命令一般是小写字串。原创 2022-09-20 09:23:31 · 1703 阅读 · 0 评论 -
【Linux】多文件编译makefile
如图所示,先书写makefile文件,然后输入make命令显示出makefile文件内内容,最后可看出不书写步骤一中的gcc -o main main.c add.c max.c的命令仍可编译运行出main函数的结果。而此时需要在main文件后面加上对add和max的编译,不然编译器在编译时找不到,必须加到命令后面,如下图所示解决了问题。原创 2022-09-08 21:58:24 · 4241 阅读 · 0 评论 -
【Linux】静态库与共享库
图示为创建foo.h头文件以及在main函数加入foo.h头文件。.a)、共享库/动态库(命名规则:lib。库的分类:静态库(命名规则:lib。根据上述步骤就可看出编译成功啦~根据上述步骤就可看出编译成功啦~库:是一组预先编译好的方法的集合。查看使用了哪些共享库。原创 2022-09-08 21:53:00 · 1471 阅读 · 0 评论 -
【Linux】gdb安装、执行与调试
在编译阶段会加入某些调试信息release版本 //linux默认,给用户,发行版本,没有调试1信息。undisplay display的编号 :取消一个display。info b / info break 查看断点信息。delete 断点编号 : 删除断点。当再次输入为如下界面,即安装成功。调试信息是在编译过程中加入到中间文件.o文件的。gdb test 进入调试。b+函数名 加断点到入口处。debug是给程序员使用的。display :自动打印。b +行号: 加断点。r: 运行,启动程序。..原创 2022-08-11 12:40:17 · 4706 阅读 · 0 评论 -
gcc编译原理与命令
链接就是将所有的.o文件 .a文件(静态库文件) .lib文件 .obj文件链接起来,生成.out文件(ELF格式的可执行文件,Windows是生成.exe文件)a)合并各个section,调整section的起始位置和段大小,合并符号表,进行符号解析,给符号分配虚拟地址;b)处理所有的条件预编译指令,"#if" ,"#ifdef" ,"#endif"等;c)处理'#include"预编译指令,将被包含的文件插入到该预编译指令的位置;//将main.c预编译生成main.i文件。d)删除所有的注释;...原创 2022-08-11 11:12:51 · 568 阅读 · 0 评论 -
【LINUX】常用的命令及解释
touch 文件名 (eg: touch a.txt :创建了a的文件)find 搜索路径 -cmin -n(搜索过去n分钟内修改的文件)拷贝+重命名:cp 源文件路径+文件名 目的路径+新文件名。拷贝目录文件:cp -r 源文件路径+目录名 目的路径。拷贝普通文件:cp 源文件路径+文件名 目的路径。重命名:mv 源文件路径+文件名 目的路径+新文件名。移动普通文件:mv 源文件路径+文件名 目的路径。移动目录文件:mv 源文件路径+文件名 目的路径。...原创 2022-08-08 17:04:54 · 912 阅读 · 0 评论 -
【LINUX】文件权限与文件类型
Linux不以文件的扩展名来区分文件类型(文件扩展名可以随便写),在文件属性中一有一列专门记录文件类型(输入ls -l 的命令查看文件类型)(红色那列的文件类型 - :普通文件;普通文件:.c .cpp .h .pdf .xls。g:(group)表示文件同组用户的访问权限。o:(others)表示其他用户的访问权限。链接文件:相当于windows上的快捷方式。设备文件:字符设备文件、块设备文件、套接字。u(User)表示文件属主的访问权限。管道文件:用于进程间通讯的文件。r:(read)读权限。...原创 2022-08-09 09:01:16 · 391 阅读 · 0 评论 -
【Linux】用户信息
LINUX为多用户的管理系统,如图所示。当一个用户要登陆进入Linux系统时,他有一个用户名和密码。一旦用户名和密码通过验证,用户就可以进入一个shell。用户有一个唯一的用户标识符UID。Linux运行的每个程序实际上都是以某个用户的名义在运行,因此都有一个关联的UID。UID由自己的类型——uid_t,他定义在头文件sys/types.h中。它通常是一个小整数。有些UID是系统预定义的,其他则是系统管理员再添加新用户是创建的。一般情况下,用户UID的值都大于100。原创 2022-08-08 16:58:06 · 778 阅读 · 0 评论 -
【LINUX】vi/vim中常用命令及解释
注意:不能从插入模式直接到末行编辑模式,必须将插入模式转为命令模式,再从命令模式到末行编辑模式。(2)输入上图中第三行的命令:"sudo apt install vim"w (路径) 文件 另存为。强制退出(不保存退出)按照图示步骤,不报错证明安装成功。vi/vim 是文本编辑器。............原创 2022-08-08 13:09:37 · 1570 阅读 · 0 评论 -
LINUX中的chmod修改文件权限命令
1) chmod a-r a.txt :去除掉所有人的写权限)+ :增加权限;//664:第一列6:w+r;3)同时修改:chmod u-w,g+x a.txt。2)改为可读可写:chmod u=rw a.txt。每个角色的数值由其所具有的权限对应数字之和构成。x:execute,执行权限,值1(001)图示:去除掉a内其他o的写权限r。r:read ,值4(100)w:write,值2(010)chmod nnn文件名 (n的范围:0-7)...原创 2022-08-08 12:29:15 · 2440 阅读 · 0 评论 -
【LINUX】进程
图示为后台启动两个sleep的进程,利用kill暂停了3809的进程,最后jobs显示出来。:运行中的程序(是个动态的过程)。举例我们打开任务管理器,其中这些都是正在运行的进程。上图显示PID是唯一标识进程,PID不同,下图使用PKILL命令删除相同名称。:操作系统对进程的标识,每一个进程的PID都是不同,唯一表征进程。-e 显示系统中所有的进程信息。-l 显示进程中的线程id。-f 显示更多的进程属性。图示为显示更多的进程信息与当前终端有关的进程信息。图示为使用PKILL命令删除相同名称的进程。..原创 2022-08-08 12:25:45 · 713 阅读 · 0 评论 -
【LINUX】文件的压缩与解压命令
z GNU版本新加的,使得tar有压缩和解压功能。f 指定目标为文件而不是设备。t 显示包中的内容而不释放。x 释放包中的内容。图示为将mytar文件使用tar命令进行打包压缩。压缩:gzip+打包的名称。图示为gzip解压文件的示例。...原创 2022-08-08 10:56:30 · 153 阅读 · 0 评论