问题: 是否有一种简单的方法可以在系统启动时自动在/ etc/hosts中添加Linux发布的IP地址和Linux机器的主机名?将主机名添加到Linux中的/ etc/hosts
背景: 我的Linux机器在/ etc/hostname中有一个主机名,当我ping时它不会解析任何东西。我在/ etc/hosts中手动添加了我的主机名和IP地址,以使我的网络相关的Java程序能够正常工作。
感谢,
问题: 是否有一种简单的方法可以在系统启动时自动在/ etc/hosts中添加Linux发布的IP地址和Linux机器的主机名?将主机名添加到Linux中的/ etc/hosts
背景: 我的Linux机器在/ etc/hostname中有一个主机名,当我ping时它不会解析任何东西。我在/ etc/hosts中手动添加了我的主机名和IP地址,以使我的网络相关的Java程序能够正常工作。
感谢,
的dhcpcd有-c/--script
选项来运行一个外部脚本随时随地它配置或带来了一个接口。您可以使用它来手动更新具有配置的主机名的主机文件。
我有一个进程'dhcpcpclient3'。这与dhcpd相同吗?如果是这样,我在哪里更改配置以指定脚本?谢谢。 – M99 2011-02-28 17:21:39
'/ etc/dhcp3'具有它的所有配置文件。 -c选项用于直接从命令行调用它。对于基于配置文件的更改,它将是主dhclient.conf中的'script'选项 – 2011-02-28 18:46:44
现在,/etc/dhcp3/dhclient.conf中的'script'部分被注释掉了。我将通过我自己的脚本来更新/ etc/hosts。这个'script'和/ sbin/dhclient-script之间有任何关系吗? /etc/dhcp3/dhclient.conf中的'脚本'条目是否需要遵循任何特殊约定或者它只是任何shell脚本?谢谢。 – M99 2011-02-28 19:07:00
使用avahi(这应该是在你的发行版的存储库),那么你可以
$ 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
我有一个问题,这将适用于哪个Linux版本我们可以为每个Linux/Mac/Windows系统创建多版本脚本? 对于跨平台来说,这是更好的选择。 – 2013-10-19 04:46:06
我设法使用下面的一行来简化ipaddr声明:'ifconfig | awk -F“+ |:”'/ inet addr/&& $ 4!=“127.0.0.1”{print $ 4}'' – Yaron 2014-08-14 13:26:45
我把什么@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中应该去。
不好,如果127的实际地址包含127(例如192.168.4.127) ,更好地改述或使用这一行:'ifconfig | awk -F“+ |:”'/ inet addr/&& $ 4!=“127.0.0.1”{print $ 4}'' – Yaron 2014-08-14 13:29:36
好的。更新。谢谢! – 2014-08-15 13:45:11
从
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服务器。 – 2011-02-28 16:37:21
它不是一个真正的DNS解析。我想使用主机名,并且能够使用该主机名从相同的机器ping(而不是从该机器以外)。这就是为什么我依赖于/ etc/hosts。 – M99 2011-02-28 16:38:42