一、shell基础
1.变量命名规则
- 字符限制:只能用字母、数字、下划线,而且不能以数字开头。比如
var123
行,123var
就不行。 - 大小写敏感:
Name
和name
是两个不同变量,使用的时候需要统一风格。 - 避开关键字:像
if
、for
这些 Shell 自带的词,不要用作变量名,容易混乱。
2.不同类型变量的使用
2.1 环境变量
-
作用:全系统通用,当前 Shell 和子 Shell 都能用,适合存全局配置。
-
定义方法:
-
临时用:
export 变量名=值
,比如export PATH=$PATH:/new/dir
(给命令路径加新目录)-
[root@rocky9 ~]# export VAR=test [root@rocky9 ~]# echo $VAR test [root@rocky9 ~]#
-
-
永久生效:写到配置文件里,用户级写
~/.bashrc
,系统级写/etc/profile
,改完用source 文件名
生效。-
[root@rocky9 ~]# ls -a . .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .lesshst .ssh .tcshrc .viminfo web [root@rocky9 ~]# vim .bashrc # 在里面添加了TEST=test [root@rocky9 ~]# source .bashrc [root@rocky9 ~]# echo $TEST test [root@rocky9 ~]#
-
-
-
常用的环境变量:
HOME
(家目录)、USER
(当前用户名)、SHELL
(当前 Shell)。-
[root@rocky9 ~]# echo $HOME /root [root@rocky9 ~]# echo $USER root [root@rocky9 ~]# echo $SHELL /bin/bash [root@rocky9 ~]#
-
-
查看 / 删除:
echo $变量名
查看值,unset 变量名
删除。-
[root@rocky9 ~]# echo $TEST test [root@rocky9 ~]# unset TEST [root@rocky9 ~]# echo $TEST # 删除变量后再次查看时无输出 [root@rocky9 ~]#
-
2.2 位置变量
-
作用:脚本里接收命令行参数,按位置编号,处理外部输入比较方便。
-
主要成员:
-
$0
:脚本文件名(比如./test.sh
中,$0
就是./test.sh
) -
$1~$9
:第 1 到第 9 个参数,第 10 个及以上用${10}
-
$#
:参数总个数;$@
:所有参数(分开显示);$*
:所有参数(合并成一个字符串)
- 例子:写一个脚本
test.sh
:
echo "脚本名:$0"
echo "第2个参数:$2"
echo "共$#个参数"
echo "所有参数:$*"
执行/bin/bash test.sh a b c
,输出:
[root@rocky9 ~]# /bin/bash test.sh a b c
脚本名:test.sh
第2个参数:b
共3个参数
所有参数:a b c
[root@rocky9 ~]#
2.3 只读变量
-
作用:一旦定义就改不了,防止误操作,适合存固定值(比如常量)。
-
定义方法:
-
readonly 变量名=值
,比如readonly PI=3.14
-
先定义再设为只读:
var=10; readonly var
-
-
注意:只读变量删不掉,需要关掉当前 Shell 重开,强行删会报错。
-
[root@rocky9 ~]# readonly PI=3.14 [root@rocky9 ~]# echo $PI 3.14 [root@rocky9 ~]# unset PI -bash: unset: PI:无法取消设定: 只读 variable [root@rocky9 ~]#
2.4 局部变量
-
作用:只在当前环境(或函数内部)有效,出了范围就失效,避免变量污染。
-
定义方法:直接赋值,比如
name="张三"
(当前 Shell 用);函数里用local 变量名=值
(仅限函数内)。 -
例子:写一个脚本
test.sh
:
# 函数内局部变量
func() {
local age=20
echo "函数内:$age"
}
func # 输出20
echo "函数外:$age" # 空的,因为外面访问不到
执行脚本,输出:
[root@rocky9 ~]# /bin/bash test.sh
函数内:18
函数外:
[root@rocky9 ~]#
2.5 状态变量
-
作用:反映命令或脚本的执行状态,判断操作成功与否。
-
最常用的:
$?
(上一条命令的返回值),0 表示成功,非 0 表示失败。 -
用法:
ls /不存在的目录
echo $? # 输出非0(失败)
echo "成功"
echo $? # 输出0(成功)
实践:
[root@rocky9 ~]# ls /xxx
ls: 无法访问 '/xxx': 没有那个文件或目录
[root@rocky9 ~]# echo $?
2
[root@rocky9 ~]# echo "成功"
成功
[root@rocky9 ~]# echo $?
0
[root@rocky9 ~]#
在脚本中,command && echo "成功" || echo "失败"
用于判断:当返回值为0时,执行echo "成功"
;当返回值非0时,执行echo "失败"
。
[root@rocky9 ~]# ls /xxx && echo "成功" || echo "失败"
ls: 无法访问 '/xxx': 没有那个文件或目录
失败
[root@rocky9 ~]#
3.实践
编写一个脚本猜数字,使用判断提示用户比目标数字是大还是小
# 编写脚本 guess_number.sh
#!/bin/bash
# 功能:猜数字,使用判断提示用户比目标数字是大还是小
count=0
number_right=$((RANDOM % 100 + 1))
while [ 1 ]; do
echo -n "请输入数字(范围1-100):"
read number
if ! [[ "$number" =~ ^[0-9]+$ ]]; then
echo "输入无效,请重新输入!"
continue
fi
if [ $number -gt $number_right ]; then
echo "猜大了"
let "count++"
continue
elif [ $number -lt $number_right ]; then
echo "猜小了"
let "count++"
continue
elif [ $number -eq $number_right ]; then
echo "猜对了"
echo "共花了$count次猜对"
break
else
echo "输入非法!"
fi
done
执行:
[root@rocky9 ~]# /bin/bash guess_number.sh
请输入数字(范围1-100):dd^H^H
输入无效,请重新输入!
请输入数字(范围1-100):50
猜小了
请输入数字(范围1-100):70
猜小了
请输入数字(范围1-100):90
猜大了
请输入数字(范围1-100):80
猜小了
请输入数字(范围1-100):85
猜大了
请输入数字(范围1-100):83
猜小了
请输入数字(范围1-100):84
猜对了
共花了6次猜对
[root@rocky9 ~]#
二、网络配置
1.openEuler24.03
1.1 通过配置文件配置网络参数
(1)修改网卡名
# 查看网络信息
[root@openeuler24 ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:c8 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.14/24 brd 10.0.0.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecc8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@openeuler24 ~]#
# 修改网卡配置文件
cd /etc/sysconfig/network-scripts/
ls
[root@openeuler24 ~]# cd /etc/sysconfig/network-scripts/
[root@openeuler24 network-scripts]# ls
ifcfg-ens160
[root@openeuler24 network-scripts]#
# 修改文件名,将ifcfg-ensl60修改成ifcfg-eth0
mv ifcfg-ens160 ifcfg-eth0
[root@openeuler24 network-scripts]# mv ifcfg-ens160 ifcfg-eth0
[root@openeuler24 network-scripts]# ls
ifcfg-eth0
[root@openeuler24 network-scripts]#
# 将文件内的ens160替换成eth0
sed -i 's@ens160@eth0@g' ifcfg-eth0
[root@openeuler24 network-scripts]# sed -i 's@ens160@eth0@g' ifcfg-eth0
[root@openeuler24 network-scripts]#
# 修改grub启动配置文件
vim /ect/default/grub
#修改/etc/default/grub,在GRUB_CMDLINE_LINUX 行后面加上net.ifnames=0
# 即GRUB_CMDLINE_LINUX="... net.ifnames=0"
# 基于UEFI模式引导的系统
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
[root@openeuler24 network-scripts]# grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
# 重启生效
reboot
(2)为 OpenEuler 虚拟机,添加一块vm虚拟网卡 NAT模式
(3)配置
# 进入openEuler的网络配置文件目录
cd /etc/sysconfig/network-scripts/
# 查看配置文件
ls
[root@openeuler24 ~]# cd /etc/sysconfig/network-scripts/
[root@openeuler24 network-scripts]# ls
ifcfg-eth0
[root@openeuler24 network-scripts]#
# 复制配置文件
cp ifcfg-eth0 ifcfg-eth1
[root@openeuler24 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@openeuler24 network-scripts]# ls
ifcfg-eth0 ifcfg-eth1
[root@openeuler24 network-scripts]#
# 编辑复制后的配置文件
vim ifcfg-eth1
# 配置文件的内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=eth0
UUID=e1508c62-e926-4b05-bb82-19043d45bc88
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.14
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.2
# 修改
# 把UUID那一行删去,否则会造成问题
NAME=eth1 # 网卡名
DEVICE=eth1 # 设备名
IPADDR=10.0.0.114 # IP地址
PREFIX=24 # 子网掩码
GATEWAY=10.0.0.2 # 网关
DNS1=10.0.0.2 # DNS服务器地址
(4)验证与应用
# 重启服务
systemctl restart NetworkManager
# 查看设备
nmcli device
[root@openeuler24 network-scripts]# nmcli device
DEVICE TYPE STATE CONNECTION
eth1 ethernet 已连接 eth1
eth0 ethernet 连接(外部) eth0
lo loopback 连接(外部) lo
# 查看网络信息
nmcli connection
[root@openeuler24 network-scripts]# nmcli connection
NAME UUID TYPE DEVICE
eth1 e1508c62-e926-4b05-bb82-19043d45bc88 ethernet eth1
eth0 57aa80fd-e33b-4440-b155-750db88f7ad8 ethernet eth0
lo d636f294-6026-49e3-b878-679a88bfa561 loopback lo
[root@openeuler24 network-scripts]#
# 查看网络信息
ip address
[root@openeuler24 network-scripts]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:c8 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.14/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecc8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:d2 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.114/24 brd 10.0.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecd2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@openeuler24 network-scripts]#
# 验证网络连通性
ping -c 3 www.baidu.com
1.2 通过命令配置网络参数
(1)配置IP地址、子网掩码、网关、DNS、主机名
# 查看网络信息
ip address
[root@openeuler24 network-scripts]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:c8 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.14/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecc8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:d2 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.114/24 brd 10.0.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecd2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@openeuler24 network-scripts]#
# 设置 IP 地址、子网掩码、网关和 DNS
nmcli connection modify eth1 ipv4.addresses "10.0.0.115/24"
nmcli connection modify eth1 ipv4.gateway "10.0.0.2"
nmcli connection modify eth1 ipv4.dns "10.0.0.2"
nmcli connection modify eth1 ipv4.method manual
[root@openeuler24 network-scripts]# nmcli connection modify eth1 ipv4.addresses "10.0.0.115/24"
[root@openeuler24 network-scripts]# nmcli connection modify eth1 ipv4.gateway "10.0.0.2"
[root@openeuler24 network-scripts]# nmcli connection modify eth1 ipv4.dns "10.0.0.2"
[root@openeuler24 network-scripts]# nmcli connection modify eth1 ipv4.method manual
[root@openeuler24 network-scripts]#
# 应用配置
nmcli connection down eth1
nmcli connection up eth1
[root@openeuler24 network-scripts]# nmcli connection down eth1
成功停用连接 "eth1"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
[root@openeuler24 network-scripts]# nmcli connection up eth1
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
# 设置主机名
hostnamectl set-hostname myhost
(2)验证配置
# 查看 IP 配置
ip addr show eth1
# 验证
[root@openeuler24 network-scripts]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:d2 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.115/24 brd 10.0.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecd2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@openeuler24 network-scripts]#
# 查看路由表
ip route
[root@openeuler24 network-scripts]# ip route
default via 10.0.0.2 dev eth0 proto static metric 102
default via 10.0.0.2 dev eth1 proto static metric 103
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.14 metric 102
10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.115 metric 103
[root@openeuler24 network-scripts]#
# 查看 DNS 配置
cat /etc/resolv.conf
# 测试网络连通性
ping -c 3 www.baidu.com
nslookup www.baidu.com
2.Rocky9.5
2.1 通过配置文件配置网络参数
(1)修改网卡名
# 查看网络信息
[root@rocky9 ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:83:4a:54 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 10.0.0.15/24 brd 10.0.0.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe83:4a54/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# 注意:在Rocky9中对于网卡名称标准化不生效,需要手动添加配置文件
# 查看网卡的ID
cat /sys/class/net/ens224/type
# 定制设备关联信息
[root@rocky9 system-connections]# vim /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:0c:29:b1:f4:5e",ATTR{type}=="1",NAME="eth0"
# Rocky9的网络配置文件位于/etc/NetworkManager/system-connections目录中
cd /etc/NetworkManager/system-connections
ls
[root@rocky9 ~]# cd /etc/NetworkManager/system-connections/
[root@rocky9 system-connections]# ls
ens160.nmconnection
[root@rocky9 system-connections]#
# 修改文件名,将ens160.nmconnection修改成eth0.nmconnection
mv ens160.nmconnection eth0.nmconnection
[root@rocky9 system-connections]# mv ens160.nmconnection eth0.nmconnection
[root@rocky9 system-connections]# ls
eth0.nmconnection
[root@rocky9 system-connections]#
# 将文件内的ens160替换成eth0
sed -i 's@ens160@eth0@g' eth0.nmconnection
[root@rocky9 system-connections]# sed -i 's@ens160@eth0@g' eth0.nmconnection
[root@rocky9 system-connections]#
# 修改grub启动配置文件
vim /etc/default/grub
#修改/etc/default/grub,在GRUB_CMDLINE_LINUX 行后面加上net.ifnames=0
# 即GRUB_CMDLINE_LINUX="... net.ifnames=0"
# 基于BIOS模式引导的系统
grub2-mkconfig -o /boot/grub2/grub.cfg
[root@rocky9 system-connections]# grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启生效
reboot
(2)为Rocky9虚拟机添加一块vm虚拟网卡 NAT模式
(3)配置
[root@rocky9 ~]# cd /etc/NetworkManager/system-connections/
[root@rocky9 system-connections]# ls
eth0.nmconnection
# 创建网卡文件
[root@rocky9 system-connections]# cp eth0.nmconnection eth1.nmconnection
# 定制配置
[root@rocky9 system-connections]# vim eth1.nmconnection
[connection]
id=eth1
type=ethernet
autoconnect-priority=-999
interface-name=eth1
[ipv4]
address1=10.0.0.116/24,10.0.0.2
dns=10.0.0.2;
method=manual
# 注意:由于Rocky9中对于网卡名称标准化不生效,需要手动添加配置文件
[root@rocky9 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:83:4a:54 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 10.0.0.15/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe83:4a54/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:83:4a:5e brd ff:ff:ff:ff:ff:ff
altname enp19s0
inet 10.0.0.137/24 brd 10.0.0.255 scope global dynamic noprefixroute ens224
valid_lft 1669sec preferred_lft 1669sec
inet6 fe80::4569:6ba0:bd26:c665/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@rocky9 ~]#
# 查看网卡的ID
cat /sys/class/net/ens224/type
# 定制设备关联信息
[root@rocky9 system-connections]# vim /etc/udev/rules.d/70-persistent-net.rules
# 添加以下信息(注意:网卡名、MAC地址要对应上)
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:0c:29:83:4a:5e",ATTR{type}=="1",NAME="eth1"
(4)生效配置
# 重启
reboot
# 验证
[root@rocky9 ~]# nmcli connection
NAME UUID TYPE DEVICE
eth0 da272748-8d74-3807-ac03-8ef8ea364e2e ethernet eth0
eth1 5eb4da26-5d1d-30a5-8747-80181ed055fa ethernet eth1
lo ce7e94a6-d3a8-49d8-a8dd-8138ccc19809 loopback lo
docker0 2d5117ce-1c4d-4289-a896-9d15a735271c bridge docker0
[root@rocky9 ~]#
[root@rocky9 ~]# nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet 已连接 eth0
eth1 ethernet 已连接 eth1
lo loopback 连接(外部) lo
docker0 bridge 连接(外部) docker0
[root@rocky9 ~]#
[root@rocky9 ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:83:4a:54 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 10.0.0.15/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe83:4a54/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:83:4a:5e brd ff:ff:ff:ff:ff:ff
altname enp19s0
altname ens224
inet 10.0.0.116/24 brd 10.0.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe83:4a5e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@rocky9 ~]#
2.2 通过命令配置网络参数
(1)配置IP地址、子网掩码、网关、DNS、主机名
# 设置 IP 地址、子网掩码、网关和 DNS
nmcli connection modify eth1 ipv4.addresses "192.168.1.10/24"
nmcli connection modify eth1 ipv4.gateway "192.168.1.1"
nmcli connection modify eth1 ipv4.dns "8.8.8.8"
nmcli connection modify eth1 ipv4.method manual
# 应用配置
nmcli connection down eth1
nmcli connection up eth1
[root@rocky9 ~]# nmcli connection down eth1
成功停用连接 "eth1"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
[root@rocky9 ~]# nmcli connection up eth1
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
# 设置主机名
hostnamectl set-hostname myhost
(2)验证配置
# 查看 IP 配置
ip addr show eth1
[root@rocky9 ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:83:4a:5e brd ff:ff:ff:ff:ff:ff
altname enp19s0
altname ens224
inet 192.168.1.10/24 brd 192.168.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe83:4a5e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@rocky9 ~]#
# 查看路由表
ip route
[root@rocky9 ~]# ip route
default via 10.0.0.2 dev eth0 proto static metric 100
default via 192.168.1.1 dev eth1 proto static metric 101
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.15 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 metric 101
[root@rocky9 ~]#
# 查看 DNS 配置
cat /etc/resolv.conf
[root@rocky9 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search 5-0.15
nameserver 10.0.0.2
nameserver 8.8.8.8
[root@rocky9 ~]#
# 测试网络连通性
ping -c 3 www.baidu.com
nslookup www.baidu.com
3.Ubuntu24.04
3.1 通过配置文件配置网络参数
(1)修改主机名
# 查看网络信息
root@ubuntu2404-016:~# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c7:3c:67 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 10.0.0.16/24 brd 10.0.0.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec7:3c67/64 scope link
valid_lft forever preferred_lft forever
root@ubuntu2404-016:~#
# Ubuntu的网络配置文件位于/etc/netplan/目录中
cd /etc/netplan/
ls
root@ubuntu2404-016:~# cd /etc/netplan/
root@ubuntu2404-016:/etc/netplan# ls
50-cloud-init.yaml
root@ubuntu2404-016:/etc/netplan#
# 修改文件名,将50-cloud-init.yaml修改成eth0.yaml
mv ens160.nmconnection.yaml eth0.yaml
root@ubuntu2404-016:/etc/netplan# mv 50-cloud-init.yaml eth0.yaml
root@ubuntu2404-016:/etc/netplan# ls
eth0.yaml
root@ubuntu2404-016:/etc/netplan#
# 将文件内的ens33替换成eth0
sed -i 's@ens33@eth0@g' eth0.yaml
root@ubuntu2404-016:/etc/netplan# sed -i 's@ens33@eth0@g' eth0.yaml
root@ubuntu2404-016:/etc/netplan#
# 修改grub启动配置文件
vim /etc/default/grub
#修改/etc/default/grub,在GRUB_CMDLINE_LINUX 行后面加上net.ifnames=0
# 即GRUB_CMDLINE_LINUX="... net.ifnames=0"
# 更新GRUB配置
root@ubuntu2404-016:/etc/netplan# update-grub
# 重启生效
reboot
(2)为Ubuntu24虚拟机添加一块vm虚拟网卡 NAT模式
(3)配置
# Ubuntu的网络配置文件位于/etc/netplan/目录中
root@ubuntu2404-016:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c7:3c:67 brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 10.0.0.16/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec7:3c67/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:0c:29:c7:3c:71 brd ff:ff:ff:ff:ff:ff
altname enp2s5
altname ens37
root@ubuntu2404-016:~# cd /etc/netplan/
root@ubuntu2404-016:/etc/netplan# ls
eth0.yaml
root@ubuntu2404-016:/etc/netplan# cp eth0.yaml eth1.yaml
root@ubuntu2404-016:/etc/netplan# ls
eth0.yaml eth1.yaml
root@ubuntu2404-016:/etc/netplan# vim eth1.yaml
# Ubuntu 20.04 及以上版本使用 Netplan 来管理网络配置
# 检测
root@ubuntu2404-016:/etc/netplan# nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet unmanaged --
eth1 ethernet unmanaged --
lo loopback unmanaged --
root@ubuntu2404-016:/etc/netplan#
# 如果需要使用nmcli命令,需要使用NetworkManager来管理网络,将配置文件中的renderer填写为NetworkManager
# Ubuntu可能需要手动安装NetworkManager
apt update
apt install network-manager
# 配置示例:
network:
version: 2 # Netplan配置文件的版本号为2
renderer: NetworkManager #
ethernets: # 定义了以太网接口的配置区块
eth1: # 以太网名
addresses:
- "10.0.0.117/24"
nameservers:
addresses:
- 10.0.0.2
# 注意:一台主机上,不要为多个网卡配置default的route
(4)生效配置
root@ubuntu2404-016:/etc/netplan# netplan apply
# 验证
root@ubuntu2404-016:/etc/netplan# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c7:3c:67 brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 10.0.0.16/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec7:3c67/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c7:3c:71 brd ff:ff:ff:ff:ff:ff
altname enp2s5
altname ens37
inet 10.0.0.117/24 brd 10.0.0.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec7:3c71/64 scope link
valid_lft forever preferred_lft forever
root@ubuntu2404-016:/etc/netplan#
root@ubuntu2404-016:/etc/netplan# nmcli connection
NAME UUID TYPE DEVICE
netplan-eth0 626dd384-8b3d-3690-9511-192b2c79b3fd ethernet eth0
netplan-eth1 8bf25856-ca0b-388e-823c-b898666ab9d2 ethernet eth1
lo c05fea19-a3ab-4743-bf56-ddac50a1deab loopback lo
root@ubuntu2404-016:/etc/netplan# nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected netplan-eth0
eth1 ethernet connected netplan-eth1
lo loopback connected (externally) lo
root@ubuntu2404-016:/etc/netplan#
3.2 通过命令配置网络参数
(1)配置IP地址、子网掩码、网关、DNS、主机名
# 设置 IP 地址、子网掩码、网关和 DNS
nmcli connection modify netplan-eth1 \
ipv4.addresses "192.168.1.15/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8" \
ipv4.method manual
# 应用配置
nmcli connection down netplan-eth1
nmcli connection up netplan-eth1
root@ubuntu2404-016:/etc/netplan# nmcli connection down netplan-eth1
Connection 'netplan-eth1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
root@ubuntu2404-016:/etc/netplan# nmcli connection up netplan-eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
root@ubuntu2404-016:/etc/netplan#
# 设置主机名
sudo hostnamectl set-hostname myhost
(2)验证配置
# 查看 IP 配置
ip addr show netplan-eth1
root@ubuntu2404-016:/etc/netplan# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c7:3c:71 brd ff:ff:ff:ff:ff:ff
altname enp2s5
altname ens37
inet 192.168.1.15/24 brd 192.168.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet 10.0.0.117/24 brd 10.0.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec7:3c71/64 scope link
valid_lft forever preferred_lft forever
root@ubuntu2404-016:/etc/netplan#
# 查看路由表
ip route
root@ubuntu2404-016:/etc/netplan# ip route
default via 10.0.0.2 dev eth0 proto static metric 100
default via 192.168.1.1 dev eth1 proto static metric 101
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.16 metric 100
10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.117 metric 101
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.15 metric 101
root@ubuntu2404-016:/etc/netplan#
# 查看 DNS 配置
cat /etc/resolv.conf
# 测试网络连通性
ping -c 3 www.baidu.com
nslookup www.baidu.com
4.命令总结
命令 | 作用 |
---|---|
ip a 或 ip addr | 显示所有网络接口的配置信息 |
nmcli connection 或 nmcli con | 显示网络连接状态 |
nmcli connection up <连接名> | 激活指定网络连接 |
nmcli connection down <连接名> | 停用指定网络连接 |
nmcli connection reload | 重新加载所有网络连接配置文件 |
systemctl restart NetworkManager | 重启 NetworkManager 服务 |
hostnamectl set-hostname <主机名> | 设置永久主机名 |
exec /bin/bash | 使主机名立即生效 |
ping <目标地址> | 测试与目标地址的连通性 |
nslookup <域名> | 查询域名对应的 IP 地址 |
三、CentOS 7 网络配置文件解析
CentOS7使用 /etc/sysconfig/network-scripts/ifcfg-*
配置文件
# 网络接口类型,通常为 Ethernet
TYPE=Ethernet
# 是否在系统启动时自动激活该网络接口
ONBOOT=yes
# 网络接口的名称
NAME=eth0
# 设备名称,与接口名称一致
DEVICE=eth0
# 引导协议,可选值有 none(静态配置)、dhcp(动态获取 IP)
BOOTPROTO=none
# 静态配置时的 IP 地址
IPADDR=192.168.1.10
# 子网掩码
NETMASK=255.255.255.0
# 网关地址
GATEWAY=192.168.1.1
# 主 DNS 服务器地址
DNS1=8.8.8.8
# 备用 DNS 服务器地址
DNS2=8.8.4.4
四、网卡绑定
网卡绑定是将多块物理网卡绑定为一个虚拟网卡(bond 设备),实现高可用(故障自动切换)或负载均衡,支持 7 种模式(如主备、轮询等)。
常用模式
-
mode=0(轮询):流量轮询分配到各网卡,需交换机支持。
-
mode=1(主备):仅主网卡工作,故障时自动切换到备网卡。
1.Rocky 9 配置(主备模式)
- 添加两块仅主机模式的网卡
- 查看连接和设备
nmcli connection
nmcli device
[root@rocky9 ~]# nmcli connection
NAME UUID TYPE DEVICE
eth0 da272748-8d74-3807-ac03-8ef8ea364e2e ethernet eth0
有线连接 1 39f36b8b-02e2-3056-bdc0-c35a262cfb30 ethernet ens256
有线连接 2 bf760555-db08-3866-8e62-5b093f054c9c ethernet ens161
eth1 5eb4da26-5d1d-30a5-8747-80181ed055fa ethernet eth1
lo 11a9588f-d35b-497a-9095-fab1aa943599 loopback lo
[root@rocky9 ~]# nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet 已连接 eth0
ens161 ethernet 已连接 有线连接 2
ens256 ethernet 已连接 有线连接 1
eth1 ethernet 已连接 eth1
lo loopback 连接(外部) lo
[root@rocky9 ~]#
- 创建 bond 设备:
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000" # 主备模式,1秒检测一次链路
- 绑定物理网卡:
nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname ens161 master bond0
nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname ens256 master bond0
nmcli connection # 验证
[root@rocky9 ~]# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"
连接 "bond0" (e6404833-a208-4456-b824-70faf215cf2c) 已成功添加。
[root@rocky9 ~]# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname ens161 master bond0
连接 "bond0-port1" (960f478a-fde3-410b-b5b6-0993bbee16b9) 已成功添加。
[root@rocky9 ~]# nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname ens256 master bond0
连接 "bond0-port2" (ca16c040-64c9-409f-a01d-87e37ce425a6) 已成功添加。
[root@rocky9 ~]# nmcli connection
NAME UUID TYPE DEVICE
eth0 da272748-8d74-3807-ac03-8ef8ea364e2e ethernet eth0
有线连接 1 39f36b8b-02e2-3056-bdc0-c35a262cfb30 ethernet ens256
有线连接 2 bf760555-db08-3866-8e62-5b093f054c9c ethernet ens161
eth1 5eb4da26-5d1d-30a5-8747-80181ed055fa ethernet eth1
bond0 e6404833-a208-4456-b824-70faf215cf2c bond bond0
lo 11a9588f-d35b-497a-9095-fab1aa943599 loopback lo
docker0 f2172c01-21a8-412f-988e-25608da98e08 bridge docker0
bond0-port1 960f478a-fde3-410b-b5b6-0993bbee16b9 ethernet --
bond0-port2 ca16c040-64c9-409f-a01d-87e37ce425a6 ethernet --
[root@rocky9 ~]#
- 配置bond的 IP 并启用:
nmcli connection modify bond0 ipv4.addresses 192.168.8.123/24 ipv4.method manual connection.autoconnect yes
nmcli connection up bond0 # 启用绑定网卡
nmcli connection up bond0-port1 # 启动端口
nmcli connection up bond0-port2 # 启动端口
# 查看生成的配置文件
ls /etc/NetworkManager/system-connections/
# 查看网卡绑定信息
cat /proc/net/bonding/bond0
[root@rocky9 ~]# nmcli connection modify bond0 ipv4.addresses 192.168.8.123/24 ipv4.method manual connection.autoconnect yes
[root@rocky9 ~]# nmcli connection up bond0
连接已成功激活(controller waiting for ports)(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)
[root@rocky9 ~]# nmcli connection up bond0-port1
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/9)
[root@rocky9 ~]# nmcli connection up bond0-port2
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/10)
[root@rocky9 ~]# ls /etc/NetworkManager/system-connections/
bond0.nmconnection bond0-port1.nmconnection bond0-port2.nmconnection eth0.nmconnection eth1.nmconnection
[root@rocky9 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v5.14.0-503.14.1.el9_5.x86_64
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens161
MII Status: up
MII Polling Interval (ms): 1000
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
Slave Interface: ens161
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:83:4a:68
Slave queue ID: 0
Slave Interface: ens256
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:83:4a:72
Slave queue ID: 0
[root@rocky9 ~]#
- 测试故障转移:
ip link set ens161 down # 关闭主网卡
cat /proc/net/bonding/bond0 # 查看是否自动切换到ens256
[root@rocky9 ~]# ip link set ens161 down
[root@rocky9 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v5.14.0-503.14.1.el9_5.x86_64
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens256 # 切换成功
MII Status: up
MII Polling Interval (ms): 1000
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
Slave Interface: ens161
MII Status: down
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:83:4a:68
Slave queue ID: 0
Slave Interface: ens256
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:83:4a:72
Slave queue ID: 0
[root@rocky9 ~]#
2.OpenEuler 配置(主备模式)
- 添加两块仅主机模式的网卡
- 创建 bond 配置文件:
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 <<-EOF
TYPE=Bond
BOOTPROTO=none
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1" # 主备模式,故障时切换MAC
IPADDR=192.168.8.100
PREFIX=24
EOF
- 配置从网卡:
# 查看网络
ip address
[root@openeuler24 ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:c8 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.14/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecc8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:d2 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.115/24 brd 10.0.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe52:ecd2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:e6 brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:52:ec:dc brd ff:ff:ff:ff:ff:ff
[root@openeuler24 ~]#
# 为eth2创建配置
cat > /etc/sysconfig/network-scripts/ifcfg-eth2 <<-EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=eth2
DEVICE=eth2
ONBOOT=yes
MASTER=bond0
SLAVE=yes
EOF
# 为eth3创建配置
cat > /etc/sysconfig/network-scripts/ifcfg-eth3 <<-EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=eth3
DEVICE=eth3
ONBOOT=yes
MASTER=bond0
SLAVE=yes
EOF
- 生效配置:
# 重启网络服务
systemctl restart NetworkManager
# 或重新加载配置
nmcli connection reload
# 验证
[root@openeuler24 network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v6.6.0-28.0.0.34.oe2403.x86_64
Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
Slave Interface: eth2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:52:ec:e6
Slave queue ID: 0
Slave Interface: eth3
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:52:ec:dc
Slave queue ID: 0
[root@openeuler24 network-scripts]#
3.清理环境
还原网络环境
# Rocky9
nmcli connection delete bond0
nmcli connection delete bond0-port1
nmcli connection delete bond0-port2
# Ubuntu
rm -f /etc/netplan/bond0.yaml
netplan apply
# OpenEuler
nmcli conn down bond0 # 停用绑定网卡
nmcli device
rm -rf /etc/sysconfig/network-scripts/ifcfg-{bond0,eth2,eth3} # 删除配置文件
systemctl restart NetworkManager # 重启网络服务
nmcli connection reload # 或重新加载配置
五、使用shell脚本判断主机所在网络内的在线IP
cat > scan_network.sh <<'EOF'
#!/bin/bash
# scan_network.sh
# 获取 IP 和子网掩码
ip=$(ip -4 addr show eth0 | awk '/inet / {print $2}' | cut -d '/' -f 1)
subnet=$(ip -4 addr show eth0 | awk '/inet / {print $2}' | cut -d '/' -f 2)
# 提取网络地址(10.0.0.0)
network=$(ipcalc -s "$ip/$subnet" | awk '/^Network:/ {split($2, arr, "/"); print arr[1]}')
echo "扫描网络: $network/$subnet"
echo "----------------------------"
for i in {1..254}; do
target_ip="${network%.*}.$i" # 确保格式是 10.0.0.1(而不是 10.0.0.0.1)
if ping -c 1 -W 1 "$target_ip" >/dev/null 2>&1; then
echo "$target_ip 在线"
fi
done
echo "----------------------------"
echo "扫描完成"
EOF
[root@openeuler24 ~]# /bin/bash scan_network.sh
扫描网络: 10.0.0.0.0/24
----------------------------
10.0.0.1 在线
10.0.0.2 在线
10.0.0.14 在线
10.0.0.115 在线
----------------------------
扫描完成
[root@openeuler24 ~]#