第四周作业

2023年 7月 25日 56.3k 0

  • 自定义写出10个定时任务的示例:
    比如每周三凌晨三点执行data命令
    要求尽量的覆盖各种场景
  • 图文并茂说明Linux进程和内存概念
  • 图文并茂说明Linux启动流程
  • 自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
  • 写Linux内核编译安装博客
  • 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。
  • 1、10个定时任务的示例

  • 在1小时后执行一个Shell脚本:
  • echo "/path/to/script.sh" | at now + 1 hour
    
  • 在明天上午10点执行一个命令:
  • echo "your_command" | at 10am tomorrow
    
  • 在特定日期和时间执行一个命令:
  • echo "your_command" | at 2023-07-24 15:30
    
  • 在当前时间的下一分钟执行一个命令:
  • echo "your_command" | at now + 1 minute
    
  • 在工作日的下午4点30分执行一个命令:
  • echo "your_command" | at 4:30pm + weekday
    
  • 在系统重启后执行一个命令:
  • echo "your_command" | at reboot
    
  • 在10分钟后执行一个单行Shell命令:
  • echo "your_command" | at now + 10 minutes
    
  • 在下午3点至5点之间,每隔30分钟执行一次命令:
  • for i in {0..1}; do echo "your_command" | at 3:00pm + $((i * 30)) minutes; done
    
  • 在每个月的1号和15号,上午8点执行一个命令:
  • echo "your_command" | at 8am 1st day
    echo "your_command" | at 8am 15th day
    
  • 在工作日的每个小时的第15分钟执行一个命令:
  • for i in {0..23}; do echo "your_command" | at $i:15am + weekday; done
    

    使用cron计划任务示例:

    crontab -e 编辑任务

  • 在每天的固定时间执行一个命令:
  • 0 12 * * * your_command
    
  • 在每个小时的第15分钟和第45分钟执行两个命令:
  • 15 * * * * your_command_1
    45 * * * * your_command_2
    
  • 在每周一上午10点执行一个命令:
  • 0 10 * * 1 your_command
    
  • 在每月的1号上午3点执行一个命令:
  • 0 3 1 * * your_command
    
  • 每隔5分钟执行一个命令:
  • */5 * * * * your_command
    
  • 在每天的工作时间(上午9点到下午5点)每隔30分钟执行一个命令:
  • */30 9-17 * * * your_command
    
  • 每隔一小时在指定日子执行一个命令:
  • 0 * * * 2,4,6 your_command
    
  • 在每月的第一个星期天执行一个命令:
  • 0 0 * * 0 [ "$(date +%d -d 'last sun')" != "$(date +%d)" ] && your_command
    
  • 在每年的特定日期执行一个命令:
  • 0 12 25 12 * your_command
    
  • 每分钟执行一个随机命令:
  • * * * * * your_command$((RANDOM%10))
    

    2、Linux进程和内存概念

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

    进程具有三种基本状态:

    1、就绪状态。某些进程“万事俱备”(必要资源),只差CPU。(就绪队列)

    2、执行状态。某进程占有CPU并在CPU上执行其程序。

    3、阻塞状态。某些进程由于某种原因不能继续运行下去,等待处 理问题。也称为等待状态或封锁状态。如:请求I/O。(多个等待队列)

    进程具有特征:

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

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

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

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

    image.png

    状态之间转换六种情况

    状态之间转换六种情况

    运行——>就绪:

    1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;

    2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态

    就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU

    运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发 生了I/O请求

    阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列

    以下两种状态是不可能发生的:

    阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取。

    就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

    线程:线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成。

    进程和线程的区别

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

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

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

    3、Linux启动流程

  • 开机自检 (POST, Power On Self Test)
    电脑通电之后,首先加载BIOS(basic input output system,基本输入输出系统)。而BIOS程序首先检查计算机能否满足运行的基本条件,这个叫做“硬件自检(Power On Self Test)”。
  • 主要检查:主板,CPU,内存,磁盘,网卡,声卡,显卡,鼠标,键盘,显示器等

    image.png

    1、开机自检 (POST, Power On Self Test)
    电脑通电之后,首先加载BIOS(basic input output system,基本输入输出系统)。而BIOS程序首先检查计算机能否满足运行的基本条件,这个叫做“硬件自检(Power On Self Test)”。

    主要检查:主板,CPU,内存,磁盘,网卡,声卡,显卡,鼠标,键盘,显示器等

    2、启动顺序
    硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。这是,BIOS需要知道,“下一阶段的启动程序”具体存放在哪个设备里(磁盘,光盘,移动硬盘等)。也就是说,BIOS需要有一个外部存储设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做“启动顺序”(Boot Sequence)

    3、主引导记录 MBR( master boot record)
    主引导记录只有512个字节,位于0柱面,0磁道,1扇区,放不了太多东西。它的主要作用是,告诉计算机到硬盘的那一个位置去找操作系统

    4、启动管理器 Grub
    在这种情况下,计算机读取”主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的”启动管理器”(boot loader),由用户选择启动哪一个操作系统。

    5、 操作系统

    控制权转交给操作系统后,操作系统的内核首先被载入内存。开始运行第一个程序systemd,执行默认target配置文件/etc/systemd/system/default.target

    6、用户登录
    登录shell

    首先读取/etc/profile配置文件,加载/etc/profile.d/*.sh,再去用户的家目录,读取~/.bash_profile,然后去~/.bashrc,最后读取/etc/bashrc。进行初始环境变量

    非登录shell

    首先读取~/.bashrc文件,再读取/etc/bashrc

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

    下图为服务将要运行的脚本代码。目的为自动连接IP地址为10.0.0.131的目的机器,每20秒检查一次/tmp/下文件的个数并将个数打印输出到文件中。
    代码.jpg

    以下为service的内容

    service.jpg

    开启服务,查看服务状态,可以看到服务已被开启。再次查看指定的日志文件就可以看到结果。

    结果图.jpg

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

    下载Linux内核 www.kernel.org/
    将下载的内核包上传到Linux

    image.png
    安装软件包:

    yum -y install gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel bc perl

    解压Linux内核源代码:
    tar xf linux-5.18.9.tar.xz -C /usr/local/src

    进入Linux内核源代码目录:
    cd /usr/local/src/linux-5.18.9

    复制当前内核配置文件:
    cp /boot/config-$(uname -r) .config

    编辑内核配置:
    vim .config

    修改下面三行:

    > # CONFIG_MODULE_SIG=y # 注释此行 
    > CONFIG_SYSTEM_TRUSTED_KEYS="" # 修改此行 #  
    > CONFIG_DEBUG_INFO_BTF=y # 更改内核版本名称
    

    这里列出了三行配置项。第一行CONFIG_MODULE_SIG=y被注释掉,意味着该功能将被禁用。第二行CONFIG_SYSTEM_TRUSTED_KEYS=""被修改为空字符串,可能是为了清除之前的信任密钥配置。第三行CONFIG_DEBUG_INFO_BTF=y的配置被更改为启用某个内核版本名称(此处并没有给出具体的名称)。

    使用make命令编译内核模块:

    make modules_install

    使用make命令安装内核:

    make install

    重新启动系统:

    reboot

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

    AWK是一种强大的文本处理工具,适用于各种情况下的文本处理。以下是5个比较有用的AWK使用场景,并附上相应的案例:

    1.数据提取与过滤:
    使用AWK可以轻松从大量文本数据中提取所需信息或过滤出特定条件的行。例如,假设有一个包含学生信息的CSV文件,我们可以使用AWK提取其中数学成绩大于90分的学生的姓名和成绩:

    cat students.csv | awk -F',' '3 > 90 {print 1, $3}'

    2.数据统计与计算:
    AWK提供了强大的数学计算功能,可以用于对文本数据进行各种统计和计算操作。例如,假设有一个包含销售订单的文本文件,我们可以使用AWK计算总销售额:

    cat sales.txt | awk '{total += $2} END {print "Total Sales: " total}'

    3.格式化输出:
    AWK可以根据需要对输出进行格式化,使数据更易于阅读。例如,假设有一个包含服务器信息的文本文件,我们可以使用AWK按照特定格式输出服务器名称和IP地址:

    cat servers.txt | awk '{printf "Server: %-20s IP: %sn", 1,1, 1,2}'

    4.多文件处理:
    AWK可以同时处理多个文件,并根据需要进行数据合并和分析。例如,假设有两个包含学生数学和英语成绩的文件,我们可以使用AWK计算学生的平均分:

    awk 'FNR==NR {math[1]=1] = 1]=2; next} {print 1,(math[1, (math[1,(math[1] + $2)/2}' math_scores.txt english_scores.txt

    5.文本格式转换:
    AWK可以用于将文本数据从一种格式转换为另一种格式。例如,假设有一个包含逗号分隔的数据文件,我们可以使用AWK将其转换为制表符分隔的格式:

    cat data.csv | awk -F',' '{print 1"t"1 "t" 1"t"2 "t" $3}'

    总之,AWK是一款功能丰富且灵活的文本处理工具,它适用于从简单的数据提取到复杂的文本分析和处理。根据不同的需求,结合AWK的强大功能,可以快速高效地处理文本数据。

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论