第四周作业

1、作业内容(略)

2、作业解答

2.1 自定义写出10个定时任务的示例

复制代码
#crontab定时任务举例
#每一分钟执行一次任务
* * * * *  /command

#每30分钟执行一次任务
0,30 * * * * /command

#每天晚上21点至23点每隔30分钟执行任务
0,30 21-23 * * * /command

#每小时的第10分钟和第40分钟执行任务
10,40 * * * * /command

#每隔2天,晚上20-21点的第15、3555、分钟执行任务
15,35,55 20-21 */2 * * /command

#每周一的上午8-11点的第10、40分钟执行任务
10,40 8-11 * * 1 /command

#每天上午9点-18点执行任务
0 09-18 * * * /command

#每个月5号、15号、25号凌晨1点30分执行任务
30 1 5,15,25 * * /command

#每周六、周日的凌晨4点执行任务
0 4 * * 6,0 /command

#每个月的1号及每周一到周三的早上6点执行任务
0 6 1 * mon-wed /command
复制代码

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

Linux进程可以理解为是一个具有一定独立功能的程序在一个数据集上的一次动态执行过程,是操作系统进行资源分配和调度的独立单位,是应用程序运行的载体。

 

 

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

(1)程序用于描述进程要完成的独立功能,是控制进程执行的指令集;

(2)数据集合是程序在执行时所需要的数据和工作区;

(3)进程控制块PCB包含进程的描述信息和控制信息,是进程存在的唯一标识。

操作系统对每一个进程都进行了描述,进程描述信息形成了一个个的进程控制块(PCB),并将这些信息以双链表的形式组织起来。操作系统上新启动一个进程,实际上是先将该进程的代码和数据加载到内存,然后操作系统对该进程进行描述形成PCB,并将这个PCB插入到双链表中,当这个进程结束运行时,先将该进程的PCB从双链表中删除,然后操作系统在将内存中属于该进程的代码和数据进行释放。

 

 一个进程从创建启动到退出运行的整个生命周期,会经历多种状态,常见的基本状态如下:

 

 

2.3 图文并茂说明Linux启动流程

 

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

复制代码
#在/lib/systemd/system目录创建systemd服务配置文件
[root@centos7 system]#cat checktmp.service 
[Unit]
Description=Check /tmp directory file for changes

[Service]
Type=Simple
TimeoutStartSec=0
ExecStart=/bin/sh -c "/usr/local/services/check_tmp_file.sh"
ExecStop=/bin/kill -s QUIT ${MAINPID}

[Install]
WantedBy=multi-user.target

#激活systemd服务
[root@centos7 system]#systemctl daemon-reload
[root@centos7 system]#systemctl enable --now checktmp
Created symlink from /etc/systemd/system/multi-user.target.wants/checktmp.service to /usr/lib/systemd/system/checktmp.service.
[root@centos7 system]#systemctl status checktmp
● checktmp.service - Check /tmp directory file for changes
   Loaded: loaded (/usr/lib/systemd/system/checktmp.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-12-07 15:56:38 CST; 16s ago
 Main PID: 1982 (check_tmp_file.)
   CGroup: /system.slice/checktmp.service
           ├─1982 /bin/bash /usr/local/services/check_tmp_file.sh
           └─1992 sleep 60

Dec 07 15:56:38 centos7 systemd[1]: Started Check /tmp directory file for changes.

#验证测试
[root@rocky8 tmp]#ll
total 968
-rw-r--r--. 1 root root      0 Dec  7 15:43 11.txt
-rw-r--r--. 1 root root      0 Dec  7 15:45 12.txt
-rw-r--r--. 1 root root      0 Dec  7 15:45 13.txt
-rw-r--r--. 1 root root      0 Dec  7 15:45 14.txt
-rw-r--r--. 1 root root      0 Dec  7 15:39 b.txt
-rw-------. 1 root root 811008 Dec  7 16:00 ccnjAXjv.s
-rw-r--r--. 1 root root      0 Dec  7 15:39 c.txt
-rw-r--r--. 1 root root      0 Dec  7 15:39 d.txt
-rw-r--r--. 1 root root      0 Dec  7 15:39 e.txt
-rwx------. 1 root root    701 Dec  6 09:25 ks-script-32fbzx_f
-rwx------. 1 root root    291 Dec  6 09:25 ks-script-caylgrdo
[root@rocky8 tmp]#touch test01.txt
[root@rocky8 tmp]#touch test02.txt

[root@centos7 log]#tailf check_tmp_file-2022-12-07.log 
2022-12-07 15:59:39 [INFO] Start to check /tmp directory file number on 192.168.100.15 ...
2022-12-07 15:59:39 [INFO] Last 1 min /tmp change files:
-rw-------. 1 root root 0 Dec  7 15:59 /tmp/ccPK9eCh.s
2022-12-07 15:59:40 [INFO] Check /tmp directory file number end ...

2022-12-07 16:00:40 [INFO] Start to check /tmp directory file number on 192.168.100.15 ...
2022-12-07 16:00:40 [INFO] Last 1 min /tmp change files:
-rw-r--r--. 1 root root 0 Dec  7 16:00 /tmp/test01.txt
-rw-r--r--. 1 root root 0 Dec  7 16:00 /tmp/test02.txt
2022-12-07 16:00:40 [INFO] Check /tmp directory file number end ...

#停止systemd服务
[root@centos7 services]#systemctl stop checktmp  
[root@centos7 services]#systemctl status checktmp
● checktmp.service - Check /tmp directory file for changes
   Loaded: loaded (/usr/lib/systemd/system/checktmp.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Wed 2022-12-07 16:03:16 CST; 2s ago
  Process: 2113 ExecStop=/bin/kill -s QUIT ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 1982 ExecStart=/bin/sh -c /usr/local/services/check_tmp_file.sh (code=killed, signal=TERM)
 Main PID: 1982 (code=killed, signal=TERM)

Dec 07 15:56:38 centos7 systemd[1]: Started Check /tmp directory file for changes.
Dec 07 16:03:16 centos7 systemd[1]: Stopping Check /tmp directory file for changes...
Dec 07 16:03:16 centos7 systemd[1]: Stopped Check /tmp directory file for changes.


#附检查脚本
#!/bin/bash
# -------------------------------------------
#Author:     zcloudsre
#Date:       2022-12-07
#FileName:   check_tmp_file.sh
#*********************************************************
HOST=192.168.100.15
USER=root
PASS=123456

while true;do
    echo `date +"%F %T"` [INFO] Start to check /tmp directory file number on $HOST ... >> /var/log/check_tmp_file-`date +%F`.log
    file_num=`sshpass -p $PASS ssh $USER@$HOST "find /tmp -type f -cmin  -1 | wc -l"`
    if [ ${file_num} -ne 0 ];then
        echo `date +"%F %T"` [INFO] Last 1 min /tmp change files: >> /var/log/check_tmp_file-`date +%F`.log
        sshpass -p $PASS ssh $USER@$HOST "find /tmp -type f -cmin  -1 | xargs ls -l" >> /var/log/check_tmp_file-`date +%F`.log
        echo -e `date +"%F %T"` [INFO] Check /tmp directory file number end ..."\n" >> /var/log/check_tmp_file-`date +%F`.log
    fi
    sleep 60;
done
复制代码

2.5 写Linux内核编译安装博客

复制代码
#安装基础工具
yum install -y ncurses-devel openssl-devel elfutils-libelf-devel python3 flex bison perl
#内核升级前版本
[root@rocky8 ~]#uname -r
4.18.0-372.9.1.el8.x86_64

#下载最新版本linux内核包
[root@rocky8 ~]#wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.0.11.tar.xz

#解压linux内核包
[root@rocky8 ~]#tar xf linux-6.0.11.tar.xz 

#配置内核
[root@rocky8 ~]#cd linux-6.0.11/
[root@rocky8 linux-6.0.11]#make menuconfig

#编译内核
[root@rocky8 linux-6.0.11]#make -j4
[root@rocky8 linux-6.0.11]#make modules_install
...
  SIGN    /lib/modules/6.0.11/kernel/sound/x86/snd-hdmi-lpe-audio.ko
  INSTALL /lib/modules/6.0.11/kernel/sound/xen/snd_xen_front.ko
  SIGN    /lib/modules/6.0.11/kernel/sound/xen/snd_xen_front.ko
  INSTALL /lib/modules/6.0.11/kernel/virt/lib/irqbypass.ko
  SIGN    /lib/modules/6.0.11/kernel/virt/lib/irqbypass.ko
  DEPMOD  /lib/modules/6.0.11
[root@rocky8 linux-6.0.11]#make install
  INSTALL /boot
[root@rocky8 linux-6.0.11]#reboot

#检查内核版本
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Wed Dec  7 10:10:23 2022 from 192.168.100.1
[root@rocky8 ~]#uname -r
6.0.11
[root@rocky8 ~]#

#报错问题记录
(1)执行make modules_install报错
sed: can't read modules.order: No such file or directory
make: *** [Makefile:1483: __modinst_pre] Error 2
解决方案:make V=1 all
(2)make[1]: *** No rule to make target 'certs/rocky.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1852: certs] Error 2
解决方案:修改.config文件,将CONFIG_SYSTEM_TRUSTED_KEYS="certs/rocky.pem"修改为CONFIG_SYSTEM_TRUSTED_KEYS=""
(3)Failed to generate BTF for vmlinux
+ echo 'Try to disable CONFIG_DEBUG_INFO_BTF'
Try to disable CONFIG_DEBUG_INFO_BTF
+ exit 1
make: *** [Makefile:1169: vmlinux] Error 1
解决方案:CONFIG_DEBUG_INFO_BTF=y修改为CONFIG_DEBUG_INFO_BTF=n
复制代码

 

 2.6 总结5个比较有用的awk的使用场景

复制代码
#01-提取文本
#示例日志
2022-12-1 NameError
2022-12-2 NameError
2022-12-3 NameError
2022-12-4 NameError
123
456
abc
def
2022-12-5 NameError
2022-12-6 NameError
2022-12-7 NameError
#读取日志文件查找12月4日之后出现NameError的日志记录
[root@centos7 awk]#awk '{if($0~"NameError" && $1 > "2022-12-4") print}' test01.log
2022-12-5 NameError
2022-12-6 NameError
2022-12-7 NameError

#02-获取网卡IP地址
[root@centos7 awk]#ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.11  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::250:56ff:fe3b:8399  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:3b:83:99  txqueuelen 1000  (Ethernet)
        RX packets 4380  bytes 636786 (621.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3192  bytes 672082 (656.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@centos7 awk]#ifconfig eth0 | awk 'NR==2{print $2}'
192.168.100.11

#03-Web网站日志分析
#统计日志中访问量最多的2个源IP
[root@centos7 httpd]#awk '{print $1}' /var/log/httpd/access_log | sort  | uniq -c | sort -k1 -nr | head -n2
     21 192.168.100.15
     14 192.168.100.1
#统计日志中访问量大于20次的源IP
[root@centos7 httpd]#awk '{iplist[$1]++}END{for(num in iplist){if(iplist[num]>20)print num,iplist[num]}}' access_log 
192.168.100.15 21

#04-统计TCP连接状态
[root@centos7 log]#netstat -antp | awk '/^tcp/{arr[$6]++}END{for(state in arr){print arr[state] ":" state}}'
8:LISTEN
1:ESTABLISHED

#05-统计磁盘使用率大于10%
[root@centos7 httpd]#df -hT
Filesystem                Type      Size  Used Avail Use% Mounted on
devtmpfs                  devtmpfs  979M     0  979M   0% /dev
tmpfs                     tmpfs     991M     0  991M   0% /dev/shm
tmpfs                     tmpfs     991M  9.6M  981M   1% /run
tmpfs                     tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root   xfs        50G  2.0G   49G   4% /
/dev/sda1                 xfs      1014M  141M  874M  14% /boot
/dev/md1                  ext4      9.8G  106M  9.1G   2% /backup
/dev/md0                  ext4      9.8G   37M  9.2G   1% /mydata
/dev/mapper/testvg-testlv ext4      2.9G   16M  2.7G   1% /users
/dev/mapper/centos-home   xfs       147G   33M  147G   1% /home
tmpfs                     tmpfs     199M     0  199M   0% /run/user/0
[root@centos7 httpd]#df -hT | awk -F '%' '/^\/dev/{print $1}' | awk '{if($NF>=10) print $1}' 
/dev/sda1
复制代码

 

posted @   zcloudsre  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示