问题: 有没有一种简单的方法可以在系统启动时自动在/ etc / hosts中添加DHCP机器的DHCP发布的IP地址和主机名?
背景: 我的Linux机器在/ etc / hostname中有一个主机名,当我ping时它不会解析为任何东西。我在/ etc / hosts中手动添加了我的主机名和IP地址,以便我的网络相关的java程序可以工作。
谢谢,
答案 0 :(得分:7)
在Ubuntu中,将可执行文件添加到/etc/network/if-up.d
目录中。网络管理员配置网络接口后,将执行此目录中的文件。
您可以调整以下脚本:
#!/bin/sh
set -e
if [ "$IFACE" = lo ]; then
exit 0
fi
myHostName=`hostname`
# Remove current line with hostname at the end of line ($ means end of line)
sed -i '/'$myHostName'$/ d' /etc/hosts
ipaddr=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}')
echo "$ipaddr $myHostName" >>/etc/hosts
答案 1 :(得分:5)
dhcpcd有一个-c/--script
选项,可以在配置或启动接口的任何时候运行外部脚本。您可以使用它来使用配置的主机名手动更新hosts文件。
答案 2 :(得分:1)
使用avahi(应该在您的发行版存储库中),然后您可以
$ ping youhostname.local
答案 3 :(得分:1)
我接受了@Markus所做的并将其放入正常的脚本中。这适用于我的Fedora 20盒子:
#!/bin/sh
MYHOST=firtree
echo "before:"
cat /etc/hosts
# Remove current line with hostname at the end of line ($ means end of line)
sed -i '/'$MYHOST'$/ d' /etc/hosts
echo "after remove: "
cat /etc/hosts
IPADDR=$(ifconfig | awk -F" +|:" '/inet addr/ && $4 != "127.0.0.1" {print $4}')
echo "$IPADDR $MYHOST" >>/etc/hosts
echo "ip: " $IPADDR
echo "final: "
cat /etc/hosts
这必须以root身份运行,并且可能应该放在init.d文件夹中。
答案 4 :(得分:0)
这
ipaddr=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}’)
host=`hostname`
fhost=`hostname -f`
echo "$ipaddr $fhost $host" >> /etc/hosts
cat /etc/hosts
答案 5 :(得分:0)
我个人使用此脚本将我的主机名(现有的)+动态IP设置为/etc/hosts
文件:
#!/bin/bash
ipaddr=$(/sbin/ifconfig eth0| grep 'inet addr' | cut -d: -f2 | awk '{print $1}')
hn=$(hostname)
hnd=$(hostname -f)
sed -i '2s/.*/'$ipaddr' '$hnd' '$hn'/' /etc/hosts
亲切的问候,