第四周作业

本文详细介绍了Linuxshell编程中的关键概念,如使用whilereadline计算用户ID,处理数组和变量,实现随机数计算、递归、进程与线程区别,以及进程管理、IPC与RPC通信、内核设计、系统启动流程、awk工作原理和数组函数,还涵盖了加密算法和ca管理工具的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四周    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工作流程

1. 加载 BIOS 的硬件信息,获取第一个启动设备 2. 读取第一个启动设备 MBR 的引导加载程序 (grub) 的启动信息
3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4. 核心执行 init 程序,并获取默认的运行信息
5. init 程序执行 /etc/rc.d/rc.sysinit 文件,重新挂载根文件系统
6. 启动核心的外挂模块
7. init 执行运行的各个批处理文件 (scripts)
8. init 执行 /etc/rc.d/rc.local
9. 执行 /bin/login 程序,等待用户登录
10. 登录之后开始以 Shell 控制主机


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启动流程

Systemd 新特性
系统引导时实现服务并行启动
按需启动守护进程
自动化的服务依赖关系管理
同时采用 socket 式与 D-Bus 总线式激活服务
socket 与服务程序分离
向后兼容 sysv init 脚本
使用 systemctl 命令管理, systemctl 命令固定不变,不可扩展,非由 systemd 启动的服务,
systemctl 无法与之通信和控制
系统状态快照
systemd 核心概念: unit unit 表示不同类型的 systemd 对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听
socket 、保存的系统快照以及其它与 init 相关的信息


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值