在Linux中将主机名添加到/ etc / hosts

时间:2011-02-28 16:34:50

标签: linux networking ubuntu

问题: 有没有一种简单的方法可以在系统启动时自动在/ etc / hosts中添加DHCP机器的DHCP发布的IP地址和主机名?

背景: 我的Linux机器在/ etc / hostname中有一个主机名,当我ping时它不会解析为任何东西。我在/ etc / hosts中手动添加了我的主机名和IP地址,以便我的网络相关的java程序可以工作。

谢谢,

6 个答案:

答案 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

亲切的问候,