第四周作业
1. 自定义写出10个定时任务的示例:
比如每周三凌晨三点执行data命令
要求尽量的覆盖各种场景
#解决 gnome-shell 卡死问题 # echo -e "* * * * 0 root killall -9 gnome-shell" >>/etc/crontab # echo -e "# 每天0点10分执行一次" >>/etc/crontab # echo -e "10 0 * * * root /home/oetsky/data/bin/chpwd" >>/etc/crontab # echo -e "# 每天0点30分执行一次" >>/etc/crontab # echo -e "30 0 * * * oetsky /home/oetsky/data/scripts/mysql_backup.sh" >>/etc/crontab # echo -e "# 每小时执行一次" >>/etc/crontab # echo -e "0 */1 * * * root /home/oetsky/data/scripts/cvt_client_gs.sh" >>/etc/crontab echo -e "# 每分钟执行一次" >>/etc/crontab echo -e "* * * * * root /home/oetsky/data/scripts/change_time_event.sh" >>/etc/crontab echo -e "# 每小时执行一次" >>/etc/crontab echo -e "0 */1 * * * root /home/oetsky/data/scripts/check_system.sh" >>/etc/crontab echo -e "# 每天23:30执行一次" >>/etc/crontab echo -e "30 23 * * * root /home/oetsky/data/scripts/system_log_backup.sh" >>/etc/crontab echo -e "# 每小时执行一次" >>/etc/crontab echo -e "0 0 * * * root /home/oetsky/data/scripts/copy_event.sh" >>/etc/crontab echo -e "# 每分钟执行一次" >>/etc/crontab echo -e "*/1 * * * * root /home/oetsky/data/scripts/cvt_client_power_event.sh" >>/etc/crontab echo -e "# 每8分钟执行一次" >>/etc/crontab echo -e "*/8 * * * * root /home/oetsky/data/scripts/usb-daemon.sh" >>/etc/crontab echo -e "# 每5分钟执行一次" >>/etc/crontab echo -e "*/5 * * * * root /home/oetsky/data/scripts/usb_time_update.sh" >>/etc/crontab
2. 图文并茂说明Linux进程和内存概念
进程概念:进程是一个具有独立功能的程序在一个数据集上一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一个抽象的概念,从来没有统一的标准定义。
进程的组成:进程一般是由程序、数据集合和进程控制块三个部分组成。
内存:是运行进程的空间,CPU待处理的数据和运行的程序暂时存储的空间
3. 图文并茂说明Linux启动流程
Centos 6启动流程
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控制主机
grub功能和组成
bootloader:引导加载器,引导程序
Windows:ntloader,仅是启动OS
linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存中的特定空间中,解压,展开,并把系统控制权移交给内核
linux的bootloader
lilo:linux loader,早期的bootloader,功能单一
grub:guand unified bootloader,centos 5,6 grub 0.97:grub legacy,centos 7以后使用grub 2.02
grub启动阶段
primary boot loader
1st stage :MBR的前446个字节
1.5 stage:MBR之后的扇区,让stage1中的BootLoader能识别stage2所在的分区上的文件系统
secondary bootloader:2nd stage,分区文件/boot/grub/
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/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/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
[root@master01 ~]# vim /data/diff_tmp.sh #!/bin/bash # 自定义检查间隔 TIME="600" # 自定义检查路径 DIR=/tmp CMD1=`ls -l ${DIR} | grep -E '^-' | wc -l && sleep ${TIME}` CMD2=`ls -l ${DIR} | grep -E '^-' | wc -l` NUM1=`echo ${CMD2}-${CMD1} | bc` NUM2=`echo ${CMD1}-${CMD2} | bc` DATE=`date +%F-%T` function diff_tmp { if [ ${CMD1} -gt ${CMD2} ]; then echo "${DATE} - ${DIR} 文件数量:${CMD2},减少了 ${NUM2}" >> /tmp/diff.log elif [ ${CMD1} -lt ${CMD2} ]; then echo "${DATE} - ${DIR} 文件数量:${CMD2},新增了 ${NUM1}" >> /tmp/diff.log else echo "${DATE} - ${DIR} 文件数量:${CMD2},无变化" >> /tmp/diff.log fi } diff_tmp
[root@master01 ~]# vim /lib/systemd/system/diff.service [Unit] Description=diff tmp [Service] ExecStart=/bin/sh /data/diff_tmp.sh ExecStop=/bin/kill -s HUP $MAINPID Restart=always [Install] Wantedby=multi-user.target
# 重载 Service 文件 [root@master01 ~]# systemctl daemon-reload # 启动 Service 服务 [root@master01 ~]# systemctl start diff # 观察结果 [root@master01 ~]# tail -f /tmp/diff.log
5. 写Linux内核编译安装博客
# 添加第三方yum源进行下载安装 [root@linux ~]# yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm # 启动yum源,将[elrepo-kernel]下enabled=0修改为enabled=1 [root@linux ~]# vim /etc/yum.repos.delrepo.repo enabled=1 # 查看可安装内核版本(选做) [root@linux yum.repos.d]# yum list kernel* # 安装内核 [root@linux yum.repos.d]# yum install -y kernel-lt.x86_64 # 重启 [root@linux ~]# reboot # 查看内核版本 [root@linux ~]# uname -r 5.4.209-1.el8.elrepo.x86_64
6. 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。
统计 Nginx 客户端访问最多的 IP
1. awk '{print $1}' /apps/nginx/logs/nginx.access.log # 取第一列 2. sort # 排序 3. uniq -c # 显示每行重复出现的行数 4. sort -nr # 以数字降序排序 5. head -e # 取前三行 [root@master01 ~]# awk '{print $1}' /apps/nginx/logs/nginx.access.log | sort | uniq -c | sort -nr | head -3
取分区利用率最高的三位
[root@master01 ~]# df | awk -F " +|%" '{print $5}' | tail -n +2