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

    • 每周三凌晨三点执行data命令

      0 3 * * 3 data
      
    • 晚上9点10分运行echo命令,输出信息仍会发送到root邮箱

      10 21 * * *  hchjq /bin/echo "Hello" 
      
    • 每三小时执行echo和wall 命令

      0 */3 * * * hchjq /bin/echo "Hello"; wall "Welcome to alibaba!"
      
    • 每个月周五凌晨12点执行root命令重启服务器

      0 0 * * 5 root
      
    • 每个月的1,10,20,号的17:30重启apache

      30 17 1,10,20 * * systemctl restart httpd
      
    • 每周一到周六的凌晨3点20分,运行tar命令对/etc/目录进行存档,另存位置为/tmp/压缩包名字自定义。

      20 3 * * 1-6 tar -zcf /tmp/hc.tar.gz /etc/
      
    • 10月的每天6-12点直接每隔两小时执行一次/apps/bin/bash.sh

      0 6-12/2 * 10 * /apps/bin/bash.sh
      
    • 8月份的周一,周日凌晨1点10分执行/tmp下的test.sh脚本

      10 1 * 8 * 0,1 /tmp/test.sh
      
    • 在8月内,每天早上6点到12点钟,每隔三个小时执行一次 /usr/bin/backup

      6-12/3 * 8 * /usr/bin/backup
      
    • 每天早上5点到晚上11点之间,每隔一小时,清理一次/var/www/html目录一次

      0 5-23 * * * rm -fr /var/www/html
      
  2. 图文并茂说明Linux进程和内存概念

    进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。
    进程一般由程序、数据集合和进程控制块三部分组成。
    
    线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成。
    
  3. 图文并茂说明Linux启动流程

    Centos 6启动流程
    
    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控制主机
    
    
    grub功能和组成
    
    bootloader:引导加载器,引导程序
    
    Windows:ntloader,仅是启动OS
    
    linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存中的特定空间中,解压,展开,并把系统控制权移交给内核
    
    linux的bootloader
    
    lilo:linux loader,早期的bootloader,功能单一
    
    grub:guand unified bootloader,centos 5,6 grub 0.97:grub legacy,centos 7以后使用grub 2.02
    
    grub启动阶段
    
    primary boot loader
    
    1st stage :MBR的前446个字节
    
    1.5 stage:MBR之后的扇区,让stage1中的BootLoader能识别stage2所在的分区上的文件系统
    
    secondary bootloader:2nd stage,分区文件/boot/grub/
    
    
    centos 7启动流程
    
    1.UEFi或BIOS初始化,运行POST开机自检
    
    2.选择启动设备
    
    3.引导装载程序,centos 7是grub2,加载装载程序的配置文件
    
            /etc/grub.d/
    
            /etc/default/grub
    
            /boot/grub2/grub.cfg
    
    4.加载initramfs驱动模块
    
    5.加载内核选项
    
    6.内核初始化,centos 7使用systemd代替init
    
    7.执行initrd.garget所有单元,包括挂载 /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/下文件的个数,如果发现数量有变化就记录变化情况到文件中。

    • 编辑名为:check_tmp_files.sh的脚本目的为自动连接10.0.0.6的机器,每隔20秒检查一次/tmp/下的文件数量并将变化的情况记录到文件中。

      #!/bin/bash
      remote_server_ip="10.0.0.6"
      log_file="/var/log/tmp_file_count.log"
      current_count=$(sshpass -p "123456" ssh root@"$remote_server_ip" 'ls /tmp/ | wc -l')
      
      while true
      do
              timestamp=$(date "+%Y-%m-%d %H:%M:%S")
              echo "$timestamp File count: $current_count" >> $log_file
              sleep 20
      done
      
      • 下面为自定义service内容:
      [Unit]
      Description=Check /tmp/ directory files count
      
      [Service]
      Type=simple
      ExecStart=/bin/bash -c "bash /root/check_tmp_files.sh"
      
      [Install]
      WantedBy=multi-user.target
      
      • 查看自定义systemd状态并查看指定的日志文件

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

    • https://www.kernel.org 下载linux内核V6.4.7

      • 上传到服务器

      • 安装相关依赖包

        yum -y install gcc make ncurses-devel flex bison openssl-devel
        
      • 解压 linux-6.4.7.tar.xz

        tar xf linux-6.4.7.tar.xz -C /usr/local/src/
        
      • 切换至/usr/local/src/linux-6.4.7目录

        /usr/local/src/linux-6.4.7/
        
      • 复制config文件

        cp /boot/config-$(uname -r) .config
        
      • 修改.config文件

        #CONFIG_MODULE_SIG=y #注释此行
        CONFIG_SYSTEM_TRUSTED_KEYS=""  #修改此行
        #CONFIG_DEBUG_INFO_BTF=y #设置内核参数 
        make menuconfigGeneral setup --> Local version - append to kernel release -->-a-magedu --> savemake -j 2 #多少核就写多少,此处很慢
        make modules_install
        make install
        reboot
        
  6. 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。

    1. 取出网站访问量最大的前三个IP地址

      awk '{print $1}' nginx.access.log | sort | uniq -c | sort -nr |head -3
      
    2. 取出分区利用率

       df | awk -F "[[:space:]]+|%" '{print $5}'
      
    3. 取nginx的访问日志中的IP地址和时间

      awk -F '[[ ]' '{print $1,$5}' /var/log/nginx/access.log
      
    4. awk去重

      awk '!line[$0]++' awk.txt
      
    5. 查看Linux系统每个IP 的连接数

      netstat -n | awk '/^tcp/{print $5}' | awk -F ":" '{print $1}' | sort| uniq -c | sort -nr