news 2026/5/1 9:26:10

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用 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!

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/4 7:48:47

基于Django的菜鸟驿站快递揽件管理系统vue

目录 系统架构设计核心功能模块技术实现要点数据交互流程特色功能实现 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 系统架构设计 系统采用前后端分离架构,前端使用Vue.js框架,…

作者头像 李华
网站建设 2026/4/16 22:03:17

《把脉行业与技术趋势》-107-科学于不确定中求规律,工程以确定方法实现目标,生产靠标准流程确保产品一致。三者层层递进,共筑技术从认知到落地的完整链条。

科学的本质是确定性的方法在在不确定中找到确定性的原理和规律;工程研发的本质是确定性的过程方法把确定性的目标转化成确定性的产品;生产的本质是用确定的过程管理方法把原材料转化成确定性的批量的一致性的产品。关于科学、工程研发与生产三者本质&…

作者头像 李华
网站建设 2026/4/24 5:57:44

杰理之上位机读取请求【篇】

◦ 通过virtual_file_read函数处理读取请求 ◦ 从循环缓冲区enc_cbuffer中读取数据 ◦ 如果数据不足,填充静音MP3数据

作者头像 李华
网站建设 2026/5/1 8:29:25

飞行器设计生成式模型专栏正式发布 | 航空学报

以下文章来源于“航空学报CJA”,仅做学术分享 原文链接:飞行器设计生成式模型专栏正式发布 | 航空学报 生成式模型作为数智化的新型技术基座,正加速重塑科学研究与工程实践的范式,为飞行器设计注入了新动能,对新质飞行…

作者头像 李华
网站建设 2026/4/24 21:54:57

扩展卡尔曼滤波(EKF)观测器原理

扩展卡尔曼滤波(EKF)观测器通过将非线性系统在当前估计点附近进行局部线性化,然后应用线性卡尔曼滤波的框架,实现对系统状态的最优估计。其核心在于预测-校正循环,并通过自适应调整卡尔曼增益来平衡模型预测与观测数据之间的权重。 🔍 核心思想 EKF观测器的基本思想可…

作者头像 李华