2011-02-28 24 views
11

問題: 是否有一種簡單的方法可以在系統啓動時自動在/ etc/hosts中添加Linux發佈的IP地址和Linux機器的主機名?將主機名添加到Linux中的/ etc/hosts

背景: 我的Linux機器在/ etc/hostname中有一個主機名,當我ping時它不會解析任何東西。我在/ etc/hosts中手動添加了我的主機名和IP地址,以使我的網絡相關的Java程序能夠正常工作。

感謝,

+1

如果你想DNS解析,這通常是DHCP服務器配置的一部分 - 將信息傳送到DNS服務器。 – 2011-02-28 16:37:21

+0

它不是一個真正的DNS解析。我想使用主機名,並且能夠使用該主機名從相同的機器ping(而不是從該機器以外)。這就是爲什麼我依賴於/ etc/hosts。 – M99 2011-02-28 16:38:42

回答

5

的dhcpcd有-c/--script選項來運行一個外部腳本隨時隨地它配置或帶來了一個接口。您可以使用它來手動更新具有配置的主機名的主機文件。

+0

我有一個進程'dhcpcpclient3'。這與dhcpd相同嗎?如果是這樣,我在哪裏更改配置以指定腳本?謝謝。 – M99 2011-02-28 17:21:39

+0

'/ etc/dhcp3'具有它的所有配置文件。 -c選項用於直接從命令行調用它。對於基於配置文件的更改,它將是主dhclient.conf中的'script'選項 – 2011-02-28 18:46:44

+0

現在,/etc/dhcp3/dhclient.conf中的'script'部分被註釋掉了。我將通過我自己的腳本來更新/ etc/hosts。這個'script'和/ sbin/dhclient-script之間有任何關係嗎? /etc/dhcp3/dhclient.conf中的'腳本'條目是否需要遵循任何特殊約定或者它只是任何shell腳本?謝謝。 – M99 2011-02-28 19:07:00

1

使用avahi(這應該是在你的發行版的存儲庫),那麼你可以

$ ping youhostname.local 
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 
+0

我有一個問題,這將適用於哪個Linux版本我們可以爲每個Linux/Mac/Windows系統創建多版本腳本? 對於跨平臺來說,這是更好的選擇。 – 2013-10-19 04:46:06

+0

我設法使用下面的一行來簡化ipaddr聲明:'ifconfig | awk -F「+ |:」'/ inet addr/&& $ 4!=「127.0.0.1」{print $ 4}'' – Yaron 2014-08-14 13:26:45

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中應該去。

+0

不好,如果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

+1

好的。更新。謝謝! – 2014-08-15 13:45:11

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

親切的問候,

相關問題