Изменения в / etc / hosts не распознаются командами оболочки до выхода из системы и входа в систему

Я заметил это поведение на моем сервере сегодня, и я хотел бы больше узнать о том, что происходит.

При выдаче команды w во время ssh'ed на мой сервер RHEL 6 я пытался получить поле FROM имя хоста, а не IP-адрес клиента SSH. Обратите внимание, что я использую 8.8.8.8 для DNS, и это разрешение google.com отлично работает с ping , например.

Поэтому я отредактировал / etc / hosts на сервере SSH, чтобы включить запись для клиента. Pinging клиент по имени хоста теперь работает нормально, но w прежнему отображает IP-адрес в поле FROM.

Простое изъятие и вход в систему и выпуск w снова позволили полю FROM отобразить SSH-клиент по имени хоста, которое я настроил в / etc / hosts.

Мой вопрос: почему был логин / логин? Что изменилось или было обновлено при входе в систему?

Я использую bash-4.1.2-33.el6_7.1, самый последний доступный в базе RHEL 6.

w читает /var/run/utmp чтобы узнать, кто вошел в систему и откуда они вошли. Записи utmp обновляются, когда пользователь входит в систему или выходит из системы.

Если в момент входа пользователя в систему не было записи DNS или /etc/hosts для IP- utmp тогда имя хоста в utmp остается пустым в процессе входа (sshd в этом случае).

Когда вы вышли из системы и вошли в систему снова после добавления записи /etc/hosts , sshd выполнил поиск по IP- utmp и на этот раз нашел имя хоста, поэтому смог добавить правильные данные в поле имени хоста в utmp .

см. man 5 utmp для получения подробной информации о формате файла /var/run/utmp