网络属性及相关配置工具\shel脚本编程-进阶 \进程-系统性能和计划任务

一、通过网络配置命令让主机上网

1. 查看网络接口信息:
   - `ip a`或者`ifconfig`显示系统中所有网络接口的详细信息,包括 IP 地址、子网掩码、MAC 地址等。
2. 配置 IP 地址、子网掩码、网关和 DNS:
   - IP 地址:使用`ifconfig`或`ip a a`命令来设置 IP 地址。例如,`ifconfig eth0 192.168.1.100 netmask 255.255.255.0`设置 eth0 接口的 IP 地址为 192.168.1.100,子网掩码为 255.255.255.0。
   - 子网掩码:在设置 IP 地址时同时指定子网掩码,如上述命令中的`netmask 255.255.255.0`。
   - 网关:编辑`/etc/sysconfig/network`文件,添加`GATEWAY=192.168.1.1`来设置网关地址。
   - DNS:编辑`/etc/resolv.conf`文件,添加`nameserver 8.8.8.8`来设置 DNS 服务器地址。
3. 设置主机名:
   - 使用`hostnamectl set-hostname Rocky`命令来设置主机名,其中`Rocky`为新的主机名。
   在NAT模式下指定网关可通过宿主机访问互联网

二、解析/etc/sysconfig/network-scripts/ifcfg-eth0 配置格式

/etc/sysconfig/network-scripts/ifcfg-eth0 是 Linux 系统中网络接口的配置文件,常见的配置项如下:

- `DEVICE`:eth0  网络接口名称,如 eth0。
- `BOOTPROTO`:none 启动协议,可选值有`static`(静态 IP)、`dhcp`(动态获取 IP)等。
- `IPADDR`:192.168.1.100  IP 地址。
- `NETMASK`:255.255.255.0 子网掩码。
- `GATEWAY`:192.168.1.1   网关地址。
- `DNS1`、`DNS2`  8.8.8.8  114.114.114.114  等:DNS 服务器地址。
- `ONBOOT`:yes 是否在系统启动时激活该网络接口,可选值为`yes`或`no`。

三、基于配置文件或命令完成 bond0 配置

1. 使用配置文件:
   - 创建 bond0 的配置文件`/etc/sysconfig/network-scripts/ifcfg-bond0`
     
     DEVICE=bond0
     BOOTPROTO=none
     IPADDR=192.168.1.100
     NETMASK=255.255.255.0
     GATEWAY=192.168.1.1
     ONBOOT=yes
     USERCTL=no
     BONDING_OPTS="mode=1 miimon=100"
   
   - 其中`mode=1`表示主备模式,`miimon=100`表示每 100 毫秒检查一次链路状态。
   - 然后在每个物理接口的配置文件(`ifcfg-eth1`和`ifcfg-eth2`)中添加以下内容:
 
     DEVICE=eth1/eth2
     BOOTPROTO=none
     ONBOOT=yes
     MASTER=bond0
     SLAVE=yes
   
2. 使用命令:
   - 安装 bonding 模块:`modprobe bonding`。
   - 创建 bond0:`ip link add bond0 type bond`。
   - 设置 bond0 的 IP 地址等参数:`ip addr add 192.168.1.100/24 dev bond0`。
   - 激活 bond0:`ip link set bond0 up`。
   - 将物理接口添加到 bond0:`ip link set eth1 master bond0`和`ip link set eth2 master bond0`。
   - 设置 bonding 模式:`echo "mode=1 miimon=100" > /sys/class/net/bond0/bonding/mode`。

四、通过 ifconfig 命令结果找到 IP 地址

执行`ifconfig`命令后,输出中会显示每个网络接口的信息


eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe00:0  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 1234  bytes 123456
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 123  bytes 12345
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


其中`inet`后面的地址就是该接口的 IP 地址,在这个例子中,eth0 的 IP 地址是 192.168.1.100。

五、使用脚本判断主机所在网络内在线的主机 IP 有哪些


#!/bin/bash

network=$(ip addr show | grep "inet " | awk '{print $2}' | cut -d '/' -f 1 | cut -d '.' -f 1-3).0/24

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


六、使用 while read line 和 /etc/passwd,计算用户 ID 总和

#!/bin/bash

sum=0
while read line; do
    uid=$(echo $line | cut -d ':' -f 3)
    sum=$((sum + uid))
done < /etc/passwd

echo "Total user ID sum: $sum"


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

1. 索引数组:
   定义:索引数组是一种以数字为索引的数组。在 Bash 中,可以使用`declare -a`来声明一个索引数组。
  
     declare -a numbers=(1 2 3 4 5)
     echo ${numbers[0]} # 输出 1
     ```
2. 关联数组:
   定义:关联数组是一种以字符串为索引的数组。在 Bash 中,可以使用`declare -A`来声明一个关联数组。
   
     declare -A colors
     colors["red"]="FF0000"
     colors["green"]="00FF00"
     echo ${colors["red"]} # 输出 FF0000
     ```
3. 字符串处理:
   - 截取字符串:可以使用`${string:start:length}`来截取字符串。例如,`${string:3:5}`表示从字符串的第 3 个字符开始截取 5 个字符。
   - 查找字符串:可以使用`expr index "$string" "$substring"`来查找子字符串在字符串中的位置。如果子字符串不存在,则返回 0。
   - 替换字符串:可以使用`${string/substring/replacement}`来替换字符串中的子字符串。例如,`${string/old/new}`表示将字符串中的`old`替换为`new`。
4. 高级变量使用:
   - 变量间接引用:可以使用`${!varname}`来间接引用变量。例如,如果有一个变量`name=value`,那么`${!name}`将输出`value`。
   - 变量扩展:可以使用`${var:-default}`来在变量未定义或为空时使用默认值。例如,如果变量`var`未定义,那么`${var:-default_value}`将输出`default_value`。

八、求 10 个随机数的最大值与最小值

#!/bin/bash

declare -a numbers

for ((i = 0; i < 10; i++)); do
    numbers[$i]=$((RANDOM % 100))
done

echo "Generated numbers: ${numbers[@]}"

max=${numbers[0]}
min=${numbers[0]}

for num in "${numbers[@]}"; do
    if [ $num -gt $max ]; then
        max=$num
    fi
    if [ $num -lt $min ]; then
        min=$num
    fi
done

echo "Maximum number: $max"
echo "Minimum number: $min"


九、使用递归调用,完成阶乘算法实现

#!/bin/bash

factorial() {
    local n=$1
    if [ $n -eq 0 ]; then
        return 1
    else
        local result=$((n * $(factorial $((n - 1)))))
        return $result
    fi
}

read -p "Enter a number: " num
result=$(factorial $num)
echo "Factorial of $num is $result"
```

十、解析进程和线程的区别?解析进程的结构

1. 进程和线程的区别:
   - 定义:进程是程序的一次执行过程,它拥有自己的地址空间、内存、数据栈等资源。线程是进程中的一个执行单元,它共享进程的地址空间和资源,但有自己的程序计数器、栈和寄存器等。
   - 资源占用:进程占用的资源比线程多,因为每个进程都有自己独立的地址空间和资源。线程共享进程的资源,因此创建和切换线程比进程更高效。
   - 并发性:多个进程可以在同一时间并行执行,而多个线程可以在同一进程中并发执行。
   - 通信方式:进程之间的通信通常需要使用进程间通信机制,如管道、消息队列、共享内存等。线程之间可以直接访问共享的内存和变量,通信更加方便。
2. 进程的结构:
   - 进程控制块(PCB):包含了进程的状态信息、优先级、资源分配情况等。
   - 代码段:存储程序的指令。
   - 数据段:存储程序的数据。
   - 堆:动态分配的内存区域。
   - 栈:存储函数调用的栈帧和局部变量。

十一、结合进程管理命令,说明进程各种状态

在 Linux 中,可以使用`ps`命令查看进程状态。常见的进程状态有:

- `R`(Running):正在运行或可运行状态,表示进程正在 CPU 上执行或等待被调度执行。
- `S`(Sleeping):睡眠状态,表示进程在等待某个事件发生,如等待 I/O 操作完成、等待信号等。
- `D`(Disk Sleep):不可中断的睡眠状态,通常是在等待 I/O 操作完成,并且不能被信号中断。
- `Z`(Zombie):僵尸状态,表示进程已经结束,但它的父进程还没有回收它的资源。
- `T`(Stopped):停止状态,表示进程被暂停,通常是通过信号或调试器暂停的。

执行`ps aux`命令可以查看系统中所有进程的详细信息,包括进程状态。

十二、说明 IPC 通信和 RPC 通信实现的方式

1. IPC(Inter-Process Communication,进程间通信):
   - 管道(Pipe):一种半双工的通信方式,只能在有亲缘关系的进程之间使用。
   - 命名管道(Named Pipe):可以在无亲缘关系的进程之间使用,它在文件系统中有一个名称。
   - 消息队列(Message Queue):是一种消息的链表,进程可以向消息队列中发送消息,也可以从消息队列中接收消息。
   - 共享内存(Shared Memory):多个进程可以共享一块内存区域,从而实现快速的数据交换。
   - 信号量(Semaphore):用于协调多个进程对共享资源的访问,防止出现竞争条件。
2. RPC(Remote Procedure Call,远程过程调用):
   - RPC 框架通常提供了一种机制,使得一个进程可以调用另一个进程中的函数,就像调用本地函数一样。常见的 RPC 框架有 gRPC、Thrift 等。
   - RPC 实现的方式通常包括以下几个步骤:
     - 定义远程过程的接口和参数。
     - 在客户端和服务器端分别实现这些接口。
     - 使用 RPC 框架将客户端的请求发送到服务器端,并接收服务器端的响应。

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

1. 前台和后台作业的区别:
   - 前台作业:在前台运行的作业会占用终端,用户可以直接与作业进行交互。例如,执行一个命令并等待其输出。
   - 后台作业:在后台运行的作业不会占用终端,用户可以继续在终端上执行其他命令。后台作业通常在命令后面加上`&`符号来启动。
2. 状态转换:
   - 将前台作业切换到后台:可以使用`Ctrl+Z`暂停前台作业,然后使用`bg`命令将其切换到后台运行。
   - 将后台作业切换到前台:使用`fg`命令可以将后台作业切换到前台运行。

十四、实现定时任务,每日凌晨 1 点,删除指定文件

可以使用`crontab`来设置定时任务。以下是设置每日凌晨 1 点删除指定文件的步骤:

1. 打开终端,输入`crontab -e`编辑 crontab 文件。
2. 在文件中添加一行:`0 1 * * * rm /root/abc.txt`,其中`/root/abc.txt`是要删除的文件的路径。
3. 保存并退出文件。

这样,系统就会在每天凌晨 1 点自动删除指定文件。

十五、实现定时任务每月月初对指定文件进行压缩*

1. 打开终端,输入`crontab -e`编辑 crontab 文件。
2. 在文件中添加一行:`0 0 1 * * tar -czf /root/abc.tar.gz 
这样,系统就会在每月月初自动对指定文件进行压缩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值