第四周

1. 自定义写出10个定时任务的示例:比如每周三凌晨三点执行date命令,要求尽量的覆盖各种场景

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
0 0 * * 6        /tmp/bak.sh                             #每周六的0点0分执行bak备份脚本
30 0 * * *       systemctl restart httpd                 ##每天的0点30分重启httpd服务
15 8 * * 1,3,5   mail -s "hello" abc@163.com < /tmp/hello.txt  #每周一周三周五的8点15分给abc@163.com发送邮件
0 4 * * *        rm -rf /data/*                          #每天的凌晨4点对data目录进行清理
0 2 1 5 *        tar -zcf /tmp/etc.tar.gz /etc/			 #5月1号的凌晨2点对etc目录进行打包压缩
0 9-18 * * 1-5   /tmp/test.sh							 #每周一到周五的9点到18点执行test脚本
* */1 * * *      ntpdate ntp1.aliyun.com				 #每隔一个小时进行ntp时间同步
31 10-23/2 * * * ping -c1 -W1 10.0.0.1 &> /tmp/ping.txt	 #从10点31分开始到23点31分每隔2小时ping测试
0 10,16 * * *    /tmp/disk.sh							 #每天的10点和16点执行disk脚本
0 8,9 * * 1-5    /tmp/mem.sh                             #每周一到周五的8点和9点执行mem脚本

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

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

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

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

进程具有的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进程一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序、数据和进程控制块三部分组成。
内存:进程运行的空间,CPU运行的程序和待处理的数据暂时存储的空间

脚本

进程的基本状态:
1)创建状态:进程在创建时需要申请一个空白的PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态成为创建状态
2)就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能立即运行
3)执行状态:进程处于就绪状态被调度后,进程进入执行状态
4)阻塞状态:正在执行的进程由于某些时间(I/O请求,申请缓存区失败)而暂时无法运行,进程收到阻塞。在满足请求时进入就绪状态等待系统调用
5)终止状态:进程结束或出现错误,或被系统终止,进入终止状态,无法再执行


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

#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控制主机
#CentOS 7启动流程
1.UEFi或BIOS初始化,运行POST开机自检
2.选择启动设备
3.引导装载程序,Centos 7是grub2,加载装载程序的配置文件
/etc/grub.d
/etc/default/grub
/boot/grub2/grub.cfg
4.加载initramfs驱动模块
5.加载内核选项
6.内核初始化。centos 7使用systemd替代init
7.执行initrd.garget所有单元,包括挂载/etc/fatab
8.从initramfs根文件系统切换到磁盘根目录
9.systemd执行默认targe配置,配置文件/etc/systemd/system/defaylt.target
10.systemd执行sysinit.target初始化文件系统及basic.target准备操作系统
11.systemd启动multi-user.targe下的本机与服务器服务
12.systemd执行multi-user.target下的/etc/rc.d/rc.local
13.systemd执行multi-user.target下的getty.target及登录服务
14.systemd执行garphical需要的服务

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

创建一个文件检查脚本

[root@rocky8 ~]#cat count.sh 
#!/bin/bash
# **********************************************************
# * Author        : douxijie
# * Email         : 2659143116@qq.com
# * Create time   : 2023-06-27 21:07
# * Filename      : count.sh
# * Description   : 
# **********************************************************

# 远程服务器的用户名和地址
USER="root"
HOST="10.0.0.77"

# 上次的文件数量
LAST_COUNT_FILE="/var/log/last_count.txt"
CURRENT_COUNT=$(ssh $USER@$HOST "ls /tmp | wc -l")

# 如果上次的文件数量文件不存在,创建它
if [ ! -f $LAST_COUNT_FILE ]; then
    echo $CURRENT_COUNT > $LAST_COUNT_FILE
fi

# 读取上次的文件数量
LAST_COUNT=$(cat $LAST_COUNT_FILE)

# 如果文件数量有变化,记录到日志文件中
if [ $CURRENT_COUNT -ne $LAST_COUNT ]; then
    echo "$(date): 文件数量已经由$LAST_COUNT 更新为$CURRENT_COUNT" >> /var/log/file_count.log
fi

# 更新上次的文件数量文件
echo $CURRENT_COUNT > $LAST_COUNT_FILE

创建service文件

[root@rocky8 ~]#cat /lib/systemd/system/check_files.service 
[Unit]
Description=Check file count on remote server

[Service]
ExecStart=/root/count.sh

[Install]
Wantedby=multi-user.target

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

#下载源代码:从官方网站或其他可信来源下载所需版本的Linux内核源代码压缩包
[root@rocky9 ~]#yum -y install gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel bc perl

#解压源代码:使用tar命令下载解压源代码文件。
[root@rocky9 ~]#tar xf linux-6.3.10.tar.xz -C /usr/local/src/

#进入目录:切换到解压源码后的内核源码目录。
[root@rocky9 linux-6.3.10]#cd /usr/local/src/linux-6.3.10

#配置内核,拷贝当前内核的配置文件,并进行对应修改,然后使用 menuconfig 命令来做任何必要的更改
[root@rocky9 linux-6.3.10]#cp /boot/config-5.14.0-162.6.1.el9_1.x86_64 .config
[root@rocky9 linux-6.3.10]#vim .config
#修改下面三行

# CONFIG_MODULE_SIG=y #注释此行

CONFIG_SYSTEM_TRUSTED_KEYS="" #修改此行

# CONFIG_DEBUG_INFO_BTF=y     #linux-5.8.5版本后需要注释此行

##配置内核选项:可以选择使用默认配置或自定义配置来启用/禁用特定功能
[root@rocky9 linux-6.3.10]#make menuconfig

##编译内核,-j后面代表CPU核数,根据你机器的核数决定,数字越大编译速度越快
[root@rocky9 linux-6.3.10]#make -j 8

##安装,安装过程分为两部分,首先对内核模块进行安装,这个过程会将刚刚编译内核模块时生成的内核模块复制到/lib/modules/6.3.10dxj-linux目录下,其中6.3.10为对应的内核版本。
[root@rocky9 linux-6.3.10]#make modules_install

#安装内核:执行以下命令来安装编译后的内核。
[root@rocky9 linux-6.3.10]#make install

#更新引导记录:运行以下命令来更新引导记录。
update-grub          # 如果使用GRUB作为引导加载程序(适用于大多数Linux发行版)
grub2-mkconfig -o /boot/grub2/grub.cfg   # 如果使用GRUB 2

#重启系统:重新启动计算机并选择刚刚安装的新内核进行启动。
[root@rocky9 linux-6.3.10]#reboot

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

#取出系统中的用户名和UID
[root@rocky8 ~]#awk -F: 'BEGIN{printf "%-20s%-10s\n","USER","UID"}{printf "%-20s%-10s\n",$1,$3}' /etc/passwd

#取出ip地址
[root@rocky8 ~]#ifconfig eth0|awk 'NR==2{print $2}'

#统计nginx日志中访问次数最多的IP
[root@rocky8 ~]#awk '{print $1}' nginx.log |sort|uniq -c|sort -nr|head -5

#统计nginx日志中各个IP访问的次数
[root@rocky8 ~]#awk '{ip[$1]++} END {for (i in ip)print i,ip[i]}' nginx.log 

#取出磁盘分区利用率
[root@rocky8 ~]#df -h|awk -F " +|%" '/^\/dev\/sd/{print $5}'


posted @   Shine、  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示