第四周作业
1. 自定义写出10个定时任务的示例:
比如每周三凌晨三点执行data命令
要求尽量的覆盖各种场景
#每周三晚上三点输出当前时间到指定文件
0 3 * * 3 date>>/data/date.txt
#每隔30分钟检查一下系统磁盘
*/30 * * * * /usr/bin/sh /test/data/disk_check.sh>>/data/check.txt
#每隔2小时查询系统
0 */2 * * * /usr/bin/sh /test/data/check_os.sh>>/data/check_os.txt
#8月每天早上6到12点每隔2小时打印hello
0 6-12/2 * 8 * echo "Hello!" >>/data/hell0.txt
#1号、15号下午五点输出“welcome to Magedu!”
0 17 1,15 * * echo "howdy";wall "welcome to Magedu!"
#星期一、三、五、七晚上一点执行备份
0 1 * * 1,3,5,7 sh /test/data/backup.sh
#周二到周四晚上0点重启apache
0 0 * * 2-4 systemctl restart httpd
#每天晚上1点10创建当前时间的文件
10 1 * * * touch /data/`date +\%F_\%H\%M`.txt
#每隔2小时查看/pro/meminfo以S或M开头输出到指定文件
0 */2 * * * grep -E '^(S|M)' /proc/meminfo >/data/meminfo-`date +\%F_\%H\%M`.txt
#每2个月晚上3点删除/tmp目录下的文件
0 3 * */2 * rm -fr /tmp/*
2. 图文并茂说明Linux进程和内存概念

- 程序用于描述进程要完成的功能,是控制进程执行的指令集
- 数据集合是程序在执行时所需要的数据和工作区
- 程序控制块(简称PCB)包含进程的描述信息和控制信息,是进程存在的唯一标志
- 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡
- 并发性:如何进程都可以和其他进程一起并发执行
- 独立性:进程是系统进行资源分配和调度的一个独立单位
- 结构性:进程由程序、数据集合和进程控制块三部分组成
- 创建状态:进程在创建时需要申请一个空白的PCB,向其中写入控制和改了进程的信息,完成资源分配
- 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即执行
- 执行状态:进程处于就绪状态被调度后,进程进入执行状态
- 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
- 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
- 运行态:running
- 就绪态:ready
- 睡眠态:分为两种,可中断:interruptable;不可中断:uninterruptable
- 停止态:stopped,暂存与内存,但不会被调度,除非手动启动
- 僵死态:zombie,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态的子进程
一个32位的操作系统中每一个进程的虚拟地址空间为4G,其中1G为内核空间,3G为用户空间,每个进程的用户空间分为代码段、数据段、BSS段、堆、栈5中不同的数据段
进程
3. 图文并茂说明Linux启动流程

- POST加电自检,加载BIOS的硬件信息,获取第一个启动设备
- 读取第一个启动设备的MBR 引导加载程序(GRUB)的信息
- kernel 加载操作系统的内核信息
- 启动第一个init进程,获取默认的运行信息
- init 执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
- 加载内核的外挂模块
- init 执行运行的各个批处理文件
- init执行/etc/rc.d/rc.local
- 执行/bin/login程序,等待用户登录
- 登录之后开始以shell控制主机
- UEFI或BIOS初始化,运行POST开机自检
- 选择启动设备
- 引导加载程序,centos7是grub2,加载装载程序的配置文件:/etc/grub.d /etc/default/grub /boot/grub2/grub.cfg
- 加载initrammfs驱动模块
- 加载内核选项
- 内核初始化
- 执行initrd.target所有单元,包括挂载/etc/fstab
- 从initramfs根文件系统切换到磁盘根目录
- 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
- systemd执行multi-user.target下的getty.target及登录服务
- systemd执行graphical需要的服务
4. 自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
check_file.service文件
root@rocky8 system]#cat check_file.service
[Unit]
Description=The tmp dir is check file num server
After=network.target sshd.target
[Service]
Type=simple
ExecStart=/bin/bash /test/data/check_file.sh &
ExecStop=ps -ef |grep check_file.service |awk '{print $2}'|xargs kill -9 2&1>/dev/null
[Install]
WantedBy=multi-user.target
创建好自定义文件后,必须systemctl daemon-reload

在远程主机tmp目录下创建三个文件,在本主机的file.log文件中医检测到增加了3个文件

停止服务

5. 写Linux内核编译安装博客
https://cdn.kernel.org/

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.292.tar.xz
tar -xvf linux-4.19.292.tar.xz
cd /data/linux-4.19.292
cp /boot/config-$(uname -r) .config
vim .config
#修改下面三行
CONFIG_MODULE_SIG=y#注释此行
CONFIG_SYSTEM_TRUSTED_KEYS=" "此行需修改
CONFIG_DEBUG_INFO_BTF=y #注释此行
编译
yum -y install gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel bc perl
make bzImage
make modules_install
make installreboot
6. 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。
- 数据过滤:awk根据指定的条件过滤数据,在处理大量日志文件中非常有用。如:获取访问日志文件中的ip和时间
- 统计分析:awk具有内建的计数和聚合功能,可以轻松进行数据计数和分析。如:统计文件中某个字符或者单词出现的次数
- 文本格式化和生成报表:awk 根据特定规则对文本进行格式化,生成报表。如:生成学生成绩表格
- 数据提取和转换:awk根据特定的分隔符或者正则表达式提取数据,对数据进行排序、转换等。如:获取passwd中的用户名和id
- 结合条件判断和循环,实现复杂数据的处理。如:监控IP并发连接超过阈值时,调用防火墙命令封掉对应IP
发散题:
字符串处理,结合gsub函数对字符串将匹配到的内容全部替换成新内容
[11:36:13 root@rocky8 ~]#echo "2023:08:22 11:20:30"|awk '{gsub(/:/,"-",$1);print $0}'
2023-08-22 11:20:30
处理网站访问量最大的前3个ip
[root@centos7~]#awk '{print $1}' nginx.log|sort|uniq -c|sort -nr|head -3
704263 222.133.18.214
637295 120.76.115.230
103448 175.27.244.137

浙公网安备 33010602011771号