目录
4.自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
6. 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。
1.自定义10个定时任务
#将/etc备份至/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-ddHH.tar.xz”,其中日期是前一天的时间 #!/bin/bash tar Jcvf etcbak-`date -d "1 days ago" +%Y-%m-%d-%H`.tar.xz /etc /backup #取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中 #!/bin/bash awk '/^[S|M]/' /proc/meminfo >> /tmp/meminfo.txt #硬盘使用情况检测脚本 #!/bin/bash warning=80 df|awk -F "[ %]+" '/^\/dev\//{print $5}'|while read use;do [ $use -gt $warning ]&&echo "device will be full,user:${use}%"|mailx -s diskfull root done #清除缓存,避免旧的yum源数据干扰新的软件包安装脚本 #!/bin/bash du -sh /var/cache/dnf | awk -F "M" '{if($1 > 100){print $1}}'&>/dev/null && dnf clean all #检测数据库是否正常,出现异常自动重启 #!/bin/bash mysqladmin -uroot -p123456 ping || systemctl start mysql #计划任务 SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #工作日1点30分把/etc备份到/backup 30 1 * * 1-5 /data/scripts/backup.sh #每两个小时取出/proc/meminfo到/tmp/meminfo * */2 * * * /data/scripts/get_info.sh #工作日每十分钟检测一次硬盘 */10 * * * 1-5 /data/scripts/disk_check.sh #工作日9点30分检测缓存 30 9 * * 1-5 /data/scripts/cache_check.sh #12月每天的6点8点10点12点整执行text.sh 0 6-12/2 * 12 * /data/scripts/text1.sh #每月1日10日20日或者周六日2点每隔10分钟执行一次 */10 2 1,10,20 * 0,6 /data/scripts/text2.sh #每隔10分钟检查一次数据库,出现异常重启服务 */10 * * * * /data/scripts/mysql_check.sh
2.图文并茂说明Linux进程和内存概念
什么是进程?
进程:磁盘文件加载到内存中的一个副本,占内存空间。是资源分配的单元。如果一个程序在系统中运行多次,那就是多实例。
什么是线程?
线程:线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一 个进程可以有一个或多个线程。
怎么判断是单线程还是多线程?
(1)种方法:
(2)种方法:
[root@Rocky8 ~]# cat /proc/1030/status Threads: 5 #5个线程
怎么找到一个进程对应的磁盘文件?
[root@Rocky8 ~]#ll /proc/901/exe lrwxrwxrwx 1 root root 0 Dec 5 11:42 /proc/901/exe -> /usr/sbin/sssd
进程使用内存问题
内存泄漏:指应用程序申请了一块内存空间,使用完后并没有及时用free或delete将内存释放,导致这块内存一直处于占用状态。
内存溢出:指应用程序申请了10M空间,但是在这个空间写入了10M以上字节的数据,这就是溢出。
内存不足:“内存用完了”,系统会选一个进程将之杀死, 在日志messages中看到类似下面的提示
Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child
进程更多状态
运行态(R):running
就绪态:ready
睡眠态:可中断S(interruptable);不可中断D(uniterruptable)
停止态(T):stopped
僵死态(Z):父进程由于某些原因无法处理子进程,导致子进程出现僵死态。杀死父进程或恢复父进程就可以关闭僵死态的子进程了。
孤儿进程:子进程在退出前,父进程先退出,这是子进程成为孤儿进程。孤儿进程就会被systemd回收成为它的子进程。注意:孤儿进程还会继续运行,而不会随父进程退出而终止,只不过其父进程发生了改变。
查找正在运行的进程编号:pidof process
负载查询:uptime;平均负载(1,5,15分钟的平均负载)
显示cpu相关统计:mpstat
查看进程实时状态:top和htop
内存空间 free
进程对应的内存映射:pmap
虚拟内存信息:vmstat
统计CPU和设备IO信息:iostat
显示网络带宽使用情况:iftop
查看网络实时吞吐量:nload
查看进程网络宽带的使用情况:nethogs
系统资源统计:dstat
查看进程打开文件:lsof
3.图文并茂说明Linux启动流程
4.自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
5. 写Linux内核编译安装博客
6. 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。
(1)从大到小取出磁盘使用率
[root@Rocky8 ~]#df|awk -F "[ %]+" '/^\/dev\//{print $(NF-1)}'|sort -nr 21 4 1
[root@Rocky8 ~]#df|awk -F "[ %]+" '/^\/dev\//{print $5}'|sort -nr 21 4 1
(2)取出IP 地址和网段
[root@Rocky8 ~]#ip address show eth0|awk 'NR==3{print $2}' 10.0.0.128/24
[root@Rocky8 ~]#ip address show eth0|awk -F "[ /]+" 'NR==3{print $3}' 10.0.0.128
[root@Rocky8 ~]#IP=`ip address show eth0|awk 'NR==3{print $2}'` [root@Rocky8 ~]#Net_sgt=${IP:0:6} #也可用[root@Rocky8 ~]#Net_sgt=${IP%.*} [root@Rocky8 ~]#echo $Net_sgt 10.0.0
(3)计算1+..100的总和
[root@Rocky8 ~]#awk -v sum=0 'BEGIN{for(i=0;i<=100;i++){sum+=i}print sum}' 5050
[root@Rocky8 ~]#awk -v sum=0 -v i=0 'BEGIN{while (i<=100){sum+=i;i++}print sum}' 5050
(4)统计ss -ntl中state状态出现的次数
[root@Rocky8 ~]#ss -ntl|awk 'NR!=1{print $1}'|uniq -c|tr -s ' ' 4 LISTEN
[root@Rocky8 ~]#ss -ntl|awk 'NR>=2{state[$1]++}END{for(i in state){print state[i],i}}' 4 LISTEN