第四周 1. 使用while read line和/etc/passwd,计算用户id总和。
2. 总结索引数组和关联数组,字符串处理,高级变量使用及示例。
索引数组-普通数组可以不事先声明直接使用,declare -a array_name,数组以编号为0开始的数字作为编号,为数值索引
关联数组-必须事先声明,declare -A array_name,可自定义索引格式,
字符串处理
高级变量使用:
shell变量一般为无类型,declare和typeset可用于指定变量类型
-a为普通数组,-A为关联数组,
declare -x 等于export声明环境变量和函数
3. 求10个随机数的最大值与最小值。
4. 使用递归调用,完成阶乘算法实现。
5. 解析进程和线程的区别?
1、进程是操作系统分配资源的最小单位,线程是程序执行的CPU调度的最小单位
2、一个进程,由一个或多个线程组成,线程是一个进程中的不同执行路线
3、进程之间相互独立,同一进程下各线程共享程序的内存空间(包括代码段、数据集、堆等)以及一些进程级别的资源(如打开文件和信号),某进程内的线程在其它进程不可见
4、调度和切换上,线程的上下文切换比进程的快很多
top、ps、pstree -p、grep -i thread /proc/pid/status
6. 解析进程的结构。
内核把进程存放在任务队列双向循环链表中,链表中每一项都是类型为task_struct,称为进程控制块(Processing Control Block),PCB中包含每一个具体进程的所有信息
PCB包含信息:
进程id、用户id和组id
进程计数器
进程的状态(就绪、运行、阻塞)
进程切换时需要保存和恢复的CPU寄存器的值
描述虚拟地址空间的信息
描述控制终端的信息
当前工作目录pwd
文件描述符表,包含很多指向file结构体的指针
进程可以使用的资源上限(ulimit -a)
输入输出状态:配置进程的I/O设备
7. 结合进程管理命令,说明进程各种状态。
ps aux 可查看进程状态,通过kill命令执行操作对相应PID进程进行状态调整,STAT为进程状态。
进程状态有:
运行中R-running
就绪ready
睡眠态(可中断S-Interruptable、不可中断D-uninterruptable)
停止态T-stopped,暂停于内存中,不会自动调度,除非手动调度kill -19 PID
僵死态Z-zombie,父进程结束但子进程未关闭,可通过杀死或恢复父进程恢复正常状态
孤儿进程-父进程先退出,由系统进程收养成为子进程继续运行
8. 说明IPC通信和RPC通信实现的方式。
IPC-inter Process Communication
PIPE-管道,单向传输
socket 套接字文件,双工通信
Memory-maped file 文件映射,将文件中一段数据映射到物理内存,多个进程共享这片内存
signal 信号
Lock 对资源上锁,若资源已被某进程锁住,则其它进程想修改甚至读取这些资源将被阻塞,直到释放;
semaphore:信号量,一种计数器;
RPC:远程过程调用
无名管道只能用于亲缘关系的进程间通信,
命名管道(PIPE)解决了这一局限,支持任意两进程之间的通信;
消息队列(Message Queue)可以支持有数据格式的通信,消息队列、过程调用 通常提供有同步机制。
共享内存效率最高,但是需要跟信号量、锁等同步机制结合使用;
信号主要用于进程间的异步通信,也是唯一的一种异步通信机制
命名管道FIFO:
10. 总结Linux,前台和后台作业的区别,并说明如何在前台和后台中进行状态转换。
前台作业:终端启动,且启动后一直占用终端
后台作业:可通过终端启动,将过程转入后台运行(释放终端),具有并发运行的特性,可快速执行任务。COMMAND &
fg:将作业调回前台运行
bg:让送往后台的作业在后台继续运行
kill:终止作业
Ctrl+Z 可停止后台作业,bg让其恢复继续运行
11. 总结内核设计流派及特点。
Linux的内核设计主要流派和特点可以概括为以下几点:
单内核(Monolithic Kernel): Linux采用了微内核的设计,但并不是完全的微内核,而是采用了混合式的设计,即单内核设计。这意味着Linux拥有一个中央核心,它负责调度进程,管理内存,处理系统调用等。
模块化设计(Modularity): Linux的内核设计具有很高的模块化程度,用户可以根据需要动态地添加或删除内核模块。
支持模块化代码(LKM, Loadable Kernel Modules): Linux允许用户根据需要加载和卸载内核模块。
支持内核模块的动态装载和卸载(Dynamic Kernel Modules): 在Linux中,内核模块可以在运行时动态地加载或卸载,这是通过内核提供的模块加载和卸载工具实现的。
支持内核的 live patching(Hotpatching): Linux内核提供了一种机制,允许在系统运行时对内核代码进行更新和修改,这被称为 live patching。
支持 SMP(Symmetric MultiProcessing): Linux支持对称多处理,这意味着Linux可以很好地支持多个CPU核心和多个处理器。
良好的用户和组权限管理:Linux有一套完善的权限管理机制,包括用户和用户组的概念,确保系统安全性。
支持内存管理和文件系统:Linux有一套完善的内存管理系统和多种文件系统,如ext4,XFS等。
支持多种进程调度算法:Linux支持多种进程调度算法,如O(1),完全公平调度算法等。
支持网络协议栈的模块化设计:Linux的网络协议栈也是模块化的,用户可以根据需要添加或删除网络协议
12. 总结rocky 启动流程,grub工作流程
13. 手写chkconfig服务脚本,可以实现服务的开始,停止,重启。
#!/bin/bash
. /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
14. 总结systemd服务配置文件
/usr/lib/systemd/system
:每个服务最主要的启动脚本设置。/run/systemd/system
:系统执行过程中产生的服务脚本,比上面目录优先运行。/etc/systemd/system
:管理员建立的执行脚本- /lib/systemd/system : ubuntu的每个服务最主要的启动脚本设置对应目录
15. 总结system启动流程
16. 总结awk工作原理,awk命令,选项,示例。
文本三剑客之一AWK:是一种强大的生成文本、修改文本非常强大 的文本工具
相较于grep与sed更为出色,可处理更复杂的文本
工作原理:在文件或字符串中,每读入一行,完成执行相应命令之后再下一行。
BEGIN、END 更是可做到如同文本添加表头与尾部内容的语句
17. 总结awk的数组,函数。
awk的数组为关联数组
awk函数分为内置和自定义函数
内置函数:
常见返回值0和1之间-rand()
配合rand(),生成随机数srand()
int()返回整数
length()
sub(r,s,[t])、gsub(r,s,[t])
自定义函数
function 函数名( 参数a,参数b){} BEGIN{print 函数()}
awk -f 调用 【可添加执行文件对象】
18. 总结ca管理相关的工具,根据使用场景总结示例。
Openssl、gpg
19. 总结对称加密和非对称加密算法和用openssl签发证书步骤
生成私钥:openssl genrsa -out /PATH/.../File [-aes128] 算法
解密:openssl rsa -in /PATH/.../File -out File2
提取公钥: openssl rsa -in /PATH/.../File -pabout -out /PATH/File2
批发ca证书:openssl ca -in /PATH/test.csr -out /etc/.../CA/certs/test.crt
吊销证书:openssl ca -revoke /etc/.../CA/nercerts/Serial.pem