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

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

时间:2024-09-08 16:49:58浏览次数:6  
标签:bond0 进阶 IP shel 编程 192.168 地址 ip 进程

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

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 
这样,系统就会在每月月初自动对指定文件进行压缩。

标签:bond0,进阶,IP,shel,编程,192.168,地址,ip,进程
From: https://blog.csdn.net/leexzi/article/details/142029252

相关文章

  • 编程语言
    熟悉编程语言Top50及编程泛型1.python:是一种面向对象、解释型、动态类型计算机程序设计语言2.c:是一门面向过程的、抽象化的通用程序设计语言。3.java:是一门面向对象,解释型(但也需要编译)的编程语言。4.c++:既可C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的......
  • 并发编程数据结构-栈
    并发编程数据结构-栈有锁栈Stack1-基础线程安全栈Stack1是一个简单的线程安全栈实现,使用了std::mutex来保证push和pop操作的原子性。主要特点包括:使用std::lock_guard确保操作期间栈的线程安全。提供了两种push操作(左值引用和右值引用),优化了性能。pop操作抛......
  • shell脚本部署lamp
    [root@node1~]#yum-yinstalllrzsz//先将包文件拖进来[root@node1~]#cd/opt/[root@node1opt]#lsapr-1.7.0.tar.gzapr-util-1.6.1.tar.gzhttpd-2.4.54.tar.gzmysql-5.7.37-linux-glibc2.12-x86_64.tar.gzphp-8.2.5.tar.gz[root@node1~]#cd/[roo......
  • C++ 模板进阶知识——完美转发
    目录C++模板进阶知识——完美转发1.完美转发的步骤演绎完美转发的关键点2.std::forward2.1工作原理2.2重要性3.普通参数的完美转发4.在构造函数模板中使用完美转发范例5.在可变参数模板中使用完美转发范例5.1常规的在可变参模板中使用完美转发5.2将目标函数......
  • Python 语法糖:让编程更简单(续)
    Python语法糖:让编程更简单(续)6.SlicenotationSlicenotation是Python中的一种语法糖,用于从列表或字符串中获取子串或子列表。例如:numbers=[1,2,3,4,5]print(numbers[1:3])#Output:[2,3]这段代码将从numbers列表中获取索引为1到3的子列表。7.f-string......
  • Python编程:探索有趣的代码设计模式
    Python编程是一门广泛应用的技术,无论是在数据分析、人工智能,还是在Web开发中,都扮演着不可或缺的角色。而在编写Python代码的过程中,掌握一些经典的代码设计模式,不仅能够提升编程效率,还能帮助我们更好地理解代码背后的逻辑。今天我们就来聊一聊一些有趣的Python代码设计模式,看看它们......
  • JAVA(十四)类和对象之面向对象编程
    编程的分类按编程风格分类面向过程编程和面向对象编程和面向接口编程1.1面向过程编程过程式编程,也称为命令式编程,是一种编程范式,它依赖于过程调用来实现逻辑。代码按照一定的顺序执行,从而实现功能。在过程式编程中,程序被组织成一系列的过程或函数调用,每个过程都负责执行特......
  • 网络编程(三次握手四次挥手)
    【1】三次握手四次挥手1》三次握手第一次握手都又客户端发起,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。服务器必须准备好接收外来的链接,这通过调用socket、bind和listen函数来完成,称为被动打开。第一次握手:客户通过调用connect函数进行主动打开(a......
  • C语言进阶版第8课—指针(2)
    文章目录1.数组名的理解2.指针访问数组3.一维数组传参本质4.冒泡排序5.二级指针6.指针数组7.指针数组模拟二维数组1.数组名的理解sizeof(数组名)—这里的数组名代表整个数组,计算的也是整个数组的大小&数组名—这里的数组名代表是整个数组,取出的是整个数组......
  • 【AIGC】AI编程工具合集及其特点介绍
    ......