- 博客(60)
- 收藏
- 关注
原创 bash 条件判断
STRING1 < STRING2 如果 STRING1 的字典排序在 STRING2 之前,则为。STRING1 > STRING2 如果 STRING1 在字典排序在 STRING2 之后,则为。-R VAR 如果设置了shell变量VAR并且是变量引用,则。因aa值不大于23,所以第一个判断(-n)值为真,返回的结果也是no。STRING1 = STRING2 如果字符串相等,则为。判断目录是否存在,存在输出yes,不存在输出no。
2023-10-11 09:42:59
150
原创 bash 字符处理命令
(有可能是一串数字,但是系统认为这串数字是字串,只对第一个进行排序), 第三字段结尾排序,就是只用第三字段排序。第三字段如果是一串数字,加上-n选项,系统会识别为数值型而不是字串。按照指定的字段范围排序,从第n字段开始,m字段结束(默认到行尾)以数值型进行排序,默认使用字符串型排序。指定分隔符,默认分隔符是制表符。指定分隔符是":",用第三字段。
2023-10-11 09:38:32
46
原创 bash awk补充
/把df -h命令显示的数据给grep,搜索有没有包含XXX关键字的,有的话给awk,把包含关键字那行的Y列数据给cut,以'%'为分隔符,提取第一列数据。//把df -h命令显示的数据给grep,搜索有没有包含XXX关键字的,有的话给awk,输出包含关键字那行的Y列数据。打开FileName文件,排除Name这一列,判断第6列的数值是否大于等于87,是的执行后边的语句操作,否则不执行。不加BEGIN,会在每次执行过程中,输出'Char',输入BEGIN,只在开头输出一次'Char'
2023-10-11 09:36:53
33
原创 bash sed
sed 's/旧字串/新字串/g' FileName(/g代表全局替换(global),就是有多少次替换多少次)一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令的处理的行输出到屏幕上。字串替换,用一个字符串替换另外一个字符串,格式为“行范围s/新字串/g”(和vim中替换格式类似)不输出第二行到第四行,在不加"-i"的情况下不对文件进行修改。行替换,用c后面的字符串替换原数据行,替换多行时,追加,在当前行后添加一行或多行,添加多行时,第二行替换为hello(数据替换)
2023-10-11 09:35:10
45
原创 bash cut
说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数 file 所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件 fl 和 f2 的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件 f3 中。当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。为了控制滚屏,可以按 Ctrl+S 键,停止滚屏;cut 命令 用来显示行中的指定部分,删除文件中指定字段。指定字段的分隔符,默认的字段分隔符为“TAB”;
2023-10-11 09:34:01
123
原创 shell awk
出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。当其左右无重定向符|或
2023-10-10 18:52:20
58
1
原创 bash 括号
bc是linux的计算器,是交互式命令,但是bc支持从标准输入中读取参数及逆行运算,但是bc不支持从命令行中读取运算式。[] 是test命令的另一种形式,用于判断某个表达式的返回值是0或者非0,常用于if命令的判断条件。进行数学运算,支持±*/%,并且在$[ ]和$(( ))中使用变量不需要$引用,可以直接使用变量名。$()和``的作用一致,都是用来做命令替换用,一般用于将命令返回的结果传递给变量。test $a=="Linux"等于[$a=="Linux"]a保存的是上述命令的返回值,即一个目录列表。
2023-10-10 18:50:14
27
原创 bash正则
打开passwd,截取包含字符串”/bin/bash“的行,除了包含”root“字符串的,选择”:“为分隔符,截取第一列。例:\<the\> 匹配单词"the",但不匹配"them","there"等。#匹配个或多个前边的字符,作用和"*"号类似,但是不匹配0个字符。"s..d"会匹配在s和d这两个字母之间一定有两个字符的单词。"ab+c" 匹配"abc" "abbc" "abbb…c" 匹配"ac"或"abc"不加”\“会显示所有带"."结尾的行。#匹配1个或0个前边的字符。匹配"abd"或"acd"
2023-10-10 18:40:53
123
1
原创 bash shell终端欢迎信息
是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入"Banner/etc/issue.net"行才能显示(记得重启SSH服务“service sshd restart”)不管本地登录环视远程登录都可以显示此欢迎信息。本地终端欢迎信息:/etc/issue。转义字符在这个文件中不能使用。
2023-10-10 18:33:38
53
原创 bash [] 和 [[]]区别
test也可以实现相似功能区别一[ ]是符合POSIX标准的测试语句,兼容性更强,几乎可以运行在所有的Shell解释器中[[ ]]仅可运行在特定的几个Shell解释器中(如Bash等)区别二:<和>在[[ ]]中用作排序,而[ ]不支持进行比较前先设置LANG=C,在排序时使用ASCII码顺序数字的ASCII码应该小于大写字母,使用[[ ]]的结果是正确的区别三:[ ]中使用-a和-o表示逻辑与和逻辑或,[[ ]]使用&&和||来表示[[
2023-10-10 18:30:20
242
原创 $后跟的各种符号意义
以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个。显示最后命令的退出状态。0表示没有错误,其他表示有错误。传给该shell脚本的第一个参数。传给该shell脚本的第二个参数。脚本运行的当前进程ID号。传给脚本的所有参数列表。
2023-10-10 18:24:36
50
原创 source/“.”/bash/“./“区别
shell的source和.符号是等价的,都是在当前shell中执行一个文件中的命令,而不是启动新的shell。这样可以保留文件中对环境变量的修改。bash和./是不同的,bash是一个shell解释器,可以用来执行一个文件中的命令,但是会启动新的shell,而不会影响当前shell的环境变量。./是一个路径符号,表示当前目录,可以用来执行一个可执行文件,但是需要指定文件的magic number,即文件开头的#!后面跟上解释器的路径。
2023-10-10 18:16:12
297
原创 bash扩展变量
如果parameter变量值为空,返回world字符串,赋值给result变量。如果parameter变量为空,world当作stderr输出,否则输出变量值。如果parameter变量为空,则world替代变量值,且返回其值。如果parameter变量为空,什么都不做,否则world返回。#f为空,":="后会把f设置为后边的参数。用于设置变量为空导致错误时,返回错误信息。#":-"和":="的区别。
2023-10-10 18:05:54
44
原创 set显示或设置shell特性及shell变量
作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。"加<指令编号>的方式来执行history中记录的指令。启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。当执行时使用到未定义过的变量,则显示错误信息。指令所给的参数都会被视为此指令的环境变量。执行指令后,会先显示该指令及所下的参数。执行完随后的指令,即退出shell。
2023-10-10 18:03:21
68
原创 linux连接wifi
查看要断开WiFi网络,只需关闭网卡:要再次激活无线卡,请执行以下操作:使用nmcli从命令行激活和禁用无线连接(飛行模式):网络管理器忘记(即从保存的列表中删除)连接,运行:成功删除连接 "OpenWrt要在Linux系统中通过命令行连接或断开WiFi网络,可以使用以下命令启动nmtui工具:nmtui查看Linux系统中保存的网络连接列表和无线设备名称:
2023-10-10 17:54:40
57
原创 本地-服务器文件传输
scp /home/xx/hello.c root@192.168.0.1:/home/xx/ 把本机/home/xx/目录下的hello.c文件上传到192.168.0.1这台服务器上的/home/xx/目录中。把192.168.0.1上的/home/XX//dirName文件夹下载到/home/XX/file/把192.168.0.1上的/home/XX//hello.c下载到/home/XX/file/把远程服务器的/home/test目录下的log文件夹下载到本地的/root目录下。
2023-10-10 17:54:04
233
原创 免密登录Linux
1.将刚才复制公钥添加到~/.ssh/authorized_keys文件中,没有则创建这个文件。这里使用vim保存到文件中。1.powershell中创建公钥,输入以下命令一路按回车。ssh user@host -p 7899 # p默认22。2.查看并复制公钥,复制下边命令输出的所有文字。2.使用ssh访问就不用输入密码了。二、在linux系统保存公钥。一、win10中创建公钥。
2023-10-10 17:10:12
85
原创 memset/munmap/memcpy函数
memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 [1]。-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。-- 指向要复制的数据源,类型强制转换为 void* 指针。-- 要被复制的字节数。
2023-10-07 15:34:02
42
原创 内存映射及系统调用实现
文件被映射到虚拟内存中后,虚拟内存中的内容是可读可写的,文件的私有映射主要用途时使用文件的内容来初始化一块内存区域,文件映射到虚拟内存上的内存更改时不会写入真正的文件中,既对虚拟内存内容的更改仅仅支队进程本身可见,所以说映射内容时该进程私有的,(只可能出现在父进程和子进程之间,子进程可以继承,但是子进程无法访问父进程的私有映射)共享映射中,文件映射到的虚拟内存上的内容更改是会被改写入到真正的文件中,只是虚拟内存中的内容更改被同步到文件中的时机并不是立即的,内核不保证这种同步操作何时发生,
2023-10-07 15:31:28
37
原创 物理内存模型及三级结构
整个原始的物理空间是连续的,但一些物理空间是不能用来分配的,如DMA区,又或是存储原始数据的区域),这时候怎么来进行管理呢?6.物理页(每个物理页对应一个page结构体,称为页描述符,内存结点的pglist data实例的成员node_mem_map指向此内存节点包含的所有物理页的页描述符组成的数组)b.在具有不连续内存的NUMA系统中,表示比区域的级别更高的内存区域,根据物理地址是否连续划分,每块物理地址连续的内存是一个内存节点。平坦内存:内存的物理地址是连续的,没有空洞。
2023-10-07 15:27:56
53
原创 Linux中断工作流程
3.见当前的函数返回值进行入栈(为了在中断执行后能够找到在哪中断的,能够复原)中断前的处理过程,中断的回复过程。2.将异常码入栈(中断号) //可选?7.跳转回正常工作的函数地址继续运行。跳转回正常工作的函数地址继续运行。跳转到对应的中断服务函数上运行。运行模式的复原以及寄存器的复原。4.调用对应的中断服务函数。6.返回所有入栈的寄存器值。1.将所有的寄存器值入栈。软件及系统调用的处理过程。做CPU工作模式的转化。进行寄存器的拷贝与压栈。保存正常的函数返回值。
2023-10-07 15:22:28
29
原创 mmap函数
有些系统不支持匿名内存映射,则可以使用fopen打开/dev/zero文件,然后对该文件进行映射,可以同样达到匿名内存映射的效果。MAP_PRIVATE 对映射区域的写入操作会产生一个映射文件的复制,即私人的“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件内容。参数start:指向欲映射的内存起始地址,通常设为 NULL,代表让系统自动选定地址,映射成功后返回该地址。MAP_SHARED对映射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享。
2023-10-07 15:21:10
49
原创 自旋锁机制
但是如果锁的竞争激烈,或者持有锁的线程需要长时间占用锁执行同步块,这时候就不适合使用自旋锁了,因为自旋锁在获取锁前一直都是占用 cpu 做无用功,占着 XX 不 XX,同时有大量线程在竞争一个锁,会导致获取锁的时间很长,线程自旋的消耗大于线程阻塞挂起操作的消耗,其它需要 cpu 的线程又不能获取到 cpu,造成 cpu 的浪费。如果发生中断情况,那么其他线程将保持旋转状态(反复尝试获取锁),而持有该锁的线程并不打算释放锁,这样导致的是结果是无限期推迟,直到持有锁的线程可以完成并释放它为止。
2023-10-07 15:19:45
40
原创 input_dev结构体加注释
* 设备支持的事件类型,主要有EV_SYNC,EV_KEY,EV_KEY,EV_REL,EV_ABS等*/int (*flush)(struct input_dev *dev, struct file *file);/* 用于将此input_dev连接到input_dev_list *//* 支持led事件 */
2023-10-07 15:17:26
36
原创 Linux事件编码
注意,所有BTN_TOOL_<name>编码和BTN_TOUCH编码在目的上是互不相干的,手指触摸触摸板产生的事件应该从每个组中产生一个编码。注意:过去,具有BTN_TOOL_FINGER和BTN_TOUCH的触摸设备在用户空间被认为是触摸板,而类似设备没有BTN_TOOL_FINGER被认为是触摸屏。当工具进入到可检测的邻近区域时BTN_TOOL_<name>应该被置1,当工具离开可检测区域时BTN_TOOL_<name>应该被置0。例如,鼠标可能向左移动确定的单位数,但是,它的绝对空间位置是不可知的。
2023-10-07 15:11:55
246
原创 ioctl获取触摸屏信息
define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) //大小字段的位移,16。#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) //方向字段的位移,30。#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) //幻数字段的位移,8。#define _IOC_SIZEBITS 14 //大小(size)字段的字位宽度,14bits。
2023-10-06 14:33:22
97
原创 Linux触摸屏
通常是按照时间先后顺序来的,譬如第一根手指先触碰到触摸屏,那第一根手指就对应触摸点 0(slot=0),接着第二根手指触碰到触摸屏则对应触摸点 1(slot=1)以此类推!这个通常是硬件所支持的。举个例子,譬如一根手指触碰到触摸屏之后拿开,然后再次触碰触摸屏,这个过程中,假设只有这一根手指进行触碰操作,那么两次触碰对应都是触摸点 0(slot=0),这个无疑义!手指从触摸屏上离开后,该触摸点就消失了、被删除了, 该触摸点的生命周期也就到此结束了,所以它们自然是不同的触摸点, 所以它们的 ID 是不同的。
2023-10-06 14:32:06
345
原创 Linux按键数据解析
轴的信息,当前值,最大值最小值,平均值,模糊值,分辨率,是input_dev结构体的成员,通过input_alloc_absinfo函数分配。报告触摸椭圆的中心的x坐标,用于追踪多个触点,最小值和最大值定义了设备活动区域的边界。多点触控(MT)协议的一种功能,标识不同的触摸点,通知接收者准备更新所给的slot。应用程序打开输入设备对应的设备文件,向其发起读操作,那么这个读操作获取到的。,是一个任一的非负整数,由输入驱动生成,正值代表与之关联的。//绝对位移类事件(譬如触摸屏)//同步类事件,用于同步事件。
2023-10-06 14:30:03
66
原创 Linux进程间通讯
如果想要实现进程间通信,我们需要借助第三方资源,这个第三方资源其实就是公共资源,这个资源不属于任何进程,而是需要进行通信的各个进程之间的公共资源,这些进程都可以去访问这个公共资源,譬如向公共资源写入数据、或者从公共资源读取数据,从而实现进程间通信的目的。如果想要实现进程间通信,我们需要借助第三方资源,这个第三方资源其实就是公共资源,这个资源不属于任何进程,而是需要进行通信的各个进程之间的公共资源,这些进程都可以去访问这个公共资源,譬如向公共资源写入数据、或者从公共资源读取数据,从而实现进程间通信的目的。
2023-10-06 14:27:15
27
原创 Linux守护进程
但对于某些进程,特别是并发服务器进程往往是特别重要的,这些服务器进程会创建子进程I譬如服务器进程在收到客户端请求的时会创建子进程去处理这个请求),如果子进程终止,父进程没有去回收,则子进程将成为僵尸进程,如果父进程等待子进程终止、然后回收子进程,这又会增加父进程的负担、也就是增加服务器的负担,影响服务器进程的并发性能。这一步是关键,守护进程的重点就在于脱离控制终端,子进程通过调用 setsid 函数创建新会话,脱离控制终端,成为新会话的首领进程、同时也是新进程组的组长进程。1.2.与控制终端脱离。
2023-10-06 14:26:04
36
原创 Linux会话
控制终端与会话中的所有进程相关联、绑定,控制、影响着会话中所有进程的一些行为特性譬如控制终端产生的信号,将会发送给该会话中的进程(譬如 CTRL+C、CTRL+Z、CTRL+\产生的中断信号、停止信号、退出信号,将发送给前台进程组);2、调用 setsid 函数除了创建新的会话之外、也会创建一个新的进程组 (因为一个会话至少要存在一个进程组),而调用该函数的进程也是这个进程组的组长进程。1、如果调用该函数的进程不是进程组的组长进程,那么调用该函数会创建一个新的会话调用该函数的进程会成为新会话的会话首领!
2023-10-06 14:25:30
52
原创 exec函数族
file:如果参数file中包含/,则就将其视为路径名,否则就按 PATH环境变量,在它所指定的各目录中搜寻可执行。exec函数族的函数执行成功后不会返回,调用失败时,会设置errno并返回-1,然后从原程序的调用点接着往。一个进程只能修改它自己或者它的子进程所属的进程组,并且子进程在调用exec之后就不能再修改子进程。arg:可执行程序所带的参数,第一个参数为可执行文件名字,没有带路径且arg必须以NULL结束。:应先构造一个指向各参数的指针数组,然后将该数组的地址作为这些函数的参数。
2023-10-06 14:23:02
26
原创 进程间关系/获取修改进程组ID
所以每个进程除了有一个进程ID(PID)、父进程ID(PPID)之外,还有一个进程组ID(PGID),PGID用于标识该进程属于哪一个组。3.只要进程组中还存在至少一个进程,那么该进程组就存在,这与其组长进程是否终止无关,组长进程终止并不能导致进程组终止。4.一个进程组可以包含一个或多个进程,进程组的生命周期从创建开始,直到组内所有进程终止或离开该进程组。2.每个进程组都有一个组长进程,组长进程的进程ID(PID)就等于该进程组的进程组ID(PGID)加入一个现有的进程组或创建一个新的进程组。
2023-10-06 14:22:18
96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人