当前位置: 首页 > news >正文

手把手教你用 Bash 脚本自动更新 /etc/hosts —— 自动绑定网卡 IP 与节点名

适用场景:集群部署、Kubernetes 节点配置、多机通信环境
系统要求:Linux(Ubuntu/CentOS 等主流发行版)
前置知识:基础 Shell 命令、了解/etc/hosts文件作用


🎯 背景说明

在搭建分布式系统(如 Hadoop、Kubernetes、Redis Cluster)时,我们经常需要让各节点通过主机名互相通信。而 Linux 系统默认只识别localhost,若想通过自定义名称(如node1master)访问本机或其它机器,就必须修改/etc/hosts文件。

但每次手动查 IP、编辑 hosts 文件既繁琐又容易出错。本文将带你编写一个交互式 Bash 脚本,自动完成以下任务:

  1. 列出所有可用网卡;
  2. 用户选择要使用的网卡;
  3. 自动获取该网卡的 IPv4 地址;
  4. 输入节点名称(如node1);
  5. 自动更新/etc/hosts,确保IP → 主机名映射正确。

💡 脚本功能预览

运行脚本后,你会看到类似如下交互:

>>>检测可用网卡... 可用网卡列表:0)eth01)wlan0 请选择要使用的网卡编号:0>>>选中网卡 eth0 的 IP:192.168.1.105 请输入当前节点名称(例如 node1): node1>>>192.168.1.105 node1 添加到 /etc/hosts... ✅ /etc/hosts 更新完成!当前记录:192.168.1.105 node1

如果node1已存在,则自动覆盖旧 IP,避免重复条目。


📜 完整脚本代码

将以下内容保存为setup-hosts.sh

#!/bin/bash# 手动选择网卡并更新 /etc/hostsset-e# 遇到错误立即退出# 获取所有非回环网卡(排除 lo)echo">>> 检测可用网卡..."NETWORK_INTERFACES=($(ip-olinkshow|awk-F': ''{print $2}'|grep-v lo))# 若无可用网卡,报错退出if[${#NETWORK_INTERFACES[@]}-eq0];thenecho"❌ 未检测到可用网卡!"exit1fi# 列出网卡供用户选择echo"可用网卡列表:"foriin"${!NETWORK_INTERFACES[@]}";doecho"$i)${NETWORK_INTERFACES[$i]}"done# 读取用户输入的编号read-p"请选择要使用的网卡编号: "NIC_INDEX# 校验输入是否合法if![["$NIC_INDEX"=~^[0-9]+$]]||["$NIC_INDEX"-ge${#NETWORK_INTERFACES[@]}];thenecho"❌ 输入编号无效!"exit1fiSELECTED_NIC=${NETWORK_INTERFACES[$NIC_INDEX]}# 获取选中网卡的 IPv4 地址(取第一个 inet 地址)IP_ADDR=$(ip-4 addr show"$SELECTED_NIC"|grepinet|awk'{print $2}'|cut-d/ -f1|head-n1)if[-z"$IP_ADDR"];thenecho"❌ 选中网卡$SELECTED_NIC没有 IPv4 地址!"exit1fiecho">>> 选中网卡$SELECTED_NIC的 IP:$IP_ADDR"# 输入节点名称read-p"请输入当前节点名称(例如 node1): "NODE_NAMEif[-z"$NODE_NAME"];thenecho"❌ 节点名称不能为空!"exit1fi# 更新 /etc/hostsifgrep-q"$NODE_NAME"/etc/hosts;thenecho">>> /etc/hosts 已存在$NODE_NAME,自动更新 IP..."# 使用 sed 替换整行(匹配以任意字符开头、包含 NODE_NAME 的行)sed-i"s/.*$NODE_NAME/$IP_ADDR$NODE_NAME/"/etc/hostselseecho">>> 将$IP_ADDR$NODE_NAME添加到 /etc/hosts..."echo"$IP_ADDR$NODE_NAME">>/etc/hostsfiecho"✅ /etc/hosts 更新完成!当前记录:"grep"$NODE_NAME"/etc/hosts

🔍 逐行详解

1.set -e

  • 作用:脚本中任何命令返回非 0(失败),立即退出。
  • 避免错误累积导致不可预期行为。

2. 获取网卡列表

ip-olinkshow|awk-F': ''{print $2}'|grep-v lo
  • ip -o link show:以单行格式列出所有网络接口。
  • awk -F': ' '{print $2}':以:为分隔符,提取接口名(如eth0)。
  • grep -v lo:排除回环接口lo(127.0.0.1 无实际通信意义)。

3. 用户交互选择

  • 使用数组索引让用户选择网卡,避免拼写错误。
  • 严格校验输入是否为数字且在有效范围内。

4. 获取 IPv4 地址

ip-4 addr show"$SELECTED_NIC"|grepinet|awk'{print $2}'|cut-d/ -f1|head-n1
  • ip -4:只显示 IPv4。
  • grep inet:过滤出带 IP 的行。
  • cut -d/ -f1:去掉子网掩码(如192.168.1.105/24192.168.1.105)。
  • head -n 1:只取第一个 IP(适用于多 IP 场景)。

5. 更新/etc/hosts

  • 存在则更新:用sed替换整行,防止旧 IP 残留。
    sed-i"s/.*$NODE_NAME/$IP_ADDR$NODE_NAME/"/etc/hosts

    注意:此正则会匹配任意以$NODE_NAME结尾的行,并替换为新 IP + 名称。

  • 不存在则追加:直接echo >>

⚠️ 注意事项

  1. 权限问题
    修改/etc/hosts需要 root 权限!
    运行时请使用:

    sudobashsetup-hosts.sh
  2. 主机名唯一性
    本脚本假设每个节点名称全局唯一。若多台机器使用相同NODE_NAME,会导致解析冲突!

  3. 多 IP 网卡
    脚本只取第一个 IPv4 地址。如有特殊需求(如指定公网 IP),可进一步扩展逻辑。

  4. 安全性
    sed替换时未转义特殊字符(如-.)。若NODE_NAME含正则元字符,可能出错。
    进阶建议:对$NODE_NAMEsed转义(本文为简化省略)。


✅ 验证效果

运行后,检查/etc/hosts

cat/etc/hosts|grepnode1# 应输出:192.168.1.105 node1

测试解析:

pingnode1# 应能正常 ping 通本机 IP

🧩 扩展建议

  • 支持批量配置多个节点(读取 YAML/JSON 配置文件);
  • 自动同步到集群其它节点(结合scp或 Ansible);
  • 增加 DNS 兼容模式(优先使用 DNS,fallback 到 hosts)。

📌 总结

这个小脚本虽短,却融合了:

  • 网络信息获取(ip命令)
  • 用户交互(read
  • 文本处理(grep/sed/awk
  • 系统配置管理(/etc/hosts

非常适合 DevOps 工程师、集群运维人员日常使用。一键配置,告别手敲 IP!

💡提示:将此脚本加入你的自动化部署工具箱,效率翻倍!

原创不易,转载请注明出处!

http://www.jsqmd.com/news/307069/

相关文章:

  • 2026年车间洗地机厂家推荐:物业洗地机/工厂洗地机/商场超市洗地机/学校手推式洗地机/展厅手推式洗地机厂家精选
  • nodejs基于node.js和vue的游戏点单陪玩系统
  • P5909 挂缀pendant 题解
  • 2026年比较好的轨道式接线端子/弹簧式接线端子热门品牌厂家推荐
  • nodejs基于农产品网上商城农商信息交流平台小程序
  • 2026年评价高的双排接线端子/高效接线端子厂家选择参考建议
  • 2026年质量好的直线光轴/光轴厂家选购参考建议
  • Linux系统用户组的管理
  • 2026年,新的开始吧,股票量化交易学起来(一)
  • 2026年靠谱的42crmo圆钢/45#钢圆钢人气实力厂商推荐
  • 基于 C# 和 Nuke 打造现代化构建系统的最佳实践
  • 工程设计类学习(DAY9):印刷电路板(PCB)材料选择、工艺特性与制造技术综合详解
  • 贾子理论及智慧公理研究:跨学科视域下AI智慧涌现的判定体系与哲学推演
  • 金融服务公司如何大规模构建上下文智能
  • 128页PPT | XX城建集团以成本为主线构建企业级项目管理系统
  • 179页满分PPT | 某大型车企数字化工厂规划蓝图设计方案
  • HarmonyOS 超级终端与服务卡片创建:打造无缝多设备交互体验
  • 【含文档+PPT+源码】基于大数据的交通流量预测系统
  • 2026年比较好的企业瓶装水定制水/哇哈哈定制水供应稳定性排行
  • 2026年比较好的深圳送水桶装水配送/景田深圳送水长期合作推荐榜
  • semi-sync原主库加入集群阻塞问题分析
  • VMware Workstation 17 Pro 破解版下载及安装使用教程
  • 2026年比较好的WCB微型齿轮油泵/YCB齿轮油泵厂家选择参考建议
  • 2026年知名的颗粒饲料/畜禽饲料厂家选购完整指南
  • 2026年口碑好的看台膜结构车棚/停车场膜结构车棚厂家信誉综合参考
  • Kylin V11 实战:PostgreSQL 18 容器化部署,别再被参数坑了
  • 巴豆酰化如何重塑对组蛋白修饰与转录调控的认知?
  • 杰理之会出现明显延时出声音【篇】
  • 杰理之增加llns 到 混响数据流中【篇】
  • 杰理之四路IIS输入输出【篇】