第四周作业

目录

1. 自定义写出10个定时任务的示例:比如每周三凌晨三点执行data命令,要求尽量的覆盖各种场景

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

3. 图文并茂说明Linux启动流程

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

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

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


1. 自定义写出10个定时任务的示例:比如每周三凌晨三点执行data命令,要求尽量的覆盖各种场景

#每周工作日1点30到3点30,将/etc备份到/backup目录中,格式是年月日小时,日期是前一天的日期
30 1 * * 1-5  /data/backup.sh
#每两小时取出当前系统/proc/meminfo的S和M开头的信息追加到/tmp/meminfo.txt中
*  */2 * * *  grep '^[S|M]' /proc/meminfo >> /tmp/meminfo.txt
#工作日时间,每十分钟进行一次磁盘检查,如果磁盘大于80,则报警
*/10 * * * 1-5 /data/disk
#每月5号3点查看系统时间
* 3 *  * 5    date
#一月一号四点重启httpd服务
0 4 1  1 *    systemctl  restart httpd
#每月四号和每周一到周三4点重启服务器
0 11 4 * 1-3  shutdown -r --now
#每周1到周6的3点20把/etc打包到/tmp目录下
20 3 * * 1-6 tar -zcf /tmp/etc.gz /etc
每月1号10号22号3点45分把ip地址追加到/data/ip.txt下
45 3 1,10,22 * * hostname -I >>/data/ip.txt
每天5点到11点每隔一小时删除/var/www/html目录的文件
0 5-11 * * *  rm -rf /var/www/html
#每周1到周三8点30分扫描主机端口
30 8 * * * 1-3 /data/scan_hostport.sh

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

Process:运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位

进程号码(Process ID,PID)用来标记各个进程;

UID、GID、SElinux语境决定文件系统存储和访问权限

通常从执行进程的用户继承;

存在生命周期

进程创建:

init第一个进程,从Centos7以后systemd是第一个进程

进程:都是由父进程创建,fork(),父子关系,CoW,Copy On Write

1、进程具有的特征:

动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

并发性:任何进程都可以同其他进程一起并发执行;

独立性:进程是系统进行资源分配和调度的一个独立单位;

结构性:进程由程序、数据和进程控制块三部分组成。

2、进程与线程的区别:

线程是程序执行的最小单位,进程是操作系统分配资源的最小单位;

一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;

进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其他进程不可见;

调度和切换:线程上下文切换比进程上下文切换要快得多。

3、进程的基本状态

创建状态:进程在创建时需要申请一个空白PCB(进程控制块process control block),向其中通信控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法调度运行,把此时进程所处状态称为创建状态

就绪状态:进程已准备好,已分配到所需资源,只要分配到 CPU就能够立即运行

执行状态:进程处于就绪状态被调度后,进程进入执行状态

阻塞状态:正在执行的进程由于某些事件(I/O请求,。申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行

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

 代码段: 用来存放可执行文件的操作指令,也就是说它是可执行程序在内存中的镜像,代码段需要防止在运行时被非法修改,所以只准读取操作,而不允许写入(修改)操作--它是不可写的。

数据段: 用来存放可执行文件中已初始化的全局变量,换句话说就是存放程序静态分配的变量和全局变量

BSS段:Block Started by Symbol 的缩写,意为“以符合开始的块,BSS段包含了程序中未初始化的全局变量,在内存中bss段全部置0

堆(heap): 存放数组和对象,堆是存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

栈(stack): 栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的后进先出特点,所以栈特别方便用来保存/恢复调用现场。可以把堆栈看成一个寄存,交换临时数据的分区。

内存泄漏 Memory Leak

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

内存溢出: Memory Overflow

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

内存不足 : OOM

OOM 即 Out Of Memory "内存用完了",系统会选一个进程将之杀死

3. 图文并茂说明Linux启动流程

centos 6

1.加载BIOS的硬件信息,获取第一个启动设备;

2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息;

GRUB启动阶段:

primary boot loader

1 st stage:MBR前446字节

1.5 stage:MBR之后的扇区,让stage1中的bootloader能识别stage2所在分区上的文件系统;

secondary boot loader :2nd stage,分区文件:/boot/grub/

3.加载kernel,加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备;

kernel自身初始化过程:

(1)探测可识别到的所有硬件设备;

(2)加载硬件驱动程序(借助ramdisk加载驱动)

(3)以只读方式挂载根文件系统

(4)运行用户空间的第一个应用程序: /sbin/init

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

Rocky 8.6

 按下电源通电

1.UEFI或BIOS初始化,运行POST加电自检

2.选择启动设备(光盘或硬盘),

3.引导装载程序,centos 7是grub2,加载装载程序的配置文件;

/etc/grub.d/

/etc/default/grub

/boot/grub2/grub.cfg

4.加载initramfs驱动模块

5.加载内核

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

启动systemd进程,systemd进程此时工作在initramfs环境下

7systemd执行initrd.target所有单元,包括挂载/etc/fstab,

8.从(ramdisk虚根文件系统)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.启动shell进程并初始化,最终进入命令行

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

NU=`ls /tmp/ | wc -l `
while true; do
if [ $NU -gt 8 ];then
echo $NU >> check.txt
fi
sleep 1;
done
~       
[Unit]
Description=check tmp

[Service]
TimeoutStartSec=0
ExecStart=/bin/sh -c "ssh root@10.0.0.7  sh /tmp/check1.sh "
ExecStop=/bin/kill sh
#ExecStop=ps auxf | grep [check].sh | awk '{print $2}' | xargs kill -9  
ExecReload=/bin/kill -s -HUP $MAINPID 
           
[Install] 
WantedBy=multi-user.target
~                           

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

Ubuntu编译内核

1.在www.kernel.org上选择要下载的内核版本

2.解压

tar -xvf linux-5.19.10.tar.xz -C /usr/src/

3.安装依赖库

apt-get update
apt-get install libncurses5-dev #用于menuconfig
apt-get install build-essential openssl
apt-get intall flex
apt-get intall bison
apt-get intall openssl
apt-get intall libssl-dev

4.配置内核编译参数

cd /usr/src/linux-5.19.10
make mrproper
make clean
make menuconfig

5.编译内核

make bzImage

 6.编译和安装modules

make modules
make modules-install

7.安装内核

make install

 8.查看和启动新内核

cp /usr/src/linux-5.19.10/arch/x86/boot/bzImage /boot/
cp /usr/src/linux-5.19.10/System.map /boot/

mkinitramfs 5.19.10 -o /boot/initrd.img-5.19.10

update-initramfs -c -k 5.19.10
update-grub2

cd /boot/grub
gedit grub.cfg

cd
grep menuentry /boot/grub/grub.cfg
gedit /etc/default/grub


update-grub
reboot

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

取出分区利用率
[15:38:35 root@Rocky ~]#df | awk -F' +|%' 'NR>=2{print $(NF-2)}'
0
0
1
0
46
32
1
1
0

[16:12:20 root@Rocky ~]#df | awk -F" +|%" '/^\/dev/{print $(NF-2)}' 
46
32
1

取出IP地址
[15:40:18 root@Rocky ~]#ifconfig eth0 | awk '/netmask/{print $2}'
10.0.0.128

连接数排序
[16:09:07 root@Rocky ~]#ss -ntl | awk -F" +|:" 'NR>=2 && NR<=6{print $4}' | sort | uniq -c | sort -nr
      3 0.0.0.0
      1 192.168.122.1
      1 127.0.0.1


取出/etc/fstab的文件系统
[16:21:37 root@Rocky ~]#cat /etc/fstab | awk '/^\/dev/{print $3}' |sort | uniq -c | sort -nr
      2 xfs
      1 swap

取出/etc/fstab每个单词出现的个数
[17:02:41 root@Rocky ~]#awk -F"[^[:alpha:]]"  '{for(i=1;i<=NF;i++)word[$i]++}END{for(a in word)if(a !="") print a,word[a]}'  /etc/fstab

取出字符串Yd$C@M05MB%9&Bdh5dq+YVixp3vpw的数字
[17:01:09 root@Rocky ~]#echo "Yd$C@M05MB%9&Bdh5dq+YVixp3vpw" | awk '{gsub(/[^0-9]/,"");print $0}'
05953

文件random.txt记录共5000个随机的整数,存储的格式100,50,35,89....请取出其中最大和最小的整数
[17:33:53 root@Rocky ~]#str="";for((i=1;i<=5000;i++));do if [ $i -ne 5000 ];then str+="$RANDOM,";else str+=$RANDOM; fi ; done ;echo $str > random.txt

[17:31:03 root@Rocky ~]#cat random.txt | awk -F, '{max=$1;min=$1;for(i=1;i<=NF;i++){if($i>max){max=$i} else{if($i<min){min=$i}}}}END{print "最大值:"max "最小值:"min}'
最大值:32764最小值:5

将以下内容文件FQDN取出,并根据其计数从大到小排序
http://mail.magedu.com/index.html
http://www.magedu.com/test.html
http://study.magedu.com/index.html
http://blog.magedu.com/index.html
http://www.magedu.com/index.html
http://blog.magedu.com/20080102.html
http://www.magedu.com/images/magedu.jpg
[17:29:15 root@Rocky ~]#cat FQDN.txt | awk -F"/" '{url[$3]++}END{for(a in url)print url[a],a }' | sort -nr
3 www.magedu.com
2 blog.magedu.com
1 study.magedu.com
1 mail.magedu.com

从1加到100求和

[09:48:17 root@Rocky ~]#awk 'BEGIN{i=1;sum=0;while(i<=100){sum+=i;i++}print sum}'
5050

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值