質問:システムの起動時に/ etc/hostsにLinuxマシンのDHCP発行のIPアドレスとホスト名を自動的に追加する簡単な方法はありますか?
背景:Linuxマシンの/ etc/hostnameにホスト名があり、pingを実行しても何も解決されません。ネットワーク関連のJavaプログラムが機能するように、/ etc/hostsにホスト名とIPアドレスを手動で追加しました。
ありがとう、
dhcpcdには -c/--script
インターフェースを構成または起動するたびに、外部スクリプトを実行するオプション。これを使用して、設定されたホスト名でhostsファイルを手動で更新できます。
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が行ったことを取り入れて、通常のスクリプトに入れました。これは私のFedora20ボックスで機能します。
#!/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フォルダーに配置する必要があります。
avahi (ディストリビューションリポジトリにあるはずです)を使用すると、次のことができます
$ ping youhostname.local
から
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
敬具、