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

在Linux中将主机名添加到/etc/hosts,linux,networking,ubuntu,Linux,Networking,Ubuntu,问题: 是否有一种简单的方法可以在系统启动时自动在/etc/hosts中添加DHCP颁发的linux机器的IP地址和主机名 背景: 我的Linux机器在/etc/hostname中有一个主机名,当我ping时,它不会解析为任何内容。我在/etc/hosts中手动添加了我的主机名和ip地址,以使我的一个网络相关java程序正常工作 谢谢,dhcpcd可以在配置或打开接口时随时运行外部脚本。您可以使用此选项使用配置的主机名手动更新主机文件。使用(应该在您的发行版存储库中),然后您可以 $ ping

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

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

谢谢,

dhcpcd可以在配置或打开接口时随时运行外部脚本。您可以使用此选项使用配置的主机名手动更新主机文件。

使用(应该在您的发行版存储库中),然后您可以

$ ping youhostname.local

在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

我把@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文件夹中

来自

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

我个人使用此脚本将我的主机名(现有主机名)+动态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

善意的问候,

如果您想要DNS解析,这通常是DHCP服务器配置的一部分——将信息传送到DNS服务器。这不是真正的DNS资源。我想使用一个主机名,并且能够使用该主机名从同一台机器ping(而不是从该机器外部)。这就是我依赖/etc/hosts的原因。我有一个进程“dhcpclient3”。这和dhcpd一样吗?如果是,我在哪里更改配置以指定脚本?谢谢。
/etc/dhcp3
有它的所有配置文件。c选项用于直接从命令行调用它。对于基于配置文件的更改,应该是主dhclient.conf中的
script
选项现在/etc/dhcp3/dhclient.conf中的'script'部分被注释掉了。我将在那里传递我自己的脚本以更新/etc/hosts。此“脚本”与/sbin/dhclient脚本之间是否存在任何关系?/etc/dhcp3/dhclient.conf中的“script”条目是否需要遵循任何特殊约定,或者只是任何shell脚本?谢谢。这个脚本应该只是一个普通的shell脚本,它的参数将是来自新dhcp设置的数据。至于其余的,不确定-以前从未需要dhcp覆盖脚本。我的/sbni/dhclient脚本似乎是初始dhcp设置的一部分,并且有一组帮助程序脚本——但不确定从何处调用它。我终于找到了一个很好的方法。dhcp退出挂钩。我编写了一个脚本并将其放在exit hooks目录中,该脚本在dhcp租约之后被执行。谢谢。我有一个问题,这将适用于哪个Linux版本,我们可以为每个Linux/Mac/Windows系统创建多版本脚本?最好是跨平台执行。我使用以下一行代码简化了ipaddr断言:
ifconfig | awk-F“+|::“'/inet addr/&&$4!=“127.0.0.1”{print$4}'
不太好,如果127包含127(例如192.168.4.127),取消打印127可能会删除实际地址,最好重新措辞或使用以下一行代码:
ifconfig | awk-F”+|::“'/inet addr/&&4!=“127.0.0.1”{print$4}'
很好。更新。谢谢