Nslookup — это программа для запроса серверов имен доменов в Интернете . Nslookup очень хорош для запросов DNS-серверов, но он не дает полной картины, когда дело доходит до разрешения имен.
В Linux разрешение имен чаще всего контролируется NSS , который настраивается с помощью /etc/nsswitch.conf
. В частности, эта конфигурация содержит запись hosts
. Например:
hosts: files dns
В приведенной выше записи вы можете видеть, что первое, что нужно запросить, это files
, за которым следует dns
, что означает, что /etc/hosts
будет запрошено перед DNS. Существуют и другие варианты, включая LDAP , Multicast DNS и WINS .
Отвечая на ваш вопрос напрямую, SSH преобразует имя хоста в IP-адрес, используя NSS (, извлекая результаты из нескольких источников ), где nslookup запрашивает только DNS.
Вы можете проверить, какой IP NSS разрешает имя хоста в с помощью getent. Например, чтобы разрешитьsomename
:
getent hosts somename
Также В случае SSH вы можете настроить информацию о хосте в /etc/ssh/ssh_config
и ~/.ssh/config
. Это даже позволит вам указать IP-адрес для имени хоста, полностью пропуская разрешение имени.:
Следующее указывает SSH использовать 192.168.1.25
как для dev
, так и для dev.example.com
.SSH будет использовать этот адрес вне зависимости от того, эти имена существуют как DNS-имена для другого IP-адреса:
# contents of $HOME/.ssh/config
Host dev dev.example.com
HostName 192.168.1.25
Ваше выражение sed
представляет собой замену, которая меняет местами каждую пару не -перекрывающихся положительных целых чисел вокруг дефиса и заменяет дефис двоеточием.
Выражение лица станет
000-212 444-818
в
212:000 818:444
Биты (...)
являются «группами захвата». Такая группа захватывает подстроку, которая соответствует выражению внутри нее. Затем эта подстрока доступна через \1
для первой группы, \2
для второй и т. д.
Обе ваши группы захвата используют [0-9]+
, который является шаблоном, который соответствует не -пустой последовательности цифр от 0 до 9, например, строке 123000
.
-
между двумя группами будет соответствовать буквальному тире в данных.
Строка замены использует числа, соответствующие группам, но использует их в порядке, обратном порядку, в котором они были сопоставлены, заменяя их местами. Текст замены также вставляет :
вместо -
между числами.
/g
в конце заставляет sed
повторить замену для всех неперекрывающихся -совпадений в данных.
Нестандартная -опция -E
для sed
заставляет утилиту использовать расширенные регулярные выражения (ERE ), а не базовые регулярные выражения (BRE ), что является стандартом для sed
. В ERE группы захвата пишутся (...)
, а BRE использует \(...\)
. BRE также не имеет +
для указания не -пустой последовательности совпадений выражения, но вместо этого использует \{1,\}
.
Таким образом, ваша команда также может быть записана переносимо как
sed 's/\([0-9]\{1,\}\)-\([0-9]\{1,\}\)/\2:\1/g'
или как
sed 's/\([0-9][0-9]*\)-\([0-9][0-9]*\)/\2:\1/g'