Linux系统运维相关命令实践(四)
网络管理续
网卡改名
openeuler
1.先查看ip a | egrep 'mtu|scope'

2.修改网卡配置文件
cd /etc/sysconfig/network-scripts/
mv ifcfg-ens160 ifcfg-eth0
sed -i 's@ens160@eth0@g' ifcfg-eth0

3.修改grub配置文件
vim /etc/default/grub
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0 biosdevname=0"
net.ifnames=0:关闭系统的 “可预测网卡命名” 功能
biosdevname=0:关闭 BIOS 提供的设备命名规则
两个一起加上,系统才会放弃 ens160 这种名字,改用 eth0。
4.重读配置文件并重启

网卡属性定制
(rocky+)
准备工作,为rocky10虚拟主机添加一块VM虚拟网卡,设置为NAT模式
接着打开,检查网卡名称 ip a | grep mtu

2.查看网卡id
cat /sys/class/net/ens224/type

3.定制设备关联信息,增加一条记录,
vim /etc/udev/rules.d/70-persistent-net.reles
cat /etc/udev/rules.d/70-persistent-net.reles

4.定制配置文件
创建网卡文件
cd /etc/NetworkManager/system-connections/
![]()
cp ens160.nmconnection eth1.nmconnection

定制配置
cat eth1.nmconnection

vim eth1.nmconnection

重启生效

网卡生效
准备再添加一块虚拟网卡,NAT模式
检查网卡名称
ip -a | tail -3

查看设备现状
nmcli con

定制设备关联信息
cd /etc/NetworkManager/system-connections/
查看设备信息
nmcli device

查看配置ls

定制配置
cat ens256.nmconnection
vim ens256 nmconnection

重载配置
nmcli conn down ens256


网络命令:
hostname(查看 / 设置主机名)
hostname:显示主机名

显示ip地址,会卡一会,要通过dns反解主机名 hostname -i

显示所有ipv4地址 hostname -I

临时定制主机名 hostname ubuntu-test

立刻生效 exec /bin/bash,重启后生效reboot
![]()
从文件中读取

设置主机名hostnamectl 永久设置

恢复原来的名字

ifconfig( 查看 / 配置网卡 IP、子网、网关)

route( 查看 / 配置路由表 )

netstat( 查看网络连接、端口和路由统计 )

ip link( 管理 / 查看网卡设备状态(开关、属性) )

ip addr( 查看 / 配置网卡 IP 地址信息。 )

ip route( 查看 / 配置路由表 )

ss( 查看网络连接(比 netstat 快) )

nmcli( NetworkManager 命令行工具,管理网卡 / 网络 )

ping( 测试网络连通性 ) 仅主机模式

连接网

fping( 批量 ping 多台主机,检测连通性 )

curl( 获取 / 发送网页数据,测试链接)

wget( 下载文件 )

tcpdump( 抓包,分析网络流量 )

traceroute( 追踪数据包路由路径 )

tracepath( 功能同 traceroute,无需特权,追踪路由 )

mtr( ping+traceroute 结合,实时链路诊断 )

nmap( 扫描主机 / 端口,探测网络服务 )

nc( 网络调试工具,监听 / 传输数据 )

shell编程进阶
循环语法:for、while、until
循环控制:break、continue、exit
函数:
定义函数、传参函数、函数调用、函数传参、脚本传参
函数体里面的变量 local
linux 启动
- -- linux 启动开机加电自检(BIOS检测硬件,确认CPU,内存,硬盘等正常)
- -- 系统引导(读取硬盘引导区,定位操作系统)
- -- grub 启动(显示系统选择菜单,加载Linux内核)
- -- linux 内核管理(初始化硬件,加载驱动,挂载根文件系统)
- -- 1 号进程(systemd,系统第一个进程,创建左右后续进程,启动系统服务)
- -- 系统初始化(加载系统配置和环境变量)
- -- 服务运行级别(设定系统 工作模式,启动对应服务)
- -- 隐藏 - 系统启动自定义收尾动作(后台完成系统底层初始化)
- -- 登录(进入终端或图形界面,等待使用)
dns 解析
定位:域名 ->ip(方便人类记忆域名,设备依靠IP完成网络通信)
域名:
FQDN(完全合格域名,完整全网唯一域名)
主机名(区分服务器,代表具体设备)
二级域(企业或个人注册的专属域名)
顶级域(域名末尾标识,如com,cn)
根域(域名最顶层,所有域名的源头)
根服务器:域名解析最顶层服务器
ipv4(13组根服务器)、ipv6【25组根服务器】
域名解析流程:
递归查询:域名(发起解析请求) - 缓存(查询本机DNS缓存) - hosts(匹配本地静态映射文件)-localDNS(请求本地域名服务器解析)
迭代查询:localDNS - 先访问根域服务器,localDNS - 根域指引访问顶级域服务器、localDNS - 顶级域指引访问二级域服务器
配置流程:
主配置文件(控制DNS服务全局参数)
->zone 配置文件(定义域名区域信息)
->db 存放具体域名与数据记录解析规则文件
解析记录类型:
SOA(起始授权记录,标识区域管理信息)
NS(域名服务器记录,指定DNS服务器)
A(将域名解析为IPV4地址)
AAAA(将域名解析为ipv6地址)
PTR(反向解析,IP解析为域名)
CNAME(别名记录,域名跳转)
SRV (服务定位记录,标记服务端口与地址)
实践
dns 主从
主服务器(10.0.0.13)配置步骤
-
确认工作目录:
head -n2 /etc/bind/named.conf.options

-
编辑区域配置:
vim /etc/bind/named.conf.local,写入主服务器 zone 配置

-
创建并编辑正向区域文件:
vim /var/cache/bind/db.magedu.com,写入解析规则

-
语法检查:
named-checkzone magedu.com /var/cache/bind/db.magedu.com

-
重启服务:
named-checkconf && systemctl restart bind9

-
验证服务状态:
systemctl status bind9

从服务器(10.0.0.16)配置步骤
-
编辑区域配置:
vim /etc/bind/named.conf.local,写入从服务器 zone 配置

-
创建同步目录并授权:
mkdir -p /var/cache/bind/slaves && chown bind:bind /var/cache/bind/slaves

-
语法检查与服务重启:
named-checkconf && systemctl restart bind9

-
验证同步结果:
ls /var/cache/bind/slaves/,看到db.magedu.com文件即同步成功

-
解析测试:
nslookup dns1.magedu.com 127.0.0.1,成功解析到10.0.0.13即配置完成

dns 转发
主 DNS 服务器:10.0.0.15(Rocky)
-
安装 bind 服务及工具yum install -y bind bind-utils

- 查看 named 系统所属组,确认权限getent group named

新建正向解析数据文件touch /var/named/db.golang-magedu.com
设置解析文件权限为 640chmod 640 /var/named/db.golang-magedu.com
恢复文件 SELinux 安全上下文restorecon -v /var/named/db.golang-magedu.com

编辑正向解析文件,添加域名 A 记录vim /var/named/db.golang-magedu.com

检查解析区域配置是否正确named-checkzone golang-magedu.com /var/named/db.golang-magedu.com

重启 named 服务,加载配置systemctl restart named
![]()
查看 named 服务运行状态systemctl status named

问题===========================


关闭防火墙systemctl stop firewalld
临时关闭 SELinuxsetenforce 0

转发客户端操作ubuntu-13:
测试与主 DNS 服务器网络连通性ping 10.0.0.15

编辑系统 DNS 配置文件,指定上游 DNSvim /etc/systemd/resolved.conf

配置DNS转发 vim /etc/named.conf


重启系统解析服务,使配置生效systemctl restart systemd-resolved
![]()
指定主 DNS 地址,测试 DNS 转发解析nslookup www.golang-magedu.com 10.0.0.15



问: TCP/UDP 的 53 端口干什么的?
TCP【主从同步用的】、UDP【对外 dns 解析用的】
CDN 和网络通信安全
1 CDN
定位: 内容分发网络,就近缓存静态资源,提升访问速度、减轻源站压力。
2 网络通信安全
通信安全里面三大算法:对称加密【效率高】、非对称加密【身份认证】、单向加密算法【数据完整性】
通信的安全:多种算法的组合
落地方式:SSL/TLS 依靠 CA 体系,通过证书实现加密通信和身份认证。
自建 CA 步骤
1 CA 创建【私钥、公钥】
2 服务端操作【私钥创建 .key、签名请求创建 .csr】
3 CA 签发证书【生成证书 .crt | .pem】
https 定位:http + ssl/tls(加密版 HTTP,安全传输)
3 ssh
定位:安全的 shell(安全远程登录工具)
功能:远程登录【ssh root@10.0.0.13】
远程执行【ssh root@10.0.0.13 "cmd"】
远程传输【scp|rsync 源文件 目标目录】
自建 CA 操作(rocky10)
1.创建CA所需要的文件
mkdir -pv /etc/pki/CA/{certs,crl,newcert,private}

tree /etc/pki/CA/

2.生成CA私钥
cd /etc/pki/CA/
openssl genrsa -out private/cakey.pem 2048
ls private/


3.生成CA自签名证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem

4.查看证书
cat /etc/pki/CA/cacert.pem

openssl -x509 -in /etc/pki/CA/cacert.pem -noout -text

4.导到WINDOWS中查看
sz /etc/pki/CA/cacert.pem


ssh 跨主机免密码认证
1.在客户端生成密钥对
rocky
查看当前目录效果 ls .ssh/

生成秘匙 ssh-keygen

确认效果 ls .ssh/

2.把公钥文件里传输至远程服务器对应用户的家目录ubuntu24-13
查看目标机 ls .ssh/

将本机公匙上传给远程主机ssh-copy-id root@10.0.0.13

远程主机再次查看目标主机 ls .ssh/

测试免密登录 ssh root@10.0.0.13 cat /etc/lsb-release

1. 解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。
TYPE=Ethernet # 网络类型:以太网
PROXY_METHOD=none # 代理方法:无
BROWSER_ONLY=no # 仅浏览器使用:否
BOOTPROTO=none # 启动协议:无(表示不使用如DHCP等自动获取IP的方式,采用静态配置)
DEFROUTE=yes # 默认路由:是(此网络接口用于默认路由)
IPV4_FAILURE_FATAL=no # IPv4故障致命性:否(IPv4配置失败不会导致网络启动失败)
IPV6INIT=yes # IPv6初始化:是(启用IPv6支持)
IPV6_AUTOCONF=yes # IPv6自动配置:是(允许系统自动配置IPv6地址)
IPV6_DEFROUTE=yes # IPv6默认路由:是(此网络接口用于IPv6默认路由)
IPV6_FAILURE_FATAL=no # IPv6故障致命性:否(IPv6配置失败不会导致网络启动失败)
IPV6_ADDR_GEN_MODE=eui64 # IPv6地址生成模式:eui64(基于网络接口的唯一标识符生成IPv6地址)
NAME=eth0 # 网络接口名称:eth0
UUID=0bb624f5-12ff-45e4-b950-00f743ea97b7 # 网络接口的唯一标识符(UUID)
DEVICE=eth0 # 设备名称:eth0(表示与网络接口名称相同)
ONBOOT=yes # 开机时自动启动:是
IPADDR=10.0.0.31 # IPv4地址:10.0.0.31(静态配置的IP地址)
PREFIX=24 # 网络前缀长度:24
GATEWAY=10.0.0.2 # 默认网关:10.0.0.2
DNS1=10.0.0.2 # DNS服务器地址:10.0.0.2(首选DNS服务器)
DOMAIN=xxx.com # 用于简化域名访问用的配置,输入www会自动补全域名后缀
2. 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。
#!/bin/bash
#
# 文件名:scan_lan.sh
# 用途:扫描当前局域网内所有在线主机 IP
# 作者:yangfucheng
# 日期:2024-(自动生成日期)
# -------------------------- 第一步:获取本机 IP --------------------------
# hostname -I 会输出本机所有 IP(空格分隔),awk 取第一个就是主 IP
# 比如你的环境是 10.0.0.15,那 myip 就是 10.0.0.15
myip=$(hostname -I | awk '{print $1}')
# -------------------------- 第二步:拆分网段 --------------------------
# cut -d. -f1 取第一段(10)
# cut -d. -f2 取第二段(0)
# cut -d. -f3 取第三段(0)
# 合并后 net = 10.0.0,就是你所在的整个网段前缀
net1=$(echo $myip | cut -d. -f1)
net2=$(echo $myip | cut -d. -f2)
net3=$(echo $myip | cut -d. -f3)
net="$net1.$net2.$net3"
# -------------------------- 第三步:循环扫描 1~254 --------------------------
# 从 1 循环到 254,逐个拼 IP
for i in {1..254}
do
# 拼接成完整 IP,比如 10.0.0.1、10.0.0.2 … 10.0.0.254
ip="$net.$i"
# ping -c 1 只发一个包,-W 1 超时1秒
# >/dev/null 2>&1 把所有输出都屏蔽,不干扰,只看结果
ping -c 1 -W 1 $ip >/dev/null 2>&1
# $? = 0 表示 ping 成功,说明该 IP 在线
[ $? -eq 0 ] && echo "在线: $ip"
done
# -------------------------- 第四步:扫描结束提示 --------------------------
echo "================================"
echo "扫描完成"


3. 使用while read line和/etc/passwd,计算用户id总和。
#/bin/bash
#日期:2026-04-25
#脚本名字:uid_sum.sh
#作者:yangfucheng
#功能:while read line 读取/etc/passwd 计算所有用户ID总和
#初始化总和变量为0,用于累加所有用户的ID
sum=0
#开始循环,逐行读取/etc/passwd文件内容,每次读取一行赋值给line变量
while read line
do
#跳过空行,防止出错
[ -z "$line" ] && continue
#截取当前行中:分隔的第三列,即用户uid,赋值uid变量
uid=$(echo "$line" | cut -d: -f3)
#将当前uid累加到总和sum中
sum=$((sum + uid))
#循环结束,将/etc/passwd文件作为循环插入
done < /etc/passwd
#输出最终计算的所有用户的UID总和
echo "所有用户的UID总和为:$sum"


4. 总结索引数组和关联数组,字符串处理,高级变量使用及示例。
索引数组:数字下标从0开始
arr(a,b,c,d,10,20)
arr[0]="张三"
arr[1]="李四"
arr[2]="王五"

输出第1个元素 echo ${arr[0]}
输出所有元素 echo ${arr[*]}
echo ${arr[@]}
数组长度 echo ${#arr[@]}
遍历数组 for i in ${arr[@]};do echo $i;done

关联数组:必须先声明:declare -A (键值对)
declare -A person
person["name"]="小明"
person["age"]=20
person["city"]="北京"

取值 echo ${person["name"]}
所有key echo ${!person[@]}
所有value echo ${person[@]}
遍历 for key in ${!person[@]};
do
echo "$key: ${person[$key]}"
done

字符串处理:
取长度
str="hello world"
echo ${#str}
截取字符串
从第2个字符开始,取3个 echo ${str:1:3}
替换
替换第一个匹配 echo ${str/old/new}
删除前后缀
删除前缀 echo ${str#he}
删除后缀 echo ${str%d}
大小写转换
转大写 echo ${str^^}
转小写 echo ${str,,}

高级变量使用;
默认值
变量为空,使用默认值
echo ${name:-"yangfucheng"}
判断变量是否存在
存在则赋值
echo ${name:="默认值"}
变量替换
存在则赋值 echo ${name:="默认值"}
命令结果赋值给变量
now=$(date)
echo $now
数组转字符串
arr=(a b c)
str="${arr[*]}"

索引数组遍历
arr=(苹果 香蕉 橘子)
for fruit in ${arr[@]};do
echo "水果:$fruit"
done

关联数组存用户信息
declare -A user user
["name"]="小红"
user["age"]=18
for k in ${!user[@]};do
echo "$k => ${user[$k]}"
done

字符串截取 + 替换
str="I love Linux"
echo ${str:2:4}
echo ${str/Linux/Shell}

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

#!/bin/bash
# 作者:yangfucheng
# 日期:2026-04-24
# 功能:生成10个随机数,计算最大值、最小值
#定义数组存放随机数
arr=()
#循环生成10个随机数
for ((i=0; i<10; i++))
do
#生成0-99随机数
num=$((RANDOM % 100))
arr+=($num)
done
#输出这10个随机数
echo "生成的10个随机数:${arr[@]}"
#初始化最大最小值
max=${arr[0]}
min=${arr[0]}
#遍历比较
for n in ${arr[@]}
do
if [ $n -gt $max ]; then
max=$n
fi
if [ $n -lt $min ]; then
min=$n
fi
done
#输出结果
echo "最大值:$max"
echo "最小值:$min"

6. 使用递归调用,完成阶乘算法实现。
#/bin/bash
#recursive factorial-递归实现阶乘算法
#作者:yangfucheng
#日期:2026-04-26
#递归函数:计算阶乘
#参数:n(非负整数)
#返回:n!的结果
factorial(){
local n=$1
#递归终止条件:0! 和 1!都等于1
if [ $n -eq 0 ] || [ $n -eq 1 ]; then
echo 1
else
#递归公式:n! = n * (n-1)!
local prev=$(factorial $(( n - 1)))
echo $((n * prev))
fi
}
#主程序 :交互输入并计算
read -p "请输入一个非负整数:" num
#输入合法性检查
if ! [[ $num =~ ^[0-9]+$ ]]; then
echo "错误:请输入一个有效的非负整数!"
exit 1
fi
#调用递归函数并输出结果
result=$(factorial $num)
echo "$num = $result"


7. 总结主机到主机的包传递过程。
发送端从上到下逐层封装:应用数据 → 加端口 → 加 IP → 加 MAC → 转为电信号发出。
中间经过交换机、路由器逐跳转发,根据 MAC 和 IP 寻址。
接收端从下到上逐层解封装,最终把数据交给目标应用。
8. 总结IP地址 A, B, C, D 类,并解析IP地址的组成
A 类地址:首个十进制数范围 1~126,默认子网掩码 255.0.0.0。网络位占 8 位,主机位占 24 位,网络数量少、主机数量极多,用于大型网络。
B 类地址:首个十进制数范围 128~191,默认子网掩码 255.255.0.0。网络位 16 位,主机位 16 位,适合中型企业、校园网。
C 类地址:首个十进制数范围 192~223,默认子网掩码 255.255.255.0。网络位 24 位,主机位 8 位,主机数量少,是最常用的局域网地址。
D 类地址:首个十进制数范围 224~239,没有网络位和主机位之分,专门用于 组播,不分配给普通主机使用。
9. 201.222.200.111/18计算主机数?子网掩码?说明计算方法。
网络位是18
子网掩码计算:
连续 18 位二进制为 1,分段为:11111111.11111111.11000000.00000000
8 位二进制固定值(从左到右) 128 64 32 16 8 4 2 1
换算十进制:255.255.192.0(第三段前 2 个 1 相加:128+64=192)
主机位:32−18=14 位
可用主机数:214−2=16382
10. 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
/16 掩码 = 255.255.0.0
/24 掩码 = 255.255.255.0
A 掩码 255.255.0.0,只对比 IP 前两段,A 和 B 前两段相同,A 判断为同一网段
B 掩码 255.255.255.0,对比前三段,双方不同,B 判断为不同网段。
A 判定与 B 为同一网段,B 判定与 A 为不同网段。有网关可正常通信;无网关则无法通信。
11. 如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。
32个子网,那么需要借5位做子网,原网络位:8 位,新网络位:8+5=13 位,剩余主机位:32−13=19 位,11111111 . 11111000 . 00000000 . 00000000,也就是255.248.0.0,主机数:219−2=524286台。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)