第四周

1. 通过网络配置命令,让主机可以上网

配置网络需要设置IP地址、子网掩码、网关和DNS服务器。以下是相关命令总结:

# 设置IP地址和子网掩码
ifconfig eth0 10.0.0.10 netmask 255.255.255.0

# 设置默认网关
route add default gw 10.0.0.2

# 设置DNS服务器(编辑 /etc/resolv.conf 文件)
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

# 永久设置主机名
hostnamectl set-hostname rocky

2. 解析 /etc/sysconfig/network-scripts/ifcfg-eth0 配置格式

这是一个网络接口配置文件,以下是常见字段的含义:

BOOTPROTO=static       # 设置为静态IP
IPADDR=10.0.0.100   # IP地址
NETMASK=255.255.255.0  # 子网掩码
GATEWAY=10.0.0.2    # 默认网关
DNS1=8.8.8.8           # 主DNS服务器
DNS2=8.8.4.4            # 备用DNS服务器
ONBOOT=yes              # 系统启动时激活该接口

3. 基于配置文件或命令完成 bond0 配置

bond0 是一个网络绑定接口,用于将多个物理接口绑定在一起,提高带宽和冗余性。以下是配置文件示例:

# /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
IPADDR=10.0.0.100
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
BONDING_OPTS="mode=1 miimon=100"

物理接口配置文件(如 ifcfg-eth0ifcfg-eth1)需要设置 MASTER=bond0SLAVE=yes


4. 通过 ifconfig 命令结果找到 IP 地址

ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | cut -d: -f2

5. 使用脚本判断主机所在网络内在线的主机 IP

#!/bin/bash
for ip in $(seq 1 254); do
    ping -c 1 10.0.0.$ip > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "10.0.0.$ip is online"
    fi
done

6. 使用 while read line/etc/passwd,计算用户 ID 总和

#!/bin/bash
sum=0
while IFS=: read -r user pass uid gid info home shell; do
    sum=$((sum + uid))
done < /etc/passwd
echo "Sum of user IDs: $sum"

7. 总结索引数组和关联数组,字符串处理,高级变量使用及示例

索引数组

#!/bin/bash
arr=(apple banana cherry)
echo "Element at index 1: ${arr[1]}"

关联数组

#!/bin/bash
declare -A assoc
assoc[name]="John"
assoc[age]=30
echo "Name: ${assoc[name]}, Age: ${assoc[age]}"

字符串处理

#!/bin/bash
str="Hello, World!"
echo "Length: ${#str}"
echo "Substring: ${str:0:5}"

高级变量

#!/bin/bash
read -p "Enter your name: " name
echo "Hello, $name"

8. 求 10 个随机数的最大值与最小值

#!/bin/bash
max=-999999
min=999999
for i in $(seq 1 10); do
    num=$((RANDOM % 100))
    echo "Random number: $num"
    if [ $num -gt $max ]; then
        max=$num
    fi
    if [ $num -lt $min ]; then
        min=$num
    fi
done
echo "Max: $max, Min: $min"

9. 使用递归调用,完成阶乘算法实现

#!/bin/bash
factorial() {
    if [ $1 -le 1 ]; then
        echo 1
    else
        local temp=$(( $1 - 1 ))
        local result=$(factorial $temp)
        echo $(( $1 * result ))
    fi
}
echo $(factorial 5)

10. 解析进程和线程的区别?解析进程的结构

进程和线程的区别

  • 进程:是操作系统分配资源的基本单位,拥有独立的内存空间。
  • 线程:是进程内的执行单元,共享进程的内存空间,开销较小。

进程的结构

  • 程序计数器(PC):记录当前执行的指令地址。
  • 寄存器集合:保存线程的上下文信息。
  • 堆栈:用于函数调用和局部变量存储。
  • 内存空间:包括代码段、数据段和堆。

11. 结合进程管理命令,说明进程各种状态

常用进程管理命令

  • ps:显示当前进程状态。
  • top:实时显示系统进程。
  • kill:终止进程。

进程状态

  • R(Running):正在运行或在运行队列中等待。
  • S(Sleeping):处于休眠状态。
  • D(Disk Sleep):不可中断的休眠状态。
  • Z(Zombie):僵尸进程,已终止但父进程尚未读取状态信息。
  • T(Stopped):被停止的进程。

12. 说明 IPC 通信和 RPC 通信实现的方式

IPC 通信

  • 管道(Pipe):用于父子进程或兄弟进程间通信。
  • 消息队列(Message Queue):存储消息的链表,进程通过消息队列发送和接收消息。
  • 共享内存(Shared Memory):允许多个进程共享同一块内存区域。
  • 信号量(Semaphore):用于进程间同步。

RPC 通信

  • 远程过程调用(RPC):客户端通过网络向服务器发送请求,服务器执行请求并返回结果。
  • 实现方式:通过网络协议(如 HTTP、TCP/IP)和序列化技术(如 JSON、XML)实现。

13. 总结 Linux,前台和后台作业的区别,并说明如何在前台和后台中进行状态转换

前台和后台作业的区别

  • 前台作业:与终端交互,阻塞终端。
  • 后台作业:在后台运行,不阻塞终端。

状态转换

  • 将前台作业转为后台:使用 Ctrl+Z,然后 bg
  • 将后台作业转为前台:使用 fg

14. 实现定时任务,每日凌晨 1 点,删除指定文件

# 编辑 crontab 文件
crontab -e

# 添加定时任务
0 1 * * * rm /tmp/text.txt

15. 实现定时任务每月月初对指定文件进行压缩

# 编辑 crontab 文件
crontab -e

# 添加定时任务
0 0 1 * * tar -czf /opt/txt.tar.gz /tmp/txt

16. 通过 Shell 编程完成,30 鸡和兔的头,80 鸡和兔的脚,分别有几只鸡,几只兔?

#!/bin/bash
for chicken in $(seq 0 30); do
    rabbit=$((30 - chicken))
    if [ $((2 * chicken + 4 * rabbit)) -eq 80 ]; then
        echo "Chicken: $chicken, Rabbit: $rabbit"
        break
    fi
done

17. 结合编程的 for 循环,条件测试,条件组合,完成批量创建 100 个用户

#!/bin/bash
for i in $(seq 1 100); do
    if id user$i > /dev/null 2>&1; then
        echo "用户$i已存在."
    else
        useradd $i
        echo "用户$i已添加."
    fi
done

18. 练习题:练习 tophtopiotopiostat 等课程相关工具的使用

top

  • 显示系统进程和资源使用情况。
  • 常用命令:top -u username(显示指定用户的进程)。

htop

  • 更直观的进程管理工具。
  • 支持交互式操作,如杀死进程。

iotop

  • 显示磁盘 I/O 使用情况。
  • 常用命令:iotop -o(仅显示有 I/O 活动的进程)。

iostat

  • 显示 CPU 和磁盘 I/O 使用情况。
  • 常用命令:iostat -x 1(每秒刷新一次详细信息)。
posted @ 2025-03-16 21:23  你好,运维人  阅读(3)  评论(0)    收藏  举报