Подтвердить что ты не робот

Добавление имени хоста в /etc/hosts в Linux

Вопрос: Есть ли простой способ автоматически добавить IP-адрес DHCP и имя хоста Linux-машины в /etc/hosts при автозагрузке системы?

Фон: У моей Linux-машины есть имя хоста в /etc/hostname, и она не решит ничего, когда я пингу. Я вручную добавил свое имя хоста и IP-адрес в /etc/hosts для одной моей связанной с сетью Java-программы.

Спасибо,

4b9b3361

Ответ 1

dhcpcd имеет параметр -c/--script для запуска внешнего script в любое время, когда он настраивает или вызывает интерфейс. Вы можете использовать это, чтобы вручную обновить файл hosts с настроенным именем хоста.

Ответ 2

В Ubuntu добавьте исполняемый файл в каталог /etc/network/if-up.d. Файлы в этом каталоге выполняются после того, как сетевой менеджер настроит сетевой интерфейс.

Вы можете адаптировать следующие script:

#!/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

Ответ 3

Используйте avahi (который должен находиться в ваших реестре-хранилищах), тогда вы можете

$ ping youhostname.local

Ответ 4

Я взял то, что сделал @Markus, и положил его в обычный script. Это работает на моей коробке 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

Это нужно запускать с правами администратора и, вероятно, следует зайти в папку init.d.

Ответ 5

С

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

Ответ 6

Я лично использую этот script для установки моего имени хоста (существующего) + динамического 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

С уважением,