第四周作业

1. 自定义写出10个定时任务的示例:

SHELL=/bin/bash
PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin/
MAILTO=root

* * * 1-12/3 * rm -rf rubbish    #每三个月删除一次垃圾文件
30 1 * * * cp -a /data/ /backup  #每天1点30备份data内的文件     
15 6 */10 * * ls >> /data/ls.txt #每隔10天6点15执行ls命令
30 8-10/1 * * * ls >> /data/ls.txt;ip a &> /data/ip.log #8点30,9点30,10点30执行ls;ip a命令
* 6-10/2 * * 1,5 data >> /data/data.log #每周1或周五6,8,10点执行date命令 
30 1 * * 6 systemctl restart httpd #每周6的1点30分重启http服务
30 1 * * 0 systemctl stop sshd#每周日1点30分关闭ssh服务
* 6,18 * * 0,1,2 /data/check.sh #每周7或1或周2的6点,18点执行一次check.sh脚本
* 1 * * *  df -Th >> /data/df.log #每隔1小时执行df -Th命令 
18 8 1,10,20 * * ehtool bond0 &> /data/bond.log #每个月的1号10号20号8点18分执行ehtool bond0命令

  

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

进程概念

进程:是运行程序的副本,将程序动态的运行起来,就转成进程,操作系统通过给进程分配资源(如内存空间、文件描述符等)来控制和管理进程的执行,

   包含进程的创建,进程的运行以及进程消亡,确保它们能够正确地完成任务。进程是操作系统分配资源的最小单位

线程:线程是程序执行的最小单位。一个进程由多个线程组成,进程最少只有一个线程

进程一般包含两种:前台进程和后台进程

内存:是运行进程的空间,CPU待处理的数据和运行的程序暂时存储的空间

进程使用问题

1.内存泄漏

指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态

2. 内存溢出

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出,

3. 进程过度分配内存:

进程在运行过程中可能会分配过多的内存资源,超过实际需要的大小。这种情况下,会浪费系统内存资源,并可能导致其他进程无法分配到足够的内存。

4. 内存不足

应用分配内存太少或者用的太多,并且用完没有释放,导致浪费,此时就会造成内存泄漏或溢出

进程状态

R running 状态就是运行状态
S sleeping 状态是睡眠状态(浅度睡眠)又叫可中断睡眠 小s是会话 子进程发起者
D 状态是深度睡眠状态(磁盘休眠)又叫不可中断睡眠
T stopped是暂停状态
t(tracing stop)追踪暂停状态
Z zombie僵尸状态
X 死亡状态
l 多线程

进程优先级

进程优先级是操作系统中用来确定处理器分配时间的重要参数之一。进程优先级较高的进程在竞争处理器资源时会被优先调度,并获得较多的处理器时间。

常见的进程优先级取值范围是0到127,其中0表示最低优先级,127表示最高优先级。

系统优先级: 0-139,数字越小,优先级越高,各有140个运行队列和过期队列

实时优先级:99-0值最大优先级最高,非实时进程优先级低 100-139

nice值: -20到19,对应系统优先级100-139  20以上就是高优先级对应0-99

top:高优先级RT对应0-99值  低优先级0-39  对应100-139

 

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控制主机

CentOS7以后启动流程

(1) UEFi或BIOS初始化,运行POST开机自检

(2) 选择启动设备

(3) 引导装载程序, centos7是grub2,加载装载程序的配置文件:

  /etc/grub.d/

  /etc/default/grub

  /boot/grub2/grub.cfg

(4) 加载initramfs驱动模块

(5) 加载内核选项

(6)内核初始化,centos7使用systemd代替init

(7) 执行initrd.target所有单元,包括挂载/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/下文件的个数,如果发现数量有变化就记录变化情况到文件中。

1.脚本
#!/bin/bash
#vim/data/script/check_tmp.sh
#chmod +x /data/script/check_tmp.sh

#1) 检查远程文件数量
current_count=$(ssh root@192.168.80.101 "ls -1 /tmp/ | wc -l")

# 读取上一次保存的文件数量
last_count=$(cat /data/ceck_tmp/last_count.txt)

# 如果当前数量和上次保存的数量不一致,则记录变化情况到文件中
if [[ $current_count -ne $last_count ]]; then
    date +"%Y-%m-%d %H:%M:%S - File count changed: $current_count" >> /data/ceck_tmp/change_log.txt
fi

# 保存当前文件数量到文件中,以供下次比较
echo "$current_count" &> /data/ceck_tmp/last_count.txt

2.systemd服务
#/lib/systemd/system 
[Unit] Description=check tmp 
[Service] TimeoutStartSec=0 ExecStart=/bin/sh -c "ssh root@192.168.80.101 bash /data/script/check_tmp.sh" #基于key验证 
ExecStop=ps auxf | grep check_tmp.sh |awk '{print $2}' |xargs kill -9 2>/dev/null 
ExecReload=/bin/kill -s HUP $MAINPID 
[Install] Wantedby=multi-user.target 

systemctl daemon-reload 
systemctl enable --now find.service

  


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

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

awk简介

awk就好像一门编程语言,是GNU项目三个人一起写的 a w k 组成awk,也叫gawkAWK 是一种用于文本处理和数据提取的依次查询工具,在 AWK 脚本中,可以使用 BEGIN 和 END 关键字定义在处理输入之前和之后执行的块。BEGIN 块在处理输入之前执行一次。它通常用于初始化变量、打印标题行或执行其他需要在处理输入之前完成的操作。使用 BEGIN 块时,它必须放在 AWK 脚本的开头,并用花括号 {} 包围。

作用:
  • 1、按行查找文件内容
  • 2、模糊过滤文件内容
  • 3、按照列查找文件内容,可以对文件内容取列
  • 4、还可以做数值运算,数值比对,字符串比对
  • 5、支持for循环,while循环,if判断,数组,格式化输出
  • 6、
语法结构:
  awk '找谁{干啥}' file  ( []'' /正则/ {print $1})
   awk '查找' file    没有动作会输出所有的行(对每行进行一个默认的动作处理 输出)
   df -h|awk '查找{干啥}'
#打印 data.txt 文件中包含 “pattern” 的每一行
awk '/pattern/ { print $0 }' data.txt
#先模糊过滤找行“root”,再找以冒号分割最后一列减2 得到倒数第3列 cat /etc/passwd |awk -F: '/root/{print $(NF-2)}'
#取第三四五行的第2列和最后一列 awk 'NR>2&&NR<6{print $2,$NF}' file

#数组: 取反去重
awk {!line[$0]++ ; print $0} file

  

 
 
 
 
 
 
 
 
 
 
 
 
 

posted on 2023-07-12 14:50  老账单  阅读(27)  评论(0)    收藏  举报

导航