第四周作业
#crontab定时任务举例 #每一分钟执行一次任务 * * * * * /command #每30分钟执行一次任务 0,30 * * * * /command #每天晚上21点至23点每隔30分钟执行任务 0,30 21-23 * * * /command #每小时的第10分钟和第40分钟执行任务 10,40 * * * * /command #每隔2天,晚上20-21点的第15、35、55、分钟执行任务 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
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具