url address
1.12) grep
Linux下面查找文本命令grep, 类似于Window编辑器的ctrl+F查找我们想要的内容,
PS:对比learning skill
看一下它的基础用法,准备一个目录文件和文本文件,
打印出这个单词,或者包含有这个字母的所有字符串
[root@iZ2vc5lqzt23aweti4j777Z ~]# grep hello April29th2024/testfile1.txt
hello
helloworld
会发现,它是区分大小写的>>如果忽略大小写, -i (ignore),
-w表示精确匹配, (The “-w” option in grep is used to match the search pattern as a whole word, )
反向查找,
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]# grep hello testfile1.txt
hello
helloworld
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]# grep -v hello testfile1.txt
Hello
Helloworld in the testfile1.txt
Today is a sunny day
(The -v option instructs grep to print all lines that do not contain or match the expression. The –v option tells grep to invert its output, meaning that instead of printing matching lines, do the opposite and print all of the lines that don’t match the expression.)
一个目录下面所有包含这个字符的文件
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]# grep -r hello /root/April29th2024
/root/April29th2024/testfile1.txt:hello
/root/April29th2024/testfile1.txt:helloworld
/root/April29th2024/testfile3.txt:hello
/root/April29th2024/testfile3.txt:helloworld
/root/April29th2024/testfile2.txt:hello
/root/April29th2024/testfile2.txt:helloworld in the testfile1.txt
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]# grep -r hello
testfile1.txt:hello
testfile1.txt:helloworld
testfile3.txt:hello
testfile3.txt:helloworld
testfile2.txt:hello
testfile2.txt:helloworld in the testfile1.txt
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]#
-r 当前文件夹下面包含字符的文件行,-lr, 查找文件夹和子文件夹下面,包含字符串的文件
grep -lr Explained: The grep -lr command searches for a specific pattern in all files within a directory and its subdirectories. It then lists the filenames of the files that contain the pattern. The -l option tells grep to only print the filenames, and the -r option tells it to search recursively through all subdirectories.
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]# grep -r hello
testfile1.txt:hello
testfile1.txt:helloworld
testfile3.txt:hello
testfile3.txt:helloworld
testfile2.txt:hello
testfile2.txt:helloworld in the testfile1.txt
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]# grep -lr hello
testfile1.txt
subdirectory/testfile1.txt
testfile3.txt
testfile2.txt
-E 启用regularly expression, | means or
[root@iZ2vc5lqzt23aweti4j777Z April29th2024]# grep -E ‘hello|today’ testfile1.txt
hello
helloworld
,TDL
: to make search efficiency higher, we can use grep command with regular expression together,
{The abbreviation of “-r” in grep is “recursive.” This means that the grep command will search for the specified pattern in all files within the specified directory and its subdirectories.
📝 Other common grep abbreviations:
-i: Case-insensitive search
-v: Invert the match, showing lines that don’t match the pattern
-w: Match whole words only
-n: Show line numbers
-c: Show only the count of matching lines
-l: Show only the names of files with matching lines}
top(1)
今天学习一下Linux下面运用于实时监控CPU和内存资源占用情况的交互式工具TOP,看一下top显示内容,>
进入交互式工具内部,显示内容大致上分为三个区域,
1)概览区域,
2)空行是交互区域,我们在和top进行交互的时候呢,会显示一些交互的信息,
3)任务列表区,:默认情况下,按照我们的进程为单位,显示每一个进程相关的一些数据信息
好,我们来分区域,>>看一下每个区域里面的内容,>>
首先第一个区域的第一行,
top表示我们当前使用的命令是top>>> 后面跟着是系统时间 >>>up表示系统启动了多久>>>user表示有几个linux窗口开启
load average表示当前系统的平均负载, 后面的三个数字分别表示,当前系统在一分钟,10分钟还有一个15分钟的一个平均负载,
第二行是Tasks,也就是我们的任务, 默认以进程为单位,显示任务, total表示当前系统一共有131个进程,一个运行,130个休息,(进程状态还有中断interrupt等等形式)
第三行显示的是CPU相关的统计信息,单位是百分号,也就是我们cpu占用时间的一个百分比>>>
然后us呢?它代表没有修改过优先级的用户态进程,它占用CPU的一个百分比时间,这里提到概念就是优先级,我们知道我们的进程都是有优先级的,→也就是优先级高的会优先使用我们的资源,优先级低的一般会谦让一点, 让优先级高的优先使用我们的资源
和优先级相关的有两个数,一个是我们的priority也就是这里的pr(3–任务列表区),还有一个就是我们的NI,ni是一个nice值,nice值的取值范围[]-20,19],一共40个数,>>>nice值越小,代表优先级越高,
怎么理解NI(nice值)越小,优先级越高? for instance, 你和同事吃饭,都看上了一块肉,然后他把肉让给了你,你觉得这个人很nice,评价值变高,同样彰显他的资源占有能力就越低, 他的优先级越低,大家理解一下,
后面的sy(概览区)也就是我们的system,它sy代表我们的内核态进程,它使用CPU的一个百分比时间,;
然后后面的ni也就是我们的nice,代表修改过nice值,也就是修改过优先级的用户态进程,它占用CPU的一个百分比时间,;
后面的id(第一部分的概览区)也就是我们的idle,它呢也是显示空闲CPU的一个百分比,;
后面wa呢,也就是io wait,也就是系统中等待io操作的进程,它的一个CPU的占用百分比,;
后面的hi也就是hardware interrupt缩写,硬件中断占用我们cpu的百分比时间,;
后面的si,就是Software interrupt缩写, 也就是我们软中断,它占用CPU的一个百分比时间,;
后面的st,steal, 显示的是虚拟环境下虚拟化层,它由于在调度,也就是我们的虚拟化层调度我们虚拟机的时候,它(虚拟化层)也会去占用一些CPU,那么这些进程它占用CPU的的一个百分比时间
下面这个kib mem,它显示我们物理内存相关的一些统计信息,kib代表物理内存的单位是kib,total总共,free空闲,used使用比例,buff/cache用作缓存的内存总量,;
swap是我们的虚拟内存相关的一些统计信息,单位仍然是kib,然后有total,free和used. >>>出现句号 full stop/period后面的数, 就和虚拟内存没有关系了,显示的是系统中可用的内存总量是多少,大家注意一下,;
空格(第二个区域)可以暂时不管…
然后我们接着来看第三个区域,也就是我们的任务列表区,它这个区域显示了一些字段,这些字段是可以进行配置的,我们这里显示的只是一些比较重要的字段,
先来看一下pid是我们process id,进程id, 然后是user,它这里显示就是有效用户的一个用户名,
然后是pr也就是priority,也就是用户进程的一个优先级,
然后后面是我们的nice值, 刚才已经介绍过了,
后面virt也就是virtual memory的缩写,显示进程使用的一个虚拟内存的大小,每一个进程,它使用了多少的虚拟进程,单位仍然是kib
后面的res是resident的缩写,它是进程使用的驻留内存的一个大小,
后面的shr就是我们的share,就是我们进程使用共享内存的一个大小,
后面的s呢?是我们进程的一个状态,状态有好几种, s-sleeping, r-running, t-tracked or stop(已被跟踪/或者已停止的), z-zombie僵尸进程,
后面%CPU代表自从上一次更新到现在,任务所使用的一个CPU时间的一个百分比,
%MEM就是我们进程使用的一个物理内存,它占用的一个百分比,
TIME+呢?表示任务启动后到现在所使用的全部的CPU的时间,精确到1%秒,
后面的command就是我们的一个命令名称,.;
top命令默认进来的只有一个窗口(当前define),但是实际有四个窗口,默认窗口按照我们的%CPU,也就是我们使用CPU的进程, 使用CPU的一个百分比时间去进行排序的,
,调一下,高亮显示,怎么去调呢?我们可以按一下x,如果按了x没有反应,可以先先按b再按x (sum: x+b 组合键),就可以将按照哪一列字段高亮显示出来(第一窗口主要是按照这个%CPU字段来高亮设计的)_,具体的交互式操作,我们下一节会将会解释,
我们把这个调出来以后呢, 可以看一下其它的窗口了,>>我们可以用我们的g也就是go,>>当前是第一个窗口define,第二个窗口叫做job窗口,每一个窗口它的设置都是独立的,可以不受前面的控制,我们也可以用x,b去显示一下,
job窗口会显示一些和进程job相关的一些信息,它觉得这些东西和这个相关性比较高,同时比较重要就会在这里显示,这里其实是按照PID进行排序的,
2区域,空白行交互区域, 按g+1/2/3/4 job 2窗口,以pid进行排序的
窗口3 map窗口,以内存使用量进行排序的,把它进行高亮显示,
第四个窗口,user, 它是按照我们的有效用户名称排序,现实一些user相关的字段,
再介绍一下top命令下的模式,每个窗口都是全屏去显示的–全屏模式,>还有一种模式,分屏模式,也就是可以在同一个屏幕上去显示四个窗口(交替模式),>>shift + a = A,同时显示4个窗口,
前面的编号代表的是每个窗口,press a - next windows(下一个窗口); press w - previous wiindows(前一个窗口),
x+b只会高亮显示选择的一个窗口,
同时也可以使用g+1/2/3/4,切换到不同窗口高亮显示(x+b),;
这就是我们的四个窗口,两个模式,以及top命令它显示的一些内容,
top(2)
上一节我们学习了三个区域和四个窗口,这一节我们看下top里面我们可以使用的交互命令有那些?,首先看一下键盘上小写h,>>可以跳转到我们的一个帮助文档里面,
交互命令相关文档—版本—第一个窗口 (累计模式, 什么是累计模式呢? 在累计模式下,每一个进程, 都会列出它和它已经被杀死的子进程 使用过的所有的CPU时间,也就是把所有cpu时间给它累加起来, 进行计算,所以叫累计模式 >>>这个模式呢, 默认是关闭状态,
后面 system: Delay 3.0 secs…是我们投屏里面,它每次刷新的一个时间间隔, 默认呢是3秒刷新一次, >>再后面 Secure mode off是安全模式的状态, ,在安全模式下呢,我们没有办法在top里面去, 通过交互命令呢,杀死进程, 或者修改我们的进程nice值>>没办法修改我们top刷新的一个时间间隔,这是安全模式
下面呢,就是所有在top里面支持的交互式命令,它们的名称以及它们简单的一个说明,接下来一个一个来看一下这些命令
看之前,我们首先要明确2点, 在top里面所有的交互式命令呢, 它们都是严格区分大小写的,> 就是大写字母和小写字母它对应的, 功能可能会有所不同, be awared.
还有呢,就是我们所有的交互式命令,它只能在我们刚进来的那个交互模式下去使用,就是
刚进来的这个模式下有我们的命令交互区域,空白行的这个区域呢,才可以进行交互,
那么像在帮助文档里面,我们按这些键是没有效果的,>大家一定要注意,执行交互命令的时候,一定要按q,退出帮助文档,去执行我们的交互命令,下面来看一下这些交互式命令,
首先大写Z是一个颜色配置面板的一个开关,让我们对我们的窗口进行一些颜色配置,我们先来看一下这个交互式命令,好的我们回到交互式窗口下,按下Z(shift+z),就可以跳到这个颜色的配置了,它这里明确的告诉我们,当前窗口是第一个窗口,也是默认窗口;
因为我们在讲4各窗口的时候说过,每一个窗口都是独立的,所以我们也要去为不同窗口配置不同的颜色搭配方案;
下面这是一个简单精简版窗口,我们可以在这里看到我们颜色搭配的一个效果,下面就是这里提供了3个开关,
那么大写的B它是全局的一个是否加粗显示的一个开关,小写z控制彩色显示还是单色显示,那么现在它是on的时候,你看上面就可以看到它可以显示彩色, ,那么如果你按一下z把它off掉,那么它就只是单色显示,
B - 全局数字加粗,b - 任务栏数字加粗 (not significant )
下面就是在颜色配置的时候把它分成了四个target, (current target is T) - 当前选中的target, ,> S = Summary Data, S代表总结型的一个数据,;
这里我们要注意,我们的概览区域呢, 有负载均衡行, 还有下面的tasks CPU, 还有我们之前说过的内存相关的一些数据, ,;
那么这个总结型数据呢, 它只包含了我们的tasks,CPU还有我们内存相关的数据,> 第一行负载均衡它是不包含的,负载均衡这一行它的颜色是没有办法去修改的,>>> a or w : to commit & change another (change the current window color and then will change the next windows color )
PS: 只有在交互式窗口才能执行命令,h按钮下的帮助文档无法互动指令,
让我们具体来演示一下,从上到下配置一下,首先我们按一下大写的S, 选择我们当前要配置的是summary Data终结型数据(第一行),M = messages/Prompts(命令交互区域),标题行M黄色就不用改了,任务行任务信息改为7,白色,
配置完成以后,enter键,保存退出,这就按照我们设置颜色显示了,
然后按shift+e (E), mem内存, Swap - virtual memory,这两行是和内存相关的,按下E看一下它的单位(从kb到mb到Gb,最后回到kb,m,G,t,P,KB,),切换和概览区域相关的内存相关的单位,>>从小到大,循环切换,
然后e,小e就是任务列表区中每一个进程使用虚拟内存()的单位,
接下来, l第一行负载均衡,t代表task和cpu, m代表内存两行
l就是显示或隐藏负载均衡这一行信息,
按一下t就是显示tasks和cpu相关的信息命令, 第一次: cpu进度条; 第二次: 阴影显示, 第三次按t就不显示tasks和cpu行了,(和内存显示相同),>
它就是切换CPU和我们让你无行管的那两行里面它显示的效果,
m就是控制内存两行,效果和按t控制内存两行信息是一样的,
这个就是控制上面(1-概览区)这几个部分,是否去显示的开关,
我们再来看一下,0,1,2,3它们的效果,他们也是开关,
0是控制任务列表里面某些字段,它下面有很多0,我们看一下,它是控制概览区这些零是不是要显示的开关,
这个0功能,智能控制部分字段, PR和NI无法控制,
按1控制的是,概览区和CPU相关的信息,以前我们说它有一个s代表它是把所有的CPU信息综合到这一行里面去显示,它显示的是所有CPU的一个综合信息,> 现在很多的机器都是多核(1核=1哥cpu)的,>>>那么如果你要然他显示每一个CPU详细信息,按数字键1,它就会单独列出每一个CPU的一个信息,博主这里有16个cpu,
我们这里有2个CPU,
列出每一个cpu相关信息,按一下数字键1,又回来了,.
数字键2是去控制概览区域里面,是否显示每一个numa节点(numa涉及到其它理论知识,用到时候查阅一下)上的CPU的统计信息,>效果和我们的数字1是差不多的,>>1控制的是CPU,2控制的是NUMA节点,就是是否显示numa节点,
还有就是数字键3, 这里有两个numa节点,数字键3就是选择你要显示哪一个numa节点上的CPU,
选0就是numa节点0上面的CPU,它就只显示前面的8个cpu(总共16个CPU),
数字开关的一个效果,接着来看一下, 大写I, ctrl+i,控制的是Irix模式, Irix模式影响的是我们CPU的一个使用率,它的一个显示效果,默认的咋们这个叫solaris模式,在solaris模式下面,任务的CPU使用率,会除以CPU总数,但是IRIX模式下,不回去除,根据需求选择是否使用这种模式
top3)
f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width
f大小写功能都是一样的,都是打开我们任务列表区域里面,字段配置面板的一个开关,来看一下它的作用,稍后咋们一个一个来讲,
星号*代表会在当前窗口展示这个字段,没有星号就代表不展示,前面是缩写,后面是全称,>>>通过全称去判断每一个指标代表了什么具体含义,
下面加粗显示(高亮两行字段,通过左右方向键选择)区域,默认就是刚进来的时候,它会选中我们这个排序的一个字段(是否显示),那么你可以通过上下键去移动它,>>>移动完以后,我们就可以配置每一个字段,它是否去展示(按住d或者space),