第四周作业

发布时间 2024-01-13 11:50:44作者: 过心不忘

1. 使用while read line和/etc/passwd,计算用户id总和。


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

  索引数组

    示例:一次赋值数组B多个元素

  关联数组

    关联数组必须先声明,再赋值

    示例:声明关联数组H,并赋值

  引用和查看数组

    ${数组名[X]}:数组特定元素的值

    ${数组名[*]}:数组的所有值

    ${!数组名[X]}:数组的下标

    ${#数组名[*]}:数组的元素个数

    示例:查看数组A的所有元素值

    示例:查看数组H的所有下标

    示例:查看数组A的所有元素个数

  删除数组

    unset 数组名:删除整个数组

    unset 数组名[X]:删除数组特定元素

    示例:删除数组A

  字符串处理

    基于偏移量取字符串

      ${#var}:变量var字符串的长度

      ${var:offset:number}:变量var跳过前offset个字符,取number个字符

      ${var: -offset}:取变量var最后offset个字符

      ${var: -offset:-number}:变量var先取最后offset个字符,再去掉后面number个字符

      示例:查看变量GX跳过前2个字符,取2个字符

      示例:查看数组A的2元素取最后3个字符

      示例:查看数组A的0元素先取最后3个字符,再去掉最后一个字符,取剩余部分

    基于模式取字符串

      ${var#*word}:删除从开头到第一个word之间所有的字符

      ${var##*word}:删除从开头到最后一个word之间所有的字符

      ${var%word*}:删除从结尾到第一个word之间所有的字符

      ${var%%word*}:删除从结尾到最后一个word之间所有的字符

      示例:删除变量GX从开头到第一个/之间的所有字符

       示例:删除变量GX从结尾到最后一个/之间所有字符

    查找替换

      ${var/pattern/substr}:查找变量var中第一次被pattern匹配的字符串,并替换为substr

      ${var//pattern/substr}:查找变量var中所有被pattern匹配的字符串,并替换为substr

      ${var/#pattern/substr}:查找变量var中行首被pattern匹配的字符串,并替换为substr

      ${var/%pattern/substr}:查找变量var中行尾被pattern匹配的字符串,并替换substr

      示例:将变量A的第一个345l字符替换为6789

      示例:将变量A行首的nsf字符替换为56

    查找删除

      ${var/patter}:删除变量var中第一个被pattern匹配的字符串

      ${var//patter}:删除变量var中所有被pattern匹配的字符串

      ${var/#patter}:删除变量var中行首被pattern匹配的字符串

      ${var/%patter}:删除变量var中行尾被pattern匹配的字符串

      示例:删除变量A的fm2g字符

      示例:删除变量A的所有2字符

    高级变量 

       间接变量引用

        示例:a变量引用b1变量的值

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


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


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

进程是资源分配和调度的最小单位

线程是任务调度的最小单位

一个进程由一个或多个线程组成,线程是进程中代码的不同执行路线

进程之间互相独立,但同一个进程下的线程之间互相共享程序的内存空间


6. 解析进程的结构。

进程由内存空间(程序代码,数据集合,进程空间,打开文件)和一个或多个线程组成


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

  运行状态:R,running

  休眠状态:S,sleeping,分为两种,可中断,不可中断

  停止状态:T,stopped,暂停于内存,但不会被调度,除非手动启动

  僵死状态:Z,zombies,父进程受到影响,对杀死的子进程无法处理


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

  IPC指设备内不同进程间通信

  RPC指不同设备之间进程通信


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

  前台作业

    通过终端启动,启动后一直占据终端,一旦终端关闭,这个进程也随之消失

  后台作业

    也叫守护进程,可以通过终端启动,启动后转后台运行,不受终端控制

  让作业运行于后台

    运行中作业:ctrl+z

    尚未启动的作业:COMMAND &

  后台作业到前台执行

    fg %JOB_NUM


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

  单内核设计:把所有功能模块集成于同一个程序(Linux),支持模块化如进程调度,内存管理,文件系统,硬件驱动等,支持模块的动态装载和卸载

  微内核设计:每种功能模块使用一个单独子系统实现(Windows),把一些应用放到了用户空间,服务与服务之间隔离,单个服务故障或者被攻击,也不会导致操作系统挂掉


12. 总结rocky 启动流程,grub工作流程

  POST:加电自检,检测系统硬件设备CPU,主板,显卡,内存等

  Bootloader:

    grub1阶段:加载MBR0扇区的前446字节启动引导程序

    grub1.5阶段:0扇区后的空间,boot分区驱动

    grub2阶段:解析/boot/grub.conf文件内容,加载内核文件和伪根文件系统驱动到内存

  kernel:

    探测识别系统硬件设备

    加载所有硬件驱动程序

    以只读方式挂载根文件系统

    运行第一个进程init

  init初始化

    加载/etc/inittab文件,获取默认运行级别

    加载/etc/rc.d/rc.sysinit脚本,系统初始化

    加载/etc/rc.d/rc#.d/S..脚本,运行系统服务

    加载/etc/rc.d/rc.local脚本,运行用户自定义服务

  终端登录


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

1 [Unit] 
2 Description=Hello World 
3 [Service] 
4 TimeoutStartSec=0
5 ExecStart=/bin/sh -c "while ture; do echo Hello World; sleep 1; done"
6 ExecStop=/bin/kill sh
7 [Install] 
8 WantedBy=multi-user.target

  开启服务

  停止服务

  重启服务

 
14. 总结systemd服务配置文件

  systemd服务配置文件由三部分组成

    [Unit]:定义与Unit类型相关的通用选项,用于提供unit描述消息,unit行为,依赖关系

    [Service]:与特定类型相关的专用选项

    [Install]:定义由systemclt enable/disable命令在实现服务开机启动或不启动时用到的一些选项

    Unit段常用选项

      Description:描述信息

      After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动

      Requires:依赖到的其他units,被依赖的units无法激活时,当前unit也无法激活

      Wants:依赖到的其他units

      Conflicts:定义units间的冲突关系

    Service段常用选项

      Type:定义影响ExecStart及相关参数的功能的unit进程启动类型

      ExecStart:指明启动unit要运行命令或脚本的绝对路径

      ExecStop:指明停止unit要运行的命令或脚本

    Install段常用选项

      Alias:别名,可使用systemctl command Alias.service

      RequiredBy:被哪些units所依赖

      WantedBy:被哪些units所依赖

      Also:安装被服务的时候还要安装别的相关服务


15. 总结system启动流程

  POST加电自检

  Bootloader,grub2启动引导程序:/etc/grub.d,/etc/default/grub,/boot/grub2/grub.cfg

  解压initramfs文件,加载驱动模块,挂载根文件系统

  加载虚拟根中的内核

  虚拟根的内核初始化,运行第一个进程systemd

  执行initrd.target所有单元

  从initramfs根文件系统切换到磁盘根目录

  systemd执行默认target配置,配置文件/etc/systemd/system/defaul.target

  systemd执行sysinit.target初始化系统及basic.target准备操作系统

  systemd启动multi-user.target下的本机与服务器服务

  systemd执行multi-user.target下的/etc/rc.d/rc.local

  systemd执行multi-user.target下的getty.target及登录服务

  systemd执行graphical需要的服务


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

  awk工作原理

    第一步:执行BEGIN{action}语句

    第二步:从文件或标准输入中读取一行,然后执行pattern{action}语句,与sed一样逐行扫描处理,从第一行到最后一行重复这个过程,知道全部被读取完毕

    第三步:文件读取完毕后,执行END{action}语句

  格式:awk [选项] ‘program’ [var=X] filename

  选项:

    -F:指定输入的字段分隔符,默认为若干个连续空白符

    -v var=X:指定变量赋值

    -f filename:指定自定义函数或脚本文件

  示例:以:为分隔符,打印passwd文件的第1和3个域字段

  示例:修改FS输入分隔符为:,并且输出时使用FS分割

  示例:以.为域字段分隔符,空格为输入行分隔符,***为输出行分隔符

  示例:打印df除了第一行之外的所有行

  示例:显示passwd文件的列数,以及最后一列内容

  示例:打印df除了第一行外的其他行

  示例:打印行号大于等于3小于7的行

  示例:打印第七个字段不为/sbin/nologin,并且行号小于等于20的行

  示例:awk的if条件判断

  示例:awk的while循环

  示例:awk的for循环


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

  awk数组为关联数组

  关联下标可以为任意字符串,字符串要使用双引号

  如果某数组元素不存在,在引用时,awk会自动创建此元素,并将其值初始化为空串

  awk函数分为内置函数和自定义函数

    数值处理

      rand():返回1和0之间随机数

      srand():配置rand函数,生成随机数种子

      int():返回整数

    字符串处理

      length(X):返回指定字符串长度

      sub(r,s,x):对x字符串搜索r表示模式匹配的内容,并将第一个匹配内容替换为s

      gsub(r,s,x):对x字符串搜索r,并将匹配的所有内容替换为s

      split(s,array,r):对r为分隔符,切割字符串s,并将切割后的结果保存至array数组

    自定义函数

      格式

      function  name(形参){

        命令

        return var

      }


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

  创建CA相关文件

    mkdir -p /etc/pki/CA/{certs,netwcerts,crl,private}

    touch /etc/pki/CA/index.txt

    echo 01 > /etc/pki/CA/serial

  生成CA私钥

    (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem

  生成CA自签名证书

    openssl req -new -x509 -key /etc/pki/CA/cakey.pem -out /etc/pki/CA/cacert.pem -days Num

  生成用户私钥

    (umask 066;openssl genrsa -out filename)

  生成用户证书请求文件

    openssl req -new -in filename -out filename

  颁发用户证书

    openssl ca -in filename -out filename -days Num

  查看证书信息

    openssl x509 -in filename -noout -text

  吊销证书

    echo 01 > /etc/pki/CA/crlnumber

    openssl ca -revoke /etc/pki/CA/newcerts/Num.pem

    openssl ca gencrl -out /etc/pki/CA/crl.pem


19. 总结对称加密和非对称加密算法和用openssl签发证书步骤

  对称加密算法

    加密和解密使用同一个密钥

    特性:

      加密、解密使用同一个密钥,效率高

      将原始数据分割成固定大小的块,逐个进行加密

    缺陷:

      密钥多

      密钥分发

      数据来源无法确认

    常用对称加密算法:

      DES,3DES,AES

 

  非对称加密算法

    密钥成对出现

    公钥:公开给所有人

    私钥:自己留存,保证私密性

    特点:用公钥加密,只能使用与之匹配的私钥解密,反之亦然

    缺陷:

      密钥长,算法复杂

      加密解密效率低

    常见算法:

      RSA,DSA

  

  openssl签发证书步骤

    生成证书申请请求文件

    RA核验

    CA签署

    获取证书