第四周作业

1. 总结脚本高级命令trap, install, mktemp, expect, 进程优先级命令:nice, renice, 进程管理工具: ps, pstree, prtstat, pgrep, pidof, uptime,mpstat,top,htop, free, pmap, vmstat, iostat, iotop, iftop, nload, nethogs, iptraf-ng, dstat, glances, cockpit, kill, job, 任务相关的命令: at, crontab, 命令,选项,示例。

trap命令:

trap 命令可以捕捉信号,修改信号原来的功能,实现自定义功能:

trap选项:

#进程收到系统发出的指定信号后,将执行自定义指令,而不会执行原操作
trap '触发指令' 信号
#忽略信号的操作
trap '' 信号
 
#恢复原信号的操作
trap '-' 信号
#列出自定义信号操作
trap -p
#当脚本退出时,执行finish函数
trap finish EXIT

范例:

#!/bin/bash
trap "echo '我将在此期间捕获23信号用echo代替'" int quit
trap  -p

for i in {1..10}
 do
   sleep 1
   echo " 数字是$i"
 done

#再此次期间忽略信号2,信号2的指令不能退出 
trap  '' int

for i in {11..20}

 do
   sleep 1
   echo " 数字是$i"
 done

#再此次期间恢复信号2 可以退出了。 
trap  '-' int

for i in {21..30}
 do
   sleep 1


在这里插入图片描述

linux中的信号种类:
[root@centos7 ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
linux中常见的信号
1	SIGHUP	该信号让进程立即关闭.然后重新读取配置文件之后重启
2	SIGINT	程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
3	SIGQUIT	程序退出信号(同 Ctrl + \)
8	SIGFPE	在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9	SIGKILL	用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程
14	SIGALRM	时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15	SIGTERM	正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
18	SIGCONT	该信号可以让暂停的进程恢复执行。本信号不能被阻断
19	SIGSTOP	该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

KILL, STOP 信号不可被阻塞、忽略、捕获。
Term 表示终止进程。Core 表示终止进程并 dump core。Stop 挂起线程,Cont 恢复挂起的线程。

常见信号的常见用途
SIGHUP

本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一会话内的各个作业, 这时它们与控制终端不再关联。

登录Linux时,系统会分配给登录用户一个终端会话(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个会话。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。

这个信号的默认操作为终止进程,因此退出登录之后,前后台进程和后台有终端输出的进程就会中止。

不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也能继续下载。

此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。

比如,向 nginx 进程发送 HUP 信号就可以刷新配置。

SIGINT:
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。

SIGQUIT:
和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。

SIGTERM:

程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,允许进程做一些必要的清理工作后退出。

shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。

SIGTERM 让进程体面的结束,如果进程自己不体面,就用 SIGKILL 帮它体面。

SIGCONT:让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符…

SIGSTOP:停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
常用信号快捷键
ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。

ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。

ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。

ctrl-\ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件。
install命令
 install 功能相当于cp,chmod,chown,chgrp ,mkdir 等相关工具的集合
 install命令格式:
 install [OPTION]... [-T] SOURCE DEST 单文件
 install [OPTION]... SOURCE... DIRECTORY
 install [OPTION]... -t DIRECTORY SOURCE...
 install [OPTION]... -d DIRECTORY... #创建空目录
 选项:
 -m MODE,默认755
 -o OWNER
 -g GROUP
 -d DIRNAME 目录

范例:

[root@rocky-8 test]# touch test.txt
[root@rocky-8 test]# ll
总用量 0
-rw-r--r-- 1 root root 0 1017 15:18 test.txt
[root@rocky-8 test]# 
[root@rocky-8 test]# install -m 600 -o lixuan -g lixuan test.txt test1.txt 
[root@rocky-8 test]# ll
总用量 0
-rw------- 1 lixuan lixuan 0 1017 15:21 test1.txt
-rw-r--r-- 1 root   root   0 1017 15:18 test.txt
[root@rocky-8 test]# 
[root@rocky-8 test]# install -d -o lixuan testdir
[root@rocky-8 test]# ll
总用量 0
-rw------- 1 lixuan lixuan 0 1017 15:21 test1.txt
drwxr-xr-x 2 lixuan root   6 1017 15:24 testdir
-rw-r--r-- 1 root   root   0 1017 15:18 test.txt
[root@rocky-8 test]# install -d -m 600 -o lixuan testdir
[root@rocky-8 test]# ll
总用量 0
-rw------- 1 lixuan lixuan 0 1017 15:21 test1.txt
drw------- 2 lixuan root   6 1017 15:24 testdir
-rw-r--r-- 1 root   root   0 1017 15:18 test.txt
[root@rocky-8 test]# 
注: 没有文件夹会新建
mktemp命令

mktemp 命令用于创建并显示临时文件,可避免冲突

格式:
mktemp [OPTION]... [TEMPLATE]
说明:TEMPLATE: filenameXXX,X至少要出现三个

常用选项:
-d #创建临时目录
-p DIR或--tmpdir=DIR   #指明临时文件所存放目录位置

范例:

[root@rocky-8 test]# mktemp testXXX.txt
testCEW.txt
[root@rocky-8 test]# mktemp testXXXXXX.txt
testkLvgU1.txt
[root@rocky-8 test]# ll
总用量 0
-rw------- 1 root root 0 1017 15:36 testCEW.txt
-rw------- 1 root root 0 1017 15:36 testkLvgU1.txt
[root@rocky-8 test]# mktemp  -d testdirXXX
testdirCrc
[root@rocky-8 test]# ll
总用量 0
-rw------- 1 root root 0 1017 15:36 testCEW.txt
drwx------ 2 root root 6 1017 15:36 testdirCrc
-rw------- 1 root root 0 1017 15:36 testkLvgU1.txt
[root@rocky-8 test]# mktemp  -d -p testdirCrc 111XXXX
testdirCrc/111tV83
[root@rocky-8 test]# cd testdirCrc/
[root@rocky-8 testdirCrc]# ll
总用量 0
drwx------ 2 root root 6 1017 15:37 111tV83
[root@rocky-8 testdirCrc]# 

expect
 expect 是由Don Libes基于 Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式
操作的场景,借助 expect 处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本
上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人
员的工作效率

mkpasswd
mkpasswd [选项] [用户]
选项:
-c	定义在密码中小写字母字符的最小数目,默认值是2
-C	定义在密码中大写字母字符的最小数目,默认值是2
-s	定义在密码中特殊字符的最小数目,默认值是1
-p	指定程序来设置密码。默认情况下,如果存在使用/etc/yppasswd,否则使用/bin/passwd
-d	定义密码的最小数目,默认值是2
-l	定义口令的长度,默认值为9
-v	导致密码设置互动可见
    范例:
[root@rocky-8 test]# mkpasswd -l 10 
7yuiBIn@l9
[root@rocky-8 test]# mkpasswd -l 10 -c 3 -C 2 
H7db6el@kI
[root@rocky-8 test]# mkpasswd -l 10 -c 3 -C 2 -s 0
vHJau36zde
为用户更改随机密码:
 [root@rocky-8 ~]# echo mkpasswd -l 10 | passwd --stdin xiaoming
进程优先级命令:nice, renice,
  Linux是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。哪些进程先运行,哪些进程 后 运行,就由进程优先级来控制

   思考:什么时候需要用到进程的优先级呢?

   答:当CPU负载过高时,如CPU的使用率>=90%以上。这个时候进程的优先级就会起作用。

进程优先级调整
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先性)


nice命令
以指定的优先级来启动进程
nice [OPTION] [COMMAND [ARG]...]
-n, --adjustment=N   add integer N to the niceness (default 10)

范例:
[root@rocky-8 test]# nice -n 12 ping 192.168.44.8 
PING 192.168.44.8 (192.168.44.8) 56(84) bytes of data.
64 bytes from 192.168.44.8: icmp_seq=1 ttl=64 time=0.443 
-------------------------------------------------------
[root@rocky-8 ~]# ps axo pid,comm,ni |grep ping
   2558 ping             12

renice命令
可以调整正在执行中的进程的优先级
renice [-n] priority pid...

范例:
[root@rocky-8 ~]# ps axo pid,comm,ni |grep ping
   2558 ping             12
[root@rocky-8 ~]# ^C
[root@rocky-8 ~]# renice -10 2558
2558 (process ID) 旧优先级为 12,新优先级为 -10
[root@rocky-8 ~]# ps axo pid,comm,ni |grep ping
   2558 ping            -10
[root@rocky-8 ~]# 
[root@rocky-8 ~]# 

进程信息 ps

ps 即 process state,可以进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关
信息均保存在/proc/PID目录下的各文件中

  ps格式
  ps [OPTION]...
  
  支持三种选项:
  UNIX选项 如: -A -e
  GNU选项 如: --help
  BSD选项 如: a
  
  常用选项:
  a 选项包括所有终端中的进程
  x 选项包括不链接终端的进程
  u 选项显示进程所有者的信息
  f 选项显示进程树,相当于 --forest
  k|--sort 属性 对属性排序,属性前加 - 表示倒序
  o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
  L 显示支持的属性列表
 -C cmdlist 指定命令,多个命令用,分隔
 -L 显示线程
 -e 显示所有进程,相当于-A
 -f 显示完整格式程序信息
 -F 显示更完整格式的进程信息
 -H 以进程层级格式显示进程相关信息
 -u userlist 指定有效的用户ID或名称
 -U userlist 指定真正的用户ID或名称
 -g gid或groupname 指定有效的gid或组名称
 -G gid或groupname 指定真正的gid或组名称
 -p pid 显示指pid的进程
 --ppid pid 显示属于pid的子进程
 -t ttylist 指定tty,相当于 t
 -M 显示SELinux信息,相当于Z
 
 ps 输出属性
 C :  ps -ef 显示列 C 表示cpu利用率
 VSZ: Virtual memory SiZe,虚拟内存集,线性内存
 RSS: ReSident Size, 常驻内存集
 STAT:进程状态
 R:running
 S: interruptable sleeping
 D: uninterruptable sleeping
 T: stopped
 Z: zombie
 +: 前台进程
 l: 多线程进程
 L:内存分页并带锁
 N:低优先级进程
 <: 高优先级进程
 s: session leader,会话(子进程)发起者
 I:Idle kernel thread,CentOS 8 新特性
 ni: nice值
 pri: priority 优先级
 rtprio: 实时优先级
 psr: processor CPU编号
  
  aux
  -ef
  -eFH
  -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
  axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

范例:查看进程详细信息


 # 列 C 表示 CPU利用率
[root@centos8 ~]#ps -ef
 UID         PID   PPID C STIME TTY         TIME CMD
root          1      0  0 13:55 ?        00:00:02 /usr/lib/systemd/systemd --
switched-root --system --deserial
root          2      0  0 13:55 ?        00:00:00 [kthreadd]
root          3      2  0 13:55 ?        00:00:00 [rcu_gp]
root          4      2  0 13:55 ?        00:00:00 [rcu_par_gp]
[root@centos8 ~]#ps aux
USER       PID %CPU %MEM   VSZ   RSS TTY     STAT START   TIME COMMAND
root          1  0.0  0.6 176432  5596 ?       Ss   13:55   0:02 
/usr/lib/systemd/systemd --switched-root --s
root          2  0.0  0.0      0     0 ?       S    13:55   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?       I<   13:55   0:00 [rcu_gp]
root          4  0.0  0.0      0     0 ?       I<   13:55   0:00 [rcu_par_gp]
#查看进程的父子关系
[root@centos8 ~]#ps auxf
USER       PID %CPU %MEM   VSZ   RSS TTY     STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?       S    13:55   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?       I<   13:55   0:00 \_ [rcu_gp]
root          4  0.0  0.0      0     0 ?       I<   13:55   0:00 \_ 
[rcu_par_gp]
root          6  0.0  0.0      0     0 ?       I<   13:55   0:00 \_ 
[kworker/0:0H-kblockd]
root          7  0.0  0.0      0     0 ?       I    13:55   0:00 \_ 
[kworker/u256:0-events_unbound]
root          8  0.0  0.0      0     0 ?       I<   13:55   0:00 \_ 
[mm_percpu_wq]
root          9  0.0  0.0      0     0 ?       S    13:55   0:00 \_ 
[ksoftirqd/0]
root         10  0.0  0.0      0     0 ?       I    13:55   0:00 \_ 
[rcu_sched]
root         11  0.0  0.0      0     0 ?       S    13:55   0:00 \_ 
[migration/0]
#查看进程的特定属性
[root@centos8 ~]#ps axo pid,cmd,%mem,%cpu
   PID CMD                         %MEM %CPU
     1 /usr/lib/systemd/systemd --  1.2  0.0
     2 [kthreadd]                   0.0  0.0
     3 [rcu_gp]                     0.0  0.0
     4 [rcu_par_gp]                 0.0  0.0
     6 [kworker/0:0H-kblockd]       0.0  0.0
     7 [kworker/u256:0-events_unbo  0.0  0.0
     8 [mm_percpu_wq]               0.0  0.0
     9 [ksoftirqd/0]                0.0  0.0
#按CPU利用率倒序排序
[root@centos8 ~]#ps aux k -%cpu
USER         PID %CPU %MEM   VSZ   RSS TTY     STAT START   TIME COMMAND
root        3795 99.2  0.0   7324   944 pts/2   R+   16:50   2:49 dd 
if=/dev/zero of=/dev/null
root           1  0.0  1.1 184860 10740 ?       Ss   08:46   0:01 
/usr/lib/systemd/systemd --switched-root --system --deserialize 18
root           2  0.0  0.0      0     0 ?       S    08:46   0:00 [kthreadd]
[root@centos8 ~]#ps axo pid,cmd,%cpu,%mem k -%cpu 
   PID CMD                         %CPU %MEM
  1907 dd if=/dev/zero of=/dev/nul 94.5  0.0
  1914 ping 127.0.1 -f             66.0  0.2
  1915 [kworker/u256:2-events_unbo  0.7  0.0
     1 /usr/lib/systemd/systemd --  0.0  1.2
     2 [kthreadd]                   0.0  0.0
     3 [rcu_gp]                     0.0  0.0
     4 [rcu_par_gp]                 0.0  0.0
#按内存倒序排序
[root@centos8 ~]#ps axo pid,cmd,%cpu,%mem --sort  
%mem
   PID CMD                         %CPU %MEM
   772 /usr/libexec/sssd/sssd_nss   0.0  4.5
   733 /usr/libexec/platform-pytho  0.0  4.0
   670 /usr/lib/polkit-1/polkitd -  0.0  2.9
   665 /usr/sbin/NetworkManager --  0.0  2.1
   668 /usr/bin/vmtoolsd            0.0  1.8
   753 /usr/libexec/sssd/sssd_be -  0.0  1.7
   663 /usr/sbin/sssd -i --logger=  0.0  1.6
   667 /usr/bin/VGAuthService -s    0.0  1.5
     1 /usr/lib/systemd/systemd --  0.0  1.2
范例:有效用户和实际用户
[wang@centos8 ~]$passwd
Changing password for user wang.
Current password: 
[root@centos8 ~]#ps axo pid,cmd,%cpu,%mem,user,euser,ruser | grep passwd
  1965 passwd                       0.0  1.0 root     root     wang
  1970 grep --color=auto passwd     0.0  0.1 root     root     root

范例:

#查询你拥有的所有进程
ps -x
#显示指定用户名(RUID)或用户ID的进程
ps -fU apache
ps -fU 48
#显示指定用户名(EUID)或用户ID的进程
ps -fu wang
ps -fu 1000
#查看以root用户权限(实际和有效ID)运行的每个进程
ps -U root -u root
#列出某个组拥有的所有进程(实际组ID:RGID或名称)
ps -fG nginx
#列出有效组名称(或会话)所拥有的所有进程
ps -fg mysql
ps -fg 27
#显示指定的进程ID对应的进程
ps -fp 1234
#以父进程ID来显示其下所有的进程,如显示父进程为1234的所有进程
ps -f --ppid 1234
#显示指定PID的多个进程
ps -fp 1204,1239,1263
#要按tty显示所属进程
ps -ft pts/0
#以进程树显示系统中的进程如何相互链接
ps -e --forest
#以进程树显示指定的进程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd
#要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列
ps -fL -C nginx
#要列出所有格式说明符
ps L
#查看进程的PID,PPID,用户名和命令
ps -eo pid,ppid,user,cmd
#自定义格式显示文件系统组,ni值开始时间和进程的时间
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
#使用其PID查找进程名称:
ps -p 1244 -o comm=
#要以其名称选择特定进程,显示其所有子进程
ps -C sshd,bash
#查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时这个参数很有用
ps -C httpd,sshd -o pid=
#检查一个进程的执行时间
ps -eo comm,etime,user | grep nginx
#排序,查找占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
#显示安全信息
ps -eM
ps --context
#使用以下命令以用户定义的格式显示安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label
#使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命令显示每秒钟的监视
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
找到未知进程的执行程序文件路径
[root@centos8 ~]#ls -l /proc/1272/exe
lrwxrwxrwx 1 root root 0 Jan  4 15:47 /proc/1272/exe -> /usr/bin/bash
进程树 pstree

pstree 可以用来显示进程的父子关系,以树形结构显示

格式:
pstree   [OPTION] [ PID | USER ]
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程

范例:
[root@centos7.9 ~]# pstree -p
systemd(1)─┬─NetworkManager(541)─┬─{NetworkManager}(561)
           │                     └─{NetworkManager}(563)
           ├─VGAuthService(528)
           ├─agetty(1247)
           ├─auditd(503)───{auditd}(504)
           ├─crond(545)
           ├─dbus-daemon(532)
           ├─polkitd(530)─┬─{polkitd}(544)
[root@centos7.9 ~]# pstree -u root
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─agetty
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon(dbus)
        ├─polkitd(polkitd)───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash───pstree
        │      └─sshd───bash───ping
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───2*[{vmtoolsd}]
[root@centos7.9 ~]# pstree -pu root
systemd(1)─┬─NetworkManager(541)─┬─{NetworkManager}(561)
           │                     └─{NetworkManager}(563)
           ├─VGAuthService(528)
           ├─agetty(1247)
           ├─auditd(503)───{auditd}(504)
查看进程信息prtstat(单独进程)

可以显示进程信息,来自于psmisc包

格式:
prtstat [options] PID ...
范例:
[root@centos7.9 ~]# prtstat -r 5061
         pid: 5061           	                  comm: ping
       state: S              	                  ppid: 5042
        pgrp: 5061           	               session: 5042
      tty_nr: 34816          	                 tpgid: 5061
       flags: 402100         	                minflt: 453
     cminflt: 0              	                majflt: 0
     cmajflt: 0              	                 utime: 3
       stime: 4              	                cutime: 0
      cstime: 0              	              priority: 20
        nice: 0              	           num_threads: 1
 itrealvalue: 0              	             starttime: 6644539
       vsize: 131637248      	                   rss: 319
      rsslim: 18446744073709551615	             startcode: 94514027065344
     endcode: 94514027121276 	            startstack: 140729737064224
     kstkesp: 7FFE31FC9748   	               kstkeip: 7F5E1655D8C0
       wchan: 18446744072229245712	                 nswap: 0
      cnswap: 18446744072229245712	           exit_signal: 17
   processor: 0              	           rt_priority: 0
      policy: 0              	 delayaccr_blkio_ticks: 0
  guest_time: 0              	           cguest_time: 0
[root@centos7.9 ~]# prtstat  5061
Process: ping          		State: S (sleeping)
  CPU#:  0  		TTY: 136:0	Threads: 1
Process, Group and Session IDs
  Process ID: 5061		  Parent ID: 5042
    Group ID: 5061		 Session ID: 5042
  T Group ID: 5061

Page Faults
  This Process    (minor major):      453         0
  Child Processes (minor major):        0         0
CPU Times
  This Process    (user system guest blkio):   0.03   0.04   0.00   0.00
  Child processes (user system guest):         0.00   0.00   0.00
Memory
  Vsize:       131 MB    
  RSS:         1306 kB    		 RSS Limit: 18446744073709 MB
  Code Start:  0x55f5c3027000		 Code Stop:  0x55f5c3034a7c
  Stack Start: 0x7ffe31fcaf20
  Stack Pointer (ESP): 0x7ffe31fc9748	 Inst Pointer (EIP): 0x7f5e1655d8c0
Scheduling
  Policy: normal
  Nice:   0 		 RT Priority: 0 (non RT)
[root@centos7.9 ~]# 

pgrep按预定义的模式
  命令格式

 pgrep [options] pattern
常用选项
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程

范例:

[root@centos8 ~]#pgrep -u wang
2303
2330
[root@centos8 ~]#pgrep -lu wang
2303 bash
2330 dd

pidof

格式:
pidof [options] [program […]]

-x 按脚本名称查找pid

[root@centos8 ~]#pidof bash
19035 18813 18789 1251
[root@centos7 ~]#cat ping.sh
#!/bin/bash
ping 127.0.0.1
#centos8 执行命令可以可以查看到pid
[root@centos7 ~]#pidof ping.sh
#ping.sh必须有shebang机制,否则pidof -x 也无法查找到
[root@centos7 ~]#pidof -x ping.sh 
19035
负载查询 uptime
/proc/uptime 包括两个值,单位 s
系统启动时长

空闲进程的总时长(按总的CPU核数计算)

uptime 和 w 显示以下内容

当前时间

系统已启动的时间

当前上线人数

系统平均负载(1、5、15分钟的平均负载,一般不会超过1,超过5时建议警报)

系统平均负载: 指在特定时间间隔内运行队列中的平均进程数,通常每个CPU内核的当前活动进程数不大

于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题

如:linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用

范例:
[root@centos7.9 ~]# uptime
 23:34:59 up 19:04,  2 users,  load average: 0.01, 0.02, 0.05
[root@centos7.9 ~]# w
 23:35:01 up 19:04,  2 users,  load average: 0.01, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.44.1     22:57   16:45   0.00s  0.00s -bash
root     pts/1    192.168.44.1     22:11    5.00s  0.17s  0.00s w
[root@centos7.9 ~]# 

显示CPU相关统计 mpstat

当mpstat不带参数时,输出为从系统启动以来的平均值。

root@centos7.9 ~]# mpstat 
Linux 3.10.0-1160.el7.x86_64 (centos7.9) 	10/18/2023 	_x86_64_	(1 CPU)
                    
12:13:59 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:13:59 AM  all    0.15    0.00    0.09    0.00    0.00    0.00    0.00    0.00    0.00   99.75
##每2秒采集一次采集3次
[root@centos7.9 ~]# mpstat  2 3
Linux 3.10.0-1160.el7.x86_64 (centos7.9) 	10/18/2023 	_x86_64_	(1 CPU)

12:16:00 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:16:02 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
12:16:04 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
12:16:06 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:     all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
[root@centos7.9 ~]# 
查看进程实时状态 top 和 htop

top 提供动态的实时进程状态

 排序:
 P:以占据的CPU百分比,%CPU
 M:占据内存百分比,%MEM
 T:累积占据CPU时长,TIME+
 
  首部信息显示:
  
  uptime信息:l命令
  tasks及cpu信息:t命令
  cpu分别显示:1 (数字)
  memory信息:m命令
  退出命令:q
  修改刷新时间间隔:s
  终止指定进程:k
  保存文件:W

在这里插入图片描述

top命令栏位信息简介

us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间

top选项:
-d # 指定刷新时间间隔,默认为3秒
-b 全部显示所有进程
-n # 刷新多少次后退出
-H   线程模式

在这里插入图片描述
显示某个进程或者线程的资源利用

top -H -p 5337
在这里插入图片描述

htop 命令是增强版的TOP命令,来自EPEL源,比top功能更强

在这里插入图片描述

内存空间 free,

在这里插入图片描述

格式:
free [OPTION]
常用选项:
-b 以字节为单位
-m 以MB为单位
-g 以GB为单位
-h 易读格式
-o 不显示-/+buffers/cache行
-t   显示RAM + swap的总和
-s n 刷新间隔为n秒
-c n 刷新n次后即退出
向/proc/sys/vm/drop_caches中写入相应的修改值,会清理缓存。建议先执行sync(sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)。执行echo 1、2、3 至 /proc/sys/vm/drop_caches, 达到不同的清理目的如果因为是应用有像内存泄露、溢出的问题时,从swap的使用情况是可以比较快速可以判断的,但通过执行free 反而比较难查看。但核心并不会因为内存泄露等问题并没有快速清空buffer或cache(默认值是0),生产也不应该随便去改变此值。
一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的。当发生内存不足、应用获取
不到可用内存、OOM错误等问题时,还是更应该去分析应用方面的原因,否则,清空buffer,强制腾出
free的大小,可能只是把问题给暂时屏蔽了。
排除内存不足的情况外,除非是在软件开发阶段,需要临时清掉buffer,以判断应用的内存使用情况;
或应用已经不再提供支持,即使应用对内存的时候确实有问题,而且无法避免的情况下,才考虑定时清
空buffer。
root@centos7.9 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        152M        934M        9.5M        732M        1.5G
Swap:          2.0G          0B        2.0G
[root@centos7.9 ~]# sync
[root@centos7.9 ~]# echo 1 > /proc/sys/vm/drop_caches
[root@centos7.9 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        152M        1.5G        9.5M         79M        1.5G
Swap:          2.0G          0B        2.0G
[root@centos7.9 ~]# cat /proc/sys/vm/drop_caches
1
[root@centos7.9 ~]
进程对应的内存映射 pmap

用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。

格式:
pmap [options] pid [...]
常用选项:
-x: 显示详细格式的信息

另外一种实现
cat /proc/PID/maps
[root@centos7.9 ~]# pmap -x 5871
5871:   ping 127.1.1.1
Address           Kbytes     RSS   Dirty Mode  Mapping
000055cb31524000      56      44       0 r-x-- ping
000055cb31732000       4       4       4 r---- ping
000055cb31733000       4       4       4 rw--- ping
000055cb31734000     140      16      16 rw---   [ anon ]
000055cb33443000     132       8       8 rw---   [ anon ]
00007f7056bdb000  103688      40       0 r---- locale-archive
00007f705d11d000      84      12       0 r-x-- libz.so.1.2.7
00007f705d132000    2044       0       0 ----- libz.so.1.2.7
00007f705d331000       4       4       4 r---- libz.so.1.2.7
00007f705d332000       4       4       4 rw--- libz.so.1.2.7
00007f705d333000       8       8       0 r-x-- libdl-2.17.so
00007f705d335000    2048       0       0 ----- libdl-2.17.so
00007f705d535000       4       4       4 r---- libdl-2.17.so
00007f705d536000       4       4       4 rw--- libdl-2.17.so
00007f705d537000      16       8       0 r-x-- libattr.so.1.1.0
00007f705d53b000    2044       0       0 ----- libattr.so.1.1.0
00007f705d73a000       4       4       4 r---- libattr.so.1.1.0
00007f705d73b000       4       4       4 rw--- libattr.so.1.1.0
00007f705d73c000    1808     488       0 r-x-- libc-2.17.so
00007f705d900000    2044       0       0 ----- libc-2.17.so
00007f705daff000      16      16      16 r---- libc-2.17.so
00007f705db03000       8       8       8 rw--- libc-2.17.so
00007f705db05000      20      12      12 rw---   [ anon ]
00007f705db0a000    1028      64       0 r-x-- libm-2.17.so
00007f705dc0b000    2044       0       0 ----- libm-2.17.so
00007f705de0a000       4       4       4 r---- libm-2.17.so
00007f705de0b000       4       4       4 rw--- libm-2.17.so
00007f705de0c000      88      16       0 r-x-- libresolv-2.17.so
00007f705de22000    2048       0       0 ----- libresolv-2.17.so
00007ffea075d000     132      20      20 rw---   [ stack ]
00007ffea07a6000       8       4       0 r-x--   [ anon ]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- ------- 
total kB          128556    1480     356
[root@centos7.9 ~]# 

虚拟内存信息 vmstat,
格式:
vmstat [options] [delay [count]] 

显示项说明:
procs:
 r:可运行(正运行或等待运行)进程的个数,和核心数有关
 b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory:
 swpd: 交换内存的使用总量
 free:空闲物理内存总量
 buffer:用于buffer的内存总量
 cache:用于cache的内存总量
 swap:
 si:从磁盘交换进内存的数据速率(kb/s)
 so:从内存交换至磁盘的数据速率(kb/s)
io:
 bi:从块设备读入数据到系统的速率(kb/s)
 bo: 保存数据至块设备的速率
system:
 in: interrupts 中断速率,包括时钟
 cs: context switch     进程切换速率
cpu:
 us:Time spent running non-kernel code
 sy: Time spent running kernel code
 id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
 wa: Time spent waiting for IO.  2.5.41前,包括in idle.
 st: Time stolen from a virtual machine.  2.6.11前, unknown.
统计CPU和设备IO信息 iostat,
 iostat 可以提供更丰富的IO性能状态数据
 此工具由sysstat包提供
 
 常用选项:
   -c 只显示CPU行
   -d 显示设备〈磁盘)使用状态
   -k 以千字节为为单位显示输出
   -t 在输出中包括时间戳
   -x 在输出中包括扩展的磁盘指标
[root@centos7.9 ~]# mpstat
Linux 3.10.0-1160.el7.x86_64 (centos7.9) 	10/18/2023 	_x86_64_	(1 CPU)

09:55:19 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:55:19 AM  all    0.15    0.00    0.10    0.00    0.00    0.00    0.00    0.00    0.00   99.75
####  一秒一次生产3次
[root@centos7.9 ~]# iostat 1 3
Linux 3.10.0-1160.el7.x86_64 (centos7.9) 	10/18/2023 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.15    0.00    0.10    0.00    0.00   99.75

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.30         3.80         8.32     293858     644413
scd0              0.00         0.01         0.00       1028          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.99    0.00    0.00   99.01

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0


iotop,
  • otop命令是一个用来监视磁盘I/O使用状况的top类工具iotop具有与top相似的UI,其中包括PID、用
    户、I/O、进程等相关信息,可查看每个进程是如何使用IO
iotop常用参数

-o, --only只显示正在产生I/O的进程或线程,除了传参,可以在运行过程中按o生效
-b, --batch非交互模式,一般用来记录日志
-n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用
-d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1
-p PID, --pid=PID指定监测的进程/线程
-u USER, --user=USER指定监测某个用户产生的I/O
-P, --processes仅显示进程,默认iotop显示所有线程
-a, --accumulated显示累积的I/O,而不是带宽
-k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用
-t, --time 加上时间戳,非交互非模式
-q, --quiet 禁止头几行,非交互模式,有三种指定方式
-q 只在第一次监测时显示列名
-qq 永远不显示列名
-qqq 永远不显示I/O汇总

iotop输出
第一行:Read和Write速率总计
第二行:实际的Read和Write速率
第三行:参数如下:
线程ID(按p切换为进程ID)
优先级
用户
磁盘读速率
磁盘写速率
swap交换百分比
IO等待所占的百分比
Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
   PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                    
     1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 22
     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
     4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
     6 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
     7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
     8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
     9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
    10 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [lru-add-drain]
    11 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
  1548 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u256:1]
    13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kdevtm


显示网络带宽使用情况 iftop
[root@centos8 ~]#iftop -ni eth0

在这里插入图片描述

nload, 实时监控网络流量和带宽使用情况
nload 是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况,通过EPEL源安装

上下方向键、左右方向键、enter键或者tab键都就可以切换查看多个网卡的流量情况
按 F2 显示选项窗口
按 q 或者 Ctrl+C 退出 nload


#默认只查看第一个网络的流量进出情况
nload
#在nload后面指定网卡,可以指定多个,按左右键分别显示网卡状态
nload eth0 eth1
#设置刷新间隔:默认刷新间隔是100毫秒,可通过 -t 命令设置刷新时间(单位是毫秒)
nload -t 500 eth0
#设置单位:显示两种单位一种是显示Bit/s、一种是显示Byte/s,默认是以Bit/s,也可不显示/s
#-u h|b|k|m|g|H|B|K|M|G 表示的含义: h: auto, b: Bit/s, k: kBit/s, m: MBit/s, H: 
auto, B: Byte/s, K: kByte/s, M: MByte/s
nload -u M eth0

界面操作
在这里插入图片描述

查看进程网络带宽的使用情况 nethogs

NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。
在这里插入图片描述

网络监视工具iptraf-ng

来自于iptraf-ng包,可以进网络进行监控,对终端窗口大小有要求
在这里插入图片描述

系统资源统计 dstat

dstat由pcp-system-tools包提供,但安装dstat包即可, 可用于代替 vmstat,iostat功能
格式:dstat [-afv] [options…] [delay [count]]

常用选项:

-c 显示cpu相关信息
-C #,#,...,total
-d 显示disk相关信息
-D total,sda,sdb,...
-g 显示page相关统计数据
-m 显示memory相关统计数据
-n 显示network相关统计数据
-p 显示process相关统计数据
-r 显示io请求相关的统计数据
-s 显示swapped相关的统计数据
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程
--top-io: 显示最占用io的进程
--top-mem: 显示最占用内存的进程
--top-latency: 显示延迟最大的进程
[root@centos7.9 ~]# dstat 
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0 100   0   0   0|5171B 8396B|   0     0 |   0     0 |  45    78 
  0   0 100   0   0   0|   0    12k| 218B 1422B|   0     0 |  67   110 
  0   0 100   0   0   0|   0     0 | 218B  688B|   0     0 |  52    84 
  0   0 100   0   0   0|   0     0 | 218B  680B|   0     0 |  69   111 
  0   0 100   0   0   0|   0     0 | 218B  680B|   0     0 |  51    84 
  0   1  99   0   0   0|   0     0 | 218B  680B|   0     0 |  56    92 
  0   0 100   0   0   0|   0     0 | 218B  680B|   0     0 |  56    89 
  0   0 100   0   0   0|   0     0 | 278B  740B|   0     0 |  57    94 
  0   0 100   0   0   0|   0     0 | 308B  740B|   0     0 |  54    86 
  0   0 100   0   0   0|   0     0 | 218B  680B|   0     0 |  60   101 
  0   0 100   0   0   0|   0     0 | 218B  680B|   0     0 |  
综合监控工具 glances
格式:
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P 
password] [--password] [-t refresh] [-f file] [-o output]

内建命令:
a Sort processes automatically     l Show/hide logs
c Sort processes by CPU%           b Bytes or bits for network I/O
m Sort processes by MEM%         w Delete warning logs
p Sort processes by name           x Delete warning and critical logs
i Sort processes by I/O rate       1 Global CPU or per-CPU stats
d Show/hide disk I/O stats         h Show/hide this help screen
f Show/hide file system stats     t View network I/O as combination
n Show/hide network stats         u View cumulative network I/O
s Show/hide sensors stats         q Quit (Esc and Ctrl-C also work)
y Show/hide hddtemp stats

常用选项:
-b: 以Byte为单位显示网卡数据速率
-d: 关闭磁盘I/O模块
-f /path/to/somefile: 设定输入文件位置
-o {HTML|CSV}:输出格式
-m: 禁用mount模块
-n: 禁用网络模块
-t #: 延迟时间间隔
-1:每个CPU的相关数据单独显示

在这里插入图片描述服务器模式:
glances -s -B IPADDR
IPADDR: 指明监听的本机哪个地址,端口默认为61209/tcp
客户端模式:
glances -c IPADDR
IPADDR:要连入的服务器端地址

CentOS 8 新特性 cockpit

由cockpit包提供,当前Ubuntu和CentOS7也支持此工具
Cockpit 是CentOS 8 取入的新特性,是一个基于 Web 界面的应用,它提供了对系统的图形化管理
监控系统活动(CPU、内存、磁盘 IO 和网络流量)
查看系统日志条目
查看磁盘分区的容量
查看网络活动(发送和接收)
查看用户帐户
检查系统服务的状态
提取已安装应用的信息
查看和安装可用更新(如果以 root 身份登录)并在需要时重新启动系统
打开并使用终端窗口
在这里插入图片描述

kill,

kill:内部命令,可用来向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以
SIG开头(可省略),不区分大小写
显示当前系统可用信号:

[root@centos7.9 ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
常用信号:
1) SIGHUP 无须关闭进程而让其重读配置文件
2) SIGINT 中止正在运行的进程;相当于Ctrl+c
3) SIGQUIT 相当于ctrl+\
9) SIGKILL 强制杀死正在运行的进程,可能会导致数据丢失,慎用!
15) SIGTERM 终止正在运行的进程,默认信号(kill 默认信号)
18) SIGCONT 继续运行
19) SIGSTOP 后台休眠 

指定信号的方法 : 

信号的数字标识:1, 2, 9
信号完整名称:SIGHUP,sighup
信号的简写名称:HUP,hup

按PID:
kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

范例:
kill  -1   pid …
kill  -n 9 pid
kill  -s SIGINT pid
[root@centos8 ~]#kill -int `pidof ping`
[root@centos8 ~]#kill -sigint `pidof ping

范例:利用 0 信号实现进程的健康性检查
[root@centos8 ~]#man kill
If signal is 0, then no actual signal is sent, but error checking is still 
performed.
[root@centos8 ~]#killall -0 ping
[root@centos8 ~]#echo $?
0
[root@centos8 ~]#killall -0 ping
ping: no process found
[root@centos8 ~]#echo $?
1
#此方式有局限性,即使进程处于停止或僵尸状态,此方式仍然认为是进程是健康的
任务相关的命令: at, crontab, 命令,选项,示例。
通过任务计划,可以让系统自动的按时间或周期性任务执行任务

未来的某时间点执行一次任务
at 指定时间点,执行一次性任务
batch 系统自行选择空闲时间去执行此处指定的任务
周期性运行某任务
cron

一次性任务at
at 工具
由包 at 提供
依赖与atd服务,需要启动才能实现at任务
at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
执行任务时PATH变量的值和当前定义任务的用户身份一致
at 命令:
at [option] TIME
常用选项:
-V 显示版本信息
-t time   时间格式 [[CC]YY]MMDDhhmm[.ss] 
-l 列出指定队列中等待运行的作业;相当于atq
-d N 删除指定的N号作业;相当于atrm
-c N 查看具体作业N号任务
-f file 指定的文件中读取任务
-m 当任务被完成之后,将给用户发送邮件,即使没有标准输出

范例:
### 2023年12月30日 17:20执行
[root@centos7.9 ~]# at 17:20  30.12.2023
at> ping -c 10 5.5.5.5        
at> <EOT>
job 5 at Sat Dec 30 17:20:00 2023
Can't open /var/run/atd.pid to signal atd. No atd running?
[root@centos7.9 ~]# at -l
5	Sat Dec 30 17:20:00 2023 a root
[root@centos7.9 ~]# 



周期性任务计划 cron

周期性任务计划cron相关的程序包:
cronie:主程序包,提供crond守护进程及相关辅助工具
crontabs:包含CentOS提供系统维护任务
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如:cronie中的任务在过去该
运行的时间点未能正常运行,则anacron会随后启动一次此任务
cron 依赖于crond服务,确保crond守护处于运行状态:

cron任务分为

系统cron任务:系统维护作业,/etc/crontab 主配置文件, /etc/cron.d/ 子配置文件

用户cron任务:红帽系统保存在 /var/spool/cron/USERNAME,Ubuntu 系统存放

在/var/spool/cron/crontabs/USERNAME,利用 crontab 命令管理

**计划任务日志:/var/log/cron**
格式:

[root@centos7.9 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
  分 日 天 月 周
  

计划任务时间表示法:

(1) 特定值
 给定时间点有效取值范围内的值
(2) *
 给定时间点上有效取值范围内的所有值,表示“每...”,放在星期的位置表示不确定
(3) 离散取值
 #,#,#
(4) 连续取值
 #-#
(5) 在指定时间范围上,定义步长
 /#: #即为步长
crontab命令: 
每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME
默认标准输出和错误会被发邮件给对应的用户,如:wang创建的任务就发送至wang的邮箱root能够修改它用户的作业
用户的cron 中默认 PATH=/usr/bin:/bin,如果使用其它路径,在任务文件的第一行加PATH=/path或
者加入到计划任务执行的脚本中
第六个字段指定要运行的命令。 该行的整个命令部分,直至换行符或“%”字符,指定的shell执行. 
除非使用反斜杠(\)进行转义,否则该命令中的“%”字符将变为换行符,并且第一个%之后的所有
数据将作为标准输入发送到该命令。
crontab命令格式:
crontab [-u user] [-l | -r | -e] [-i]

常用选项:
-l 列出所有任务
-e 编辑任务
-r 移除所有任务
-i 同-r一同使用,以交互式模式移除指定任务
-u user 指定用户管理cron任务,仅root可运行

计划任务范例:

#在6,8,10,12点整共4次分别执行test.sh
[root@centos8 ~]#crontab -l
0 6-12/2 * 11 * /app/bin/test.sh

#以下配置只会在5,7,9,11点整执行
0 5-12/2 * 11 * /app/bin/test.sh

计划任务1:每月1、10、22日的4:45重启httpd服务
45  4   1,10,22   *   *    /usr/bin/systemctl restart httpd

计划任务2:每周六,周日的1:10分重启httpd服务
10  1   *    *  6,0    /usr/bin/systemctl restart httpd

计划任务3:每天18:00指23:00之间每隔30分钟重启httpd服务
*/30   18-23  *  *  *  /usr/bin/systemctl restart httpd

计划任务4:每隔两天的上午8:00到11:00的第15分钟和第45分钟执行重启httpd服务
15,45  8-11  */2  *  *  /usr/bin/systemctl restart httpd

计划任务5:每天凌晨0:00进行mysql数据库备份(备份脚本已写好)
0 0 * *  *  /usr/bin/bash mysql_backup.sh
————————————————
版权声明:本文为CSDN博主「MssGuo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MssGuo/article/details/116353287

2. 总结索引数组和关联数组,字符串处理,高级变量使用及示例。

数组介绍
变量:存储单个元素的内存空间
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
索引的编号从0开始,属于数值索引
索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持
bash的数组支持稀疏格式(索引不连续)

索引数组

#普通数组可以不事先声明,直接使用
declare -a ARRAY_NAME
#关联数组必须先声明,再使用
declare -A ARRAY_NAME
注意:两者不可相互转换
索引数组定义范例:
(1) 一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE
范例:
weekdays[0]="Sunday"
weekdays[4]="Thursday"
(2) 一次赋值全部元素
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
范例:
title=("ceo" "coo" "cto")
num=({0..10})
alpha=({a..g})
file=( *.sh )
(3) 只赋值特定元素
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
(4) 交互式数组值对赋值
read -a ARRAY

显示所有数组:
declare -a

引用数组
引用特定的数组元素
${ARRAY_NAME[INDEX]}
#如果省略[INDEX]表示引用下标为0的元素
范例:
[root@centos8 ~]#declare -a title=([0]="ceo" [1]="coo" [2]="cto")
[root@centos8 ~]#echo ${title[1]}
coo
[root@centos8 ~]#echo ${title}
ceo
[root@centos8 ~]#echo ${title[2]}
cto
[root@centos8 ~]#echo ${title[3]}
引用数组所有元素:
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}

数组的长度,即数组中元素的个数(下标的个数)
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}

数组的所有下标
${!ARRAY_NAME[*]}
${!ARRAY_NAME[@]}

删除数组中的某元素,会导致稀疏格式
unset ARRAY[INDEX]
删除整个数组
unset ARRAY

关联数组

declare -A ARRAY_NAME 
ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)
注意:关联数组必须先声明再调用
[root@centos8 ~]#declare -A name
[root@centos8 ~]#name[ceo]=mage
[root@centos8 ~]#name[cto]=wang
[root@centos8 ~]#name[coo]=zhang
[root@centos8 ~]#echo ${name[coo]}
zhang
[root@centos8 ~]#echo ${name[ceo]}
mage
[root@centos8 ~]#echo ${name[cto]}
wang

范例: 显示关联数组的所有下标
[root@centos8 ~]#declare -A title=([ceo]=mage [coo]=zhang [cto]=wang)
[root@centos8 ~]#echo ${!title[@]}
ceo cto coo
字符串处理
基于偏移量取字符串

#返回字符串变量var的字符的长度,一个汉字算一个字符
${#var} 
#返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,
offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)
${var:offset} 
#返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
${var:offset:number}
#取字符串的最右侧几个字符,取字符串的最右侧几个字符, 注意:冒号后必须有一空白字符
${var: -length}
#从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容,即:掐头去尾
${var:offset:-length}
#先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容,注意:-
length前空格,并且length必须大于offset
${var: -length:-offset}

基于模式取子串

#其中word可以是指定的任意字符,自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字
符串开头至第一次出现word字符串(含)之间的所有字符,即懒惰模式,以第一个word为界删左留右
${var#*word}
#从var变量的值中删除以word开头的部分
${var#word}
#同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容,即贪婪模式,以最后一个word为界删左留右
${var##*word}
${var##word}
范例:
[root@centos7.9 ~]# url="https://editor.csdn.net/md?articleId=133870678"
[root@centos7.9 ~]# echo ${var#*/} ##找到第一个/取右边的数据

[root@centos7.9 ~]# echo ${url#*/}
/editor.csdn.net/md?articleId=133870678
[root@centos7.9 ~]# echo ${url##*/} ##贪婪模式
md?articleId=133870678

%从右往左
#其中word可以是指定的任意字符,功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 
删除字符串最后一个字符向左至第一次出现word字符串(含)之间的所有字符,即懒惰模式,以从右向左的第
一个word为界删右留左
${var%word*}
${var%word}
#同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符,即贪婪模式,以从右向
左的最后一个word为界删右留左
${var%%word*}
${var%%word}
范例:
[root@centos7.9 ~]# echo ${url%/*}
https://editor.csdn.net
[root@centos7.9 ~]# echo ${url%%/*}##贪婪模式
https:

查找替换
#查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
${var/pattern/substr}
#查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
${var//pattern/substr}
#查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}
#查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}
查找并删除
#删除var表示的字符串中第一次被pattern匹配到的字符串
${var/pattern}
#删除var表示的字符串中所有被pattern匹配到的字符串
${var//pattern}
#删除var表示的字符串中所有以pattern为行首匹配到的字符串
${var/#pattern}
#删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
${var/%pattern}
字符大小写转换
#把var中的所有小写字母转换为大写
${var^^}
#把var中的所有大写字母转换为小写
${var,,}
高级变量使用
高级变量赋值

在这里插入图片描述高级变量用法-有类型变量

Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令用于指定     变量的类型,两个命令是等价的
declare [选项] 变量名
选项:
-r 声明或显示只读变量
-i 将变量定义为整型数
-a 将变量定义为数组
-A 将变量定义为关联数组
-f 显示已定义的所有函数名及其内容
-F 仅显示已定义的所有函数名
-x 声明或显示环境变量和函数,相当于export 
-l 声明变量为小写字母 declare -l var=UPPER
-u 声明变量为大写字母 declare -u var=lower
-n  make NAME a reference to the variable named by its value

3. 求10个随机数的最大值与最小值。

#!/bin/bash
#定义索引数组为数字
declare -i min max
#定义索引数组名字为nums
declare -a nums
#循环10次
for ((i=0;i<10;i++));do
#将循环的10次数字分别复制为nums[0]=随机数-----nums[9]=随机数
nums[$i]=$RANDOM
#判断nums[0]=0,那么最大最小都是0,然后中断本次循环,其他次数不为0 不影响
[ $i -eq 0 ] && min=${nums[0]} && max=${nums[0]} && continue
[ ${nums[$i]} -gt $max ] && max=${nums[$i]} && continue
[ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
#打印索引数组的全部下标的值
echo "ALL numbers are ${nums[*]}"
echo Max is $max
echo Min is $min

[root@rocky-8 jiaoben]# bash   max_min.sh 
ALL numbers are 18191 25865 15151 10453 27493 14031 1263 1046 29233 2148
Max is 29233
Min is 1046

4. 使用递归调用,完成阶乘算法实现。

5. 解析进程和线程的区别?

什么是进程:
Process: 运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
进程创建:
init:第一个进程,从 CentOS7 以后为systemd 
进程:都由其父进程创建,fork(),父子关系,CoW:Copy On Write

在这里插入图片描述

进程:
进程:
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度
的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。
进程的组成
进程一般由程序、数据集合和进程控制块三部分组成。
程序用于描述进程要完成的功能,是控制进程执行的指令集;
数据集合是程序在执行时所需要的数据和工作区;
程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标
志。
进程具有的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进程一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序、数据和进程控制块三部分组成。
线程
在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单
位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的
一块内存,使得各个进程之间内存地址相互隔离。
后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程
序的要求了。于是就发明了线程。
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一
个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的
线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的
文件)和一个或多个线程组成。
进程与线程的区别
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进
程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
调度和切换:线程上下文切换比进程上下文切换要快得多。

6. 解析进程的结构。

进程信息
1.PCB(process control block)

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。Linux操作系统下的进程控制块是:task_struct
2.task_struct

task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

其内容主要包括:

    标识符: 描述本进程的唯一标示符,用来区别其他进程。
    状态: 任务状态,退出代码,退出信号等。
    优先级: 相对于其他进程的优先级。
    程序计数器: 程序中即将被执行的下一条指令的地址。
    内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
    上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
    I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
    记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

在这里插入图片描述

7. 解析磁盘中的代码如何在计算机上运行的?

8. 总结OOM原理,及处理方法。


 进程使用内存问题
1.3.4.1 内存泄漏:Memory Leak
指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处
于占用状态
1.3.4.2 内存溢出:Memory Overflow
指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出,类似红杏出墙(N50学炳
语录)
1.3.4.3 内存不足:OOM
OOM 即 Out Of Memory,“内存用完了”,在情况在java程序中比较常见。系统会选一个进程将之杀死,
在日志messages中看到类似下面的提示
Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child
当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个
error,因为这个问题已经严重到不足以被应用处理)。
原因:
给应用分配内存太少:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。
应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

使用的解决办法:
1,限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用
2,给系统增加swap空间

设置内核参数(不推荐),不允许内存申请过量:
echo 2 > /proc/sys/vm/overcommit_memory
echo 80 > /proc/sys/vm/overcommit_ratio
echo 2 > /proc/sys/vm/panic_on_oom
说明:
Linux默认是允许memory overcommit的,只要你来申请内存我就给你,寄希望于进程实际上用不到那
么多内存,但万一用到那么多了呢?Linux设计了一个OOM killer机制挑选一个进程出来杀死,以腾出部
分内存,如果还不够就继续。也可通过设置内核参数 vm.panic_on_oom 使得发生OOM时自动重启系
统。这都是有风险的机制,重启有可能造成业务中断,杀死进程也有可能导致业务中断。所以Linux 2.6
之后允许通过内核参数 vm.overcommit_memory 禁止memory overcommit。
vm.overcommit_memory 接受三种取值

0 – Heuristic overcommit handling. 这是缺省值,它允许overcommit,但过于明目张胆的
overcommit会被拒绝,比如malloc一次性申请的内存大小就超过了系统总内存。Heuristic的意思是“试探式的”,内核利用某种算法猜测你的内存申请是否合理,它认为不合理就会拒绝overcommit。

1 – Always overcommit. 允许overcommit,对内存申请来者不拒。内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。

2 – Don’t overcommit. 禁止overcommit。 内存拒绝等于或者大于总可用 swap 大小以及
overcommit_ratio 指定的物理 RAM 比例的内存请求。如果希望减小内存过度使用的风险,这个设置就是最好的。

9. 结合进程管理命令,说明进程各种状态。

进程状态:

R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
D磁盘休眠状态(Disk sleep): 有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
t追踪停止状态(tracing stop): 一般在调试模式下程序运行到断点处会出现此种状态。
X死亡状态(dead): 这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
Z僵尸状态(zombie): 子进程已经结束,等待父进程处理子进程的进程控制块的信息(不处理就一直维护进程控制块的信息)。 
进程的特殊状态:
 僵尸状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程,僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
  所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态
  
孤儿进程:父进程先退出,子进程就称之为“孤儿进程”,孤儿进程被1号init进程(就是操作系统)领养,也由init进程回收。

在这里插入图片描述在这里插入图片描述

11. 说明IPC通信和RPC通信实现的方式。

IPC 进程间通信

同一主机:
pipe 管道,单向传输
socket   套接字文件,双工通信
Memory-maped file   文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存
shm shared memory 共享内存
signal 信号
Lock   对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻
塞,直到锁被打开
semaphore 信号量,一种计数器

RPC通信

不同主机:socket=IP和端口号

RPC remote procedure call
MQ 消息队列,生产者和消费者,如:Kafka,RabbitMQ,ActiveMQ

12. 通过mkfifo, cat, 来解释秒杀的并发问题,如何通过队列解决的?最好结合图形。说明消息队列的作用?

13. 总结Linux,前台和后台作业的区别,并说明如何在前台和后台中进行状态转换

Linux的作业控制
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

在这里插入图片描述

让作业运行于后台
运行中的作业: Ctrl+z
尚未启动的作业: COMMAND &
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台
后,剥离与终端的关系
nohup COMMAND &>/dev/null & 
screen;COMMAND
tmux;COMMAND

查看当前终端所有作业:
jobs
[root@centos7.9 ~]# jobs
[1]+  Stopped                 ping 192.168.44.18
[root@centos7.9 ~]# ^C

fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
kill [%JOB_NUM]: 终止指定的作业
并行运行:
利用后台执行,实现并行功能,即同时运行多个进程,提高效率
方法1
cat all.sh
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
f1.sh&f2.sh&f3.sh&
范例:多组命令实现并行
[root@centos8 ~]#{ ping -c3 127.1; ping 127.2; }& { ping -c3 127.3 ;ping 127.4; 
}&

14. 总结内核设计流派及特点。

宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux
把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,
Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点

微内核(micro kernel):Windows,Solaris,HarmonyOS
简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护,每
种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差

15. 总结centos 6 启动流程,grub工作流程

总结流程图:不知道是否正确

在这里插入图片描述

16. 手写chkconfig服务脚本,可以实现服务的开始,停止,重启。

还需要自己消化后自己写一个

[root@centos6 ~]#cat /etc/init.d/testsrv 
#!/bin/bash
#   -表示0-6全关闭,96开始顺序,3关闭顺序  
# chkconfig: - 96 3   
# description: This is test service script
. /etc/init.d/functions 
start(){
   [ -e /var/lock/subsys/testsrv ] && exit || touch /var/lock/subsys/testsrv
    echo $PATH
   action "Starting testsrv"
    sleep 3
}
stop(){
   [ -e   /var/lock/subsys/testsrv ] && rm /var/lock/subsys/testsrv || exit
   action "Stopping testsrv"
}
status(){
   [ -e /var/lock/subsys/testsrv ] && echo "testsrv is running..." || echo
"testsrv is stopped"
}
case $1 in
start)
    start
   ;;
stop)
    stop
   ;;
restart)
    stop
    start
   ;;
status)
   status
   ;;
*)
    echo $"Usage: $0 {start|stop|status|restart}"
    exit 2
esac

17. 总结systemd服务配置文件

可以yum先安装然后拷贝service文件至 /usr/lib/systemd/system

unit 格式说明:
以 “#” 开头的行后面的内容会被认为是注释
相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭
时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明
service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的


[unit]段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系一些选项

[Service]段的常用选项:
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
   simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
   forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
   oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中dbus:与simple类似,但这个daemon必须要在取得一个
   D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
   notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
   idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务

EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运
ExecStartPost: ExecStart后运
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

[Install]段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务
[Unit]
Description=OpenSSH server daemon   ##描述信息
Documentation=man:sshd(8) man:sshd_config(5)  #帮助信息
After=network.target sshd-keygen.target    #需要这个服务启动才启动,简单理解为依赖关系
Wants=sshd-keygen.target    #依赖到的其它服务,弱依赖

[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config ###环境配置文件
EnvironmentFile=-/etc/sysconfig/sshd   #环境配置文件
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY  #明确启动要运行命令或脚本的绝对路径
ExecReload=/bin/kill -HUP $MAINPID     #重新读取配置文件的命令  kill -1信号
KillMode=process            ##
Restart=on-failure   ##on-failure 表示 仅在服务进程异常退出时重启
RestartSec=42s    ##设置在重启服务( Restart= )前暂停42s

[Install]
WantedBy=multi-user.target ##类似于模式2 3 4

target与init0-6的对应关系:
lrwxrwxrwx. 1 root root  15 317 2023 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root  13 317 2023 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root  17 317 2023 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 317 2023 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 317 2023 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root  16 317 2023 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root  13 317 2023 /usr/lib/systemd/system/runlevel6.target -> reboot.target

18. 总结system启动流程

1. UEFi或BIOS初始化,运行POST开机自检
2. 选择启动设备
3. 引导装载程序, centos7是grub2,加载装载程序的配置文件:
/etc/grub.d/
 /etc/default/grub 
 /boot/grub2/grub.cfg
4. 加载initramfs驱动模块
5. 加载内核选项
6. 内核初始化,centos7使用systemd代替init 
7. 执行initrd.target所有单元,包括挂载/etc/fstab
8. 从initramfs根文件系统切换到磁盘根目录
9. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
10. systemd执行sysinit.target初始化系统及basic.target准备操作系统
11. systemd启动multi-user.target下的本机与服务器服务
12. systemd执行multi-user.target下的/etc/rc.d/rc.local
13. Systemd执行multi-user.target下的getty.target及登录服务
14. systemd执行graphical需要的服务
通过systemd-analyze 工具可以了解启动的详细过程

19. 总结awk工作原理,awk命令,选项,示例。

20. 总结awk的数组,函数。

21. 总结ca管理相关的工具,根据使用场景总结示例。

22. 总结openssh免密认证原理,及免认证实现过程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值