Если Вы настаиваете на том, чтобы использовать cat
, это работает на оба типа файлов, с и без новой строки в конце:
echo "`cat example.txt`"
Можно превратить его в функцию с именем по Вашему выбору (даже cat
) в Вашем .bashrc
:
cat1(){ echo "`/bin/cat $@`";}
Команда хоста не проверяет файл hosts. Из страницы справочника:
host is a simple utility for performing DNS lookups.
Если Вы хотите протестировать поиски при уважении файла hosts то используйте ping или getent.
$ tail -1 /etc/hosts
127.0.0.1 google.com
$ ping -c1 google.com | head -1
PING google.com (127.0.0.1) 56(84) bytes of data.
$ getent ahosts google.com
127.0.0.1 STREAM google.com
127.0.0.1 DGRAM
127.0.0.1 RAW
host
утилита используется для поисков DNS. Это не заботится о файлах hosts или методах не-DNS разрешения имени хоста. Если бы Вы хотите видеть, как Ваша система разрешила бы имя хоста при нормальных обстоятельствах (принимающий во внимание nsswitch.conf), можно использовать getent
. host
утилита должна быть зарезервирована для тестирования DNS. Вот пример:
$ host foobar.com
foobar.com has address 69.89.31.56
foobar.com mail is handled by 0 foobar.com.
$ getent hosts foobar.com
10.188.14.16 foobar.com
gethostbyaddr(3)
, который является a libc
функция.
– jordanm
14.11.2013, 18:33
libc
функции не являются системными вызовами, таким образом, они не обнаружатся в strace
. Только вещи в "2" раздел страниц справочника обнаружились бы в strace
.
– jordanm
14.11.2013, 18:44
getent
часть libc
в моей системе не имело бы никакого смысла для него не пользоваться библиотекой, с которой это распределяется.
– jordanm
14.11.2013, 18:46
Программы как dig
, host
и nslookup
запросите DNS только. Они не запрашивают другие источники имен хостов такой как /etc/hosts
, NIS или LDAP.
В большинстве установок самый легкий способ гладко добавить имена хостов локально состоит в том, чтобы выполнить сервер DNS. Выполнение кэша DNS является хорошей идеей так или иначе для производительности. Другими словами, то, что никакой сервер DNS не работает локально, является чем-то для фиксации, а не что-то для работы вокруг.
Dnsmasq является общим выбором: это является широко доступным, маленьким (это используется на многих основанных на Linux маршрутизаторах), и легкий настроить. Запросы DNS кэшей Dnsmasq и могут служить дополнительным именам от файла hosts. Это также обеспечивает основной сервер DHCP, подходящий для небольших сетей, но Вы не должны использовать ту часть. Если Вы имеете изолированную машину, выполняете Dnsmasq на нем. Если Вы имеете локальную сеть, выполняете Dnsmasq (или некоторое другое эквивалентное программное обеспечение, это уже там) на Вашем маршрутизаторе. Посмотрите, Как сделать машину доступной из LAN с помощью ее имени хоста для получения дополнительной информации включая то, как создать Dnsmasq.