第四周作业

背景

作业:

1、自定义写出10个定时任务的示例:

①比如每周三凌晨三点执行data命令 ②要求尽量的覆盖各种场景

解析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
crontab -e             #编辑定时任务

HELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #系统默认的路径
MAILTO=root

0 3 * * 3 cp -a /apps/data /backup #每周三3点整复制data内的文件到backup目录下
0 1 1 * * systemctl restart httpd #每月1号1点整重新启动http服务
30 1 * * 1-5 cp -a /etc /backup/etcbak-`date -d -1day`
#每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-ddHH.tar.xz”,其中日期是前一天的时间
* */2 * * * cat /proc/meminfo | grep -e "^S" "^M" >> /tmp/meminfo.txt
#每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
*/10 * * * 1-5 /check_disk.sh #工作日每10分钟检查一次磁盘,如果超过80%,则报警发送至邮箱


vim check_disk.sh

#!/bin/bash
warning=80
used=`df | awk -F"[ %]+" '{print $5}' | sort -rn | head -1`
[ $used -gt $warning ] && echo Disk will be full ! |mail -s worning youxiang@qq.com



2、图文并茂说明Linux进程和内存概念

解析:

image-20220911212407275

①进程

进程:运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位。

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度 的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。

进程的组成:进程一般由程序、数据集合和进程控制块三部分组成。

程序用于描述进程要完成的功能,是控制进程执行的指令集; 数据集合是程序在执行时所需要的数据和工作区; 程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一 标志。

进程具有的特征:

动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

并发性:任何进程都可以同其他进程一起并发执行;

独立性:进程是系统进行资源分配和调度的一个独立单位;

结构性:进程由程序、数据和进程控制块三部分组成。

②内存

内存:是运行进程的空间,CPU待处理的数据和运行的程序暂时存储的空间。

3、图文并茂说明Linux启动流程

解析:

image-20220911212506097

CentOS6启动流程

(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控制主机

CentOS7以后启动流程 

(1) UEFi或BIOS初始化,运行POST开机自检

(2) 选择启动设备

(3) 引导装载程序, centos7是grub2,加载装载程序的配置文件:

  /etc/grub.d/

  /etc/default/grub

  /boot/grub2/grub.cfg

(4) 加载initramfs驱动模块

(5) 加载内核选项

(6)内核初始化,centos7使用systemd代替init

(7) 执行initrd.target所有单元,包括挂载/etc/fstab

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

(9) systemd执行默认target配置,配置文件/etc/systemd/system/default.target

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

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

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

(13) Systemd执行multi-user.target下的getty.target及登录服务

(14)systemd执行graphical需要的服务

4、自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。

解析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vim /lib/systemd/system/chaxun.service

[Unit]
Description=chaxun

[Service]
TimeoutStartSec=0
Execstart=/bin/sh -c "ssh root@10.0.0.132 find /tmp/ -mtime 2|wc -l >> log.txt"
ExecStop=/bin/kill sh

[Install]
Wantedby=multi-user.target




生效
systemctl daemon-reload
systemctl enable --now chaxun.service

5、写Linux内核编译安装博客

解析:

①提前准备安装软件包

1
yum -y install gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel perl perl-devel

②从官网下载最新版本的内核(www.kernel.org)

image-20220911161947066

③修改配置

1
2
3
4
5
6
7
8
9
10
cd /usr/local/src
tar xf linux-5.19.8.tar.xz #解压
cd linux-5.19.8
cp /boot/config-4.18.0-372.9.1.el8.x86_64 ./.config #将现有版本的内核编译config配置文件拷贝到新版本里,快捷方便,在原有的文件里更改
vim .config
# CONFIG_MODULE_SIG=y #注释此行
CONFIG_SYSTEM_TRUSTED_KEYS="" #修改此行
# CONFIG_DEBUG_INFO_BTF=y #linux-5.8.5版本后需要注释此行


④配置选项

1
make menuconfig

image-20220911182550204

在这里可以选择启用或者禁用一些模块。不知道该如何选择的话,默认退出即可

⑤编译安装

1
2
3
4
5
make -j 2      #j 2是2个CPU同时运行,如果CPU有更多可以选择更大的数字   编译内核
make modules_install #安装内核模块
make install #安装内核核心文件


image-20220911205446461

⑥重新启动

image-20220911205908277

6、总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。

解析:

取分区利用率或者IP地址时,命令最少

1
2
3
4

df | awk 'NR>=2{print $1,$5}' #一条命令取出第二行到最后一行的分区及利用率
ip a | awk -F"[ /]+" 'NR==9{print $3}' #以前的命令还需要tr将多个空格合并


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!