第四周作业

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, 命令,选项,示例。

(1)trap, install, mktemp, expect

trap:信号捕捉
	trap -l ----------------列出所有信号
	trap '指令' 信号 -------信号替换成指令
	trap '' 信号 -----------忽略信号
	trap '-'  --------------恢复原信号
	trap -p  ---------------列出自定义信号操作
	trap finish EXIT -------脚本退出时执行finish函数
	
mktemp:创建临时文件
	mktemp testXXX -------------创建临时文件
	mktemp -d /data/testXXX ----创建临时目录
	
install:安装复制文件
	install -m 权限
	install -o 文件用户
	install -g 文件用户组
	install -d 创建目录
	例:install -m 700 -o wang -g bin -d /test
	
expect:交互式批量处理工具
	yum -y install expect 
	rpm -ql expect
		mkpasswd -l 10 -c 3 -C 3 -d 3 --------生成随机字符


vim trap_exit.sh
#!/bin/bash
finish(){
	echo finish | tee -a /root/finish.log
}

trap finish exit

while true ;do
	echo runing
	sleep 1
done


vim expect.sh
#!/bin/bash
NET=192.168.29
user=root
password=qwe123
IPLIST="
225
226
227
"
for ID in $IPLIST ;do
ip=$NET.$ID

expect <<EOF
set timeout 10
spawn ssh $user@$ip
expect{
	"yes/no" { send "yes\n";exp_continue }
	"password" { send "$password\n" }
}

expect "#" { send "sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config\n" }
expect "#" { send "setenforce 0\n" }
expect "#" { send "exit\n" }
expect eof
EOF
done

(2)进程优先级命令:nice, renice,

nice优先级 -20~19对应系统优先级100~139
renice -n -10 3211 -------------将3211进程优先级改为-10

(3)进程管理工具ps, pstree, prtstat, pgrep, pidof, uptime,mpstat,top,htop, free, pmap, vmstat, iostat, iotop, iftop, nload, nethogs, iptraf-ng, dstat, glances, cockpit, kill, job,

ls /proc

pstree:进程树
    常用选项:
	 -p ------------------------------显示PID
	 -T ------------------------------不显示线程
	 -H 1651 -------------------------高亮显示16551进程
	 -u ------------------------------显示用户切换


ps:进程信息
	常用选项:
    a :选项包括所有终端中的进程
    x :选项包括不链接终端的进程
    u :选项显示进程所有者的信息
    f :选项显示进程树
    k|--sort :属性 对属性排序,属性前加-表示倒序
    o :属性。选项显示定制的信息
     例: ps auxf --------------------------------查看进程父子关系
         ps ps axo pid,cmd,ni -------------------显示指定信息


prtstat:查看进程信息
	prtstat 1402 -------------------------------只看进程详细信息
    例:prtstat 1402
        进程:  mysqld        		状态:S (暂停中)
          CPU#: 2  		TTY:0:0	线程:39
        进程、群组和运行阶段识别码
            进程识别号:1402		     上层识别号:1



pgrep搜索进程:
    常用选项:
    -u uid:生效者
    -U uid:真正发起运行命令者
    -t terminal:指定终端相关的进程
    -l:显示进程名
    -a:显示完整格式的进程名
    -p pid:显示指定进程的子进程
    例:pgrep -u mysql


pidof搜索进程:
     pidof mysqld
     pidof -x ping.sh


uptime负载查询:
    [17:41:56 root@lgxtest1 ~]#uptime
     17:46:10 up 7 min,  1 user,  load average: 0.00, 0.03, 0.01


w负载查询:
    [17:46:10 root@lgxtest1 ~]#w
     17:46:13 up 7 min,  1 user,  load average: 0.00, 0.03, 0.01
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.29.1     17:41    5.00s  0.10s  0.00s w


mpstat 显示cpu相关统计:    
    [17:51:39 root@lgxtest1 ~]#mpstat
    Linux 4.18.0-348.el8.0.2.x86_64 (lgxtest1) 	2023年10月18日 	_x86_64_	(4 CPU)
    17时51分43秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    17时51分43秒  all    0.21    0.00    0.52    0.06    0.10    0.03    0.00    0.00    0.00   99.08


top和htop查看进程实时状态:
     常用选项:
     -d:指定刷新时间间隔
     -b:全部显示所有进程
     -n:刷新多少次后退出
     -H:线程模式
    例:top -H -p `pidof mysqld`


free查看内存空间:
    -b:以字节为单位
    -m:以MB为单位
    -g:以GB为单位
    -h:易读格式
    -o:不显示
    -s n:刷新间隔为n秒
    -c n:刷新n次后退出
    例:free -h


iostat 统计CPU和设备IO信息:
      常用选项:
        -c:只显示cpu行
        -d:显示设备使用状态
        -k:以千字节为单位显示输出
        -t:在输出中包括时间戳
        -x:在输出中包括扩展的指标


iotop监视磁盘I/O
    

iftop显示网络带宽使用情况:
    iftop -n


nload查看网络实时吞吐量:
    nload


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


iptraf-ng 网络监视工具:
    iptraf-ng


dstat系统资源统计:
    常用选项:
    -c:显示cpu相关信息
    -d:显示disk相关统计数据
    -g:显示page相关统计数据
    -m:显示memory相关统计数据
    -n:显示network相关统计数据
    -p:显示process相关统计数据
    -r:显示io相关统计数据
    -s:显示swapped相关统计数据


lsof查看进程打开文件:
    lsof -p `pidof mysqld`


cockpit图形化管理:
    yum -y install cockpit
    systemctl enable cockpit.socket --now
    IP:9090端口查看

    
kill信号管理:
    kill -l :查看信息好选项
        1:无需关闭进程人行其重载配置文件
        2:中止正在运行的进程,相当于Ctrl+c
        3:相当于Ctel+\
        9:强制杀死正在运行的进程,可能会导致数据丢失
        15:终止正在运行的进程
        18:继续运行
        19:后台休眠
    killall -0 mysqld 利用0信号实现进程健康性检查

作业管理jobs:
    jobs:查看当前终端所有作业
    fg:把指定的后台作业调回前台
    bg:把后台的作业继续运行

(4)任务管理工具

at   (任务默认路径/var/spool/at/)
		at 14:38、at now+5min
		touch /data/at2.log
		at -l -------------------------查看at任务
		at -d 2 -----------------------删除at序号为2的任务

crontab
    常用选项:
    -l:列出所有任务
    -e:编辑任务
    -r:删除所有任务


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

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

声明数组:
    #关联数组必须声明再使用
    declare -A array_name

数组赋值:
    单一赋值:array_name[index]=value
            例:stu[0]="li"
    多元素同时赋值:array_name=("value1" "value2" "value3")
            例:stu=("li" "wang" "liu")
    只赋值特定元素:array_name=([0]="val1" [2]="val2")
    交互式数组值对赋值:read -a arry

显示所有数组:
    declare -a

引用数组:
    declare -a stu=([0]="li" [1]="wang" [2]="liu")
    echo ${stu[1]}
     ${array_name[*]} /引用所有元素
     ${array_name[@]}
     ${#array_name[*]} /显示数组长度
     ${#array_name[@]}
     ${!array_name[*]} /显示数组所有下标
     ${!array_name[@]}

删除数组:
    unset array[index] /删除数组中某个元素
    unset array        /删除整个数组

字符串处理
    num=({1..10})----------1-10
	echo ${num[*]}---------显示所有 序号0开始
	echo ${num[*]:4:2} ----从第四个开始截取显示2位
	echo ${num[*]:4} ------跳过前4位
	echo ${#num[*]} -------显示数组总数
	num[${#num[*]}]=11 ----那之前数组总数定义为新数组下表序号


高级变量赋值:
   var=${str-expr}
	name没有值:title=${name-"li"};echo $title ----------------------------输出li
	name为空值:name="";title=${name-"li"};echo $title --------------------输出空值
	name有值:name="s";title=${name-"li"};echo $title ---------------------显示name的值


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

#!/bin/bash
declare -i min max
declare -a nums
for ((i=0;i<10;i++));do
    #生成数组下标0-9共10个元素并赋值随机数
    nums[$i]=$RANDOM        
    #下标为0的元素定义为最小值且为最大值  
    [ $i -eq 0 ] &&  min=${nums[0]} && max=${muns[0]}&& continue
    #数组其他元素与最大值比较并生成新的最大值
    [ ${nums[$i]} -gt $max ] && max=${nums[$i]} && continue
    #数组中其他元素与最小值比较生成新的最小值
    [ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo Max is $max
echo Min is $min


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

进程:是操作系统分配资源的最小单位
线程:是程序执行的最小单位

一个进程由一个或多个线程组成,线程是一个进程中代码不同执行路线;
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间及一些进程级的资源,某进程内的线程在其他进程不可见;
调度和切换:线程上下文切换比进程上下文切换要快得多。


5. 解析进程的结构。

进程的结构
进程由三部分组成:程序、数据及进程控制块PCB
(1)进程的程序:描述进程所要完成的功能( 部分程序代码)。
(2)数据结构集:是程序在执行时必不可少的工作区和操作对象。
(3)进程控制块PCB:包含了有关进程的描述信息、控制信息、资源信息以及现场信息


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

磁盘中的代码,在运行的时候才会被调入到内存中,
而CPU中寄存器的数据是从内存中装载进来的,然后CPU再根据相应的指令去操作寄存器中的数据


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

R (running):运行状态
S(sleeping):睡眠状态
D(Disk sleep):磁盘休眠状态
T(stopped):停止状态
X(dead):死亡状态
Z(zombie):僵尸状态 


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

前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行

让作业运行于后台
执行中的作业:Ctrl+z
尚未启动的作业:command &

fg jobnumber:把后台指定的作业调回前台
bg jobnumber:让后台的作业继续运行
kill -19 jobnumber 让后台运行的作业停止


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

宏内核:
    把所有的操作系统都放入到内核中。所有功能都集成到同一个程序,分层实现不同的功能,系统庞大复杂,            
    linux实际上是单内核实现了模块化,相当于吸收了微内核的优点。

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


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

1.加电自检,得到BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.运行init程序
5.运行系统初始化脚本  /etc/rc.d/rc.sysinit
6.启动核心的外挂模块
7.init执行运行各个批处理文件
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登陆之后,打印登陆提示符,并开始shell控制主机


POST加电自检
–GRUB 1阶段MBR446–GRUB1.5MBR之后的空间(提供grub2文件所有分区的文件系统)
–GRUB 2阶段(grub.conf)
–kernel(initramfs.img)–根分区
–/sbin/init–/etc/inittab–/etc/rc.sysinit(系统初始化脚本)
–/etc/rc.d/rc–/etc/rcN.d/K,S(/etc/init.d/)–/etc/rc.local–login登录


11. 总结system启动流程

POST开机自检,选择启动设备引导装载程序,centOS7是grub2加载程序的配置文件:
	/etc/grub.d/
	/etc/default/grub
	/boot/grub2/grub.cfg
加载initramfs驱动模块(可以实现根文件系统的挂载)
加载内核选项
内核初始化,centOS使用systemd代替init
执行initrd.target所有单元,包括挂载/etc/fstab
从initasmfs根文件系统切换到磁盘根目录
systemd执行默认target配置,配置文件/etc/systemd/system/default.target
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机于服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local
ststemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical需要的服务

12.systemd服务配置文件

unit格式说明:
● #开头的行后面内容是注释
● 相关布尔值,1、yes、on、true都是开启;0、no、off、false都是关闭
● 时间单位默认是秒,其他单位要显式说明
service unit file通常由三部分组成:
● [Unit]	定义与Unit类型无关的通用选项;用于提供unit的描述信息,unit行为及依赖关系
  ○ Description:描述信息
  ○ After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,与Before相反
  ○ Requires:依赖到的其他units,强依赖,被依赖的units无法激活时,当前unit也无法激活
  ○ Wants:依赖到的其他units,弱依赖
  ○ Conflict:定义units间的冲突关系
● [Service]	与特性类型相关的专用选项
  ○ Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
    ■ simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻内存
    ■ forking:由ExecStart启动的程序透过spawn延伸出其他子程序来作为此daemon的主要服务,原生父进程在启动结束后就会终止
    ■ oneshot:与simple类似,不过这个程序在工作完毕就结束了,不会常驻内存
    ■ dbus:与simple类似,但这个daemon必须要在取得一个D-bus的名称后才会继续运行。因此通常也要同时设定BusName=才行
    ■ notify:在启动完成后会发送一个通知消息,还需要配合NotifyAccess来让Systemd接收消息
    ■ idle:与simple类似,要执行这个daemon必须要所有的工作都顺序执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
  ○ EnvirenmentFile:环境配置文件
  ○ ExecStart:指明启动unit需要运行命令或脚本的绝对路径
  ○ ExecStartPre:ExecStart前运行
  ○ ExecStartPost:ExecStart后运行
  ○ ExecStop:指明停止unit要运行的命令或脚本
  ○ Restart:当设定Restart=1时,则档次daemon服务意外终止后,会再次自动启动此服务
  ○ RestartSec:设置在重启服务前暂停多长时间,默认100ms
  ○ PrivateTmp:设定为yes时,会生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/ 目录
● [Install]	定义由“systemcrl enable”以及“systemctl disable”命令在实现服务启用或禁用时用到的一些选项
  ○ Alias:别名,可使用systemctl command Alias.service
  ○ RequiredBy:被哪些units所依赖,强依赖
  ○ WantedBy:被哪些units所依赖,弱依赖
  ○ Also:安装本服务的时候还要安装别的相关服务

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

awk工作原理:
用于整行处理,首先匹配条件,然后执行指定动作,
逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,
并按模式或者条件执行编辑命令


awk常见选项:
    -F:指明输入时用到的分隔符,默认的分隔符是若干个连续空白符
    -v:var=value 变量赋值
    例:df | awk -F' +|%' 'NR>=2{print $5}' #df查看第二行往后,以空格或%隔开的第5列

awk常见的内置变量:
    FS:输入字段分隔符,默认为空白字符,功能相当于-F ,同时语句中可以引用FS变量
       例:awk -v FS=":" '{print $1FS$3}' /etc/passwd
    
    OFS:输出字段分隔符,默认为空白字符
       例:awk -v FS=":" -v OFS="@" '{print $1,$3}' /etc/passwd
            bin@1
    RS:输入记录分隔符,指定输入时的换行符
       例:awk -v RS=":" '{print}' /etc/passwd
    ORS:输出分隔符,输出是用指定符号代替换行符
       例:awk -v RS=":" -v ORS='###' '{print $0}' /etc/passwd
    NF:字段数量
       例:awk -F':' '{print $(NF-1)}' /etc/passwd
    NR:记录的编号
       例:awk '{print NR,$0}' /etc/passwd
    FNR:各文件分别计数,记录的编号
       例:awk '{print FNR}' /etc/passwd
    FILENAME:当前文件名
       例:awk '{print FNR,FILENAME}' /etc/passwd
    

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

数组:
数组去重:cat test.txt
a
b
c
a
b
c
]#awk '!line[$0]++' /data/test.txt
a
b
c

常见内置函数:
    数值处理:
        rand():返回0和1之间一个随机数
        srand():配合rand()函数,生成随机数的种子
        int():返回整数
    字符串处理:
        length([s]):返回指定字符串长度
        sub(r,s,[t]):对t字符串搜索r表示模式匹配的内容,并将第一个匹配的内容替换成s,懒惰模式
        gsub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并全部替换为s所表示的内容
        split(s,array,[r]):以r为分割符,切割字符串s,并将切割后的结果保存至array所表示的数组中,                    第一个索引值为1,第二人格索引值为2...
    调用shell命令:
        system():括号里能执行linux命令
    时间函数:
        systime():当前时间到1970-1-1的秒数
        strftime():指定时间格式


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

1.创建私有CA,生成自签证书
    (1)创建CA所需要的文件
	    [20:30:10 root@lgxtest1 data]#ll /etc/pki/CA
    	drwxr-xr-x 2 root root 6 10月 20 20:30 certs    
    	drwxr-xr-x 2 root root 6 10月 20 20:30 crl		
    	drwxr-xr-x 2 root root 6 10月 20 20:30 newcerts	
    	drwx------ 2 root root 6 10月 20 20:30 private	
	
    	touch /etc/pki/CA/index.txt 	//生成证书索引数据库文件
	    echo 0F > /etc/pki/CA/serial 	//指定第一个颁发证书的序列号(16进制内容)
	

    (2)生成私钥
    	cd /etc/pki/CA
    	openssl genrsa -out private/cakey.pem

    (3)生成CA自签名证书
    	openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
    	选项说明:
	    	-new:生成新证书签署请求
	    	-x509:专用于CA生成自签证书
	    	-key:生成请求时用到的私钥文件
	    	-days:证书的有效期限
	    	-out:证书的保存路径
		
    	openssl x509 -in /etc/pki/CA/cacert.pem -noout -text  //查看CA证书信息

2.申请证书并颁发证书
	(1)为需要使用证书的服务主机生成私钥
		openssl genrsa -out /data/nginx.key
	(2)利用服务主机私钥为需要使用证书的主机生成证书申请文件
		openssl req -new -key /data/nginx.key -out /data/nginx.csr
	(3)在CA签署证书并将证书颁发给请求者	
		openssl ca -in /data/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 100
		
3.证书吊销:
	(1)指定需要吊销的证书
		openssl ca -revoke /etc/pki/CA/newcerts/0F.pem
	(2)指定第一个吊销证书的编号
		echo 01 > /etc/pki/CA/crlnumber
	(3)更新证书吊销列表
		openssl ca -gencrl -out /etc/pki/CA/crl.pem
	(4)查看crl.pem文件
		openssl crl -in /etc/pki/CA/crl.pem -noout -text



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

1.先在客户端生成一对密钥
2.并将客户端的公钥ssh-copy-id拷贝到服务端
3.当客户端再次发送s连接请求(包括ip/用户名)
4.服务器得到客户端的请求后,会到authorized_keys中查找,如果有相应的IP和用户,会随机生成一个字符串
5.服务端将使用客户端拷贝过来的公钥加密,然后发送给客户端
6.客户端用私钥解密,然后将解密后的字符串发给服务端
7.服务端接收到客户端发送到字符串后,跟之前的字符串进行对比,一致则允许免密登录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值