linux - 从文件动态更新主机文件

标签 linux bash raspberry-pi hosts

我爸爸家里有一个 Raspberry Pi,用作“ hive ”(供暖/水控制)。
我爸爸有一个由他的 ISP 提供的动态 IP,当它改变时,Pi 会更新我服务器上的一个文本文件(通过 ssh)。然后我用它通过 SSH 登录,他用它通过我的域“/cleres”上的 URL 访问 Web UI。

目前我有一个丑陋的 bash 脚本,它将我的整个主机文件复制到一个临时文件,除了最后一行(他的 ip),从文本文件中获取新的 IP,并更新主机文件附加

XXX.XXX.XXX.XXX      dad

我觉得这不是最好的方法,但是(我发现的)每篇关于动态主机文件更新的帖子似乎都是人们用他们自己的本地 DHCP 地址更新它。我不想使用 dyndnsnoip 因为没有必要。我已经有了 IP,我只需要一种在我的服务器上为其设置别名的方法。

TLDR 我想知道是否有比复制整个文件并附加新 IP 和主机更好的方法来更新我的主机文件。
我的域名是 here如果有人感兴趣的话。

---丑陋的 BASH 脚本---

ip="$(cat /media/dad/dadextip.txt)"
check="$(cat /etc/hosts | grep $ip | sed -e 's/\< Dad\>//g')"
if [[ $check != *[^0-9]* ]]; then
        cat /etc/hosts | grep -v Dad > /tmp/tmphosts
        cat /tmp/tmphosts > /etc/hosts
        echo "$ip          Dad" >> /etc/hosts
        cat /tmp/tmphosts > /var/spool/postfix/etc/hosts
        echo "$ip          Dad" >> /var/spool/postfix/etc/hosts
        cat /etc/webmin/servers/1448542326.serv | grep -v host > /tmp/tmphosts
        cat /tmp/tmphosts > /etc/webmin/servers/1448542325.serv
        echo "host=$ip" >> /etc/webmin/servers/1448542326.serv
        exit 0
elif [ $check != $ip ]; then
        cat /etc/hosts | grep -v Dad > /tmp/tmphosts
        cat /tmp/tmphosts > /etc/hosts
        echo "$ip          Dad" >> /etc/hosts
        cat /tmp/tmphosts > /var/spool/postfix/etc/hosts
        echo "$ip          Dad" >> /var/spool/postfix/etc/hosts
        cat /etc/webmin/servers/1448542326.serv | grep -v host > /tmp/tmphosts
        cat /tmp/tmphosts > /etc/webmin/servers/1448542326.serv
        exit 0
else
        exit 0
fi

最佳答案

GNU sed可以进行文件内替换 ( sed -i "s/<regex>/replacement/" /etc/hosts )。显然你想测试正则表达式替换部分没有 -i首先选择直到它工作......

关于linux - 从文件动态更新主机文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36012270/

相关文章:

ruby-on-rails - Rails 应用程序不读取 .bashrc 中的环境变量

linux - 如何使文件夹/目录对用户不可删除/不可移动但仍然可写

python - 如何制作 Flask 端点?

linux - membarrier 手册页中的示例在 x86 中毫无意义吗?

linux - 以不同的用户身份启动 .jar

linux - 如何在ubuntu上安装最后复制的文件

Python Tkinter - 使用退出按钮关闭子窗口

python - Popen 没有响应杀死

MySQL 没有解析 IP 地址,但 nslookup 确实解析了

linux - 关闭ssh连接后如何保持任务运行?