Как я могу установить getent на Snow Leopard?

9

У меня есть несколько скриптов, которые требуют утилиты getent. Кроме того, я прочитал несколько полезных советов, которые используют getent .

getentэто сетевая утилита, которая широко доступна в Unix, * BSD и Linux-системах. Этот инструмент обычно используется системными администраторами и опытными пользователями для поиска информации о сети (IP-адреса и т. Д.). Что касается имен хостов, getentэто один из немногих инструментов, которые используют /etc/hostsи DNS.

Как говорит Википедия :

getent - это команда unix, которая помогает пользователю получить записи в ряде важных текстовых файлов, называемых базами данных.

Здесь важно то, что они getentбудут искать те же службы имен в том же порядке, что и большинство приложений в Unix-подобных системах. Это делает его бесценным при отладке системы или проблем приложения. Такие инструменты, как digи, в nslookupчастности, обращают внимание только на DNS, в то время как dsclвы ожидаете, что вам будут прописаны службы имен, которые вы хотите найти.

Я хотел бы использовать getentдля двух тестовых случаев:

  1. Разбирать /etc/hostsперед запросом DNS . Например, если я добавлю testhost.example.orgв /etc/hosts, то getent hosts testhost.example.orgдолжен использовать запись из /etc/hostsперед запросом DNS.

  2. Запрос LDAP с использованием getent

MacPorts не предоставляет пакет услуг getent.

Существует ли getentна Snow Leopard?

Стефан Ласевский
источник
Что такое getent? Что оно делает? На каких системах это обычно доступно?
Cajunluke
3
В getentOS X нет сопоставления 1: 1, потому что OS X использует DirectoryService для разрешения таких вещей, как имена хостов. Можете ли вы привести конкретные getentпримеры использования? Было бы проще показать вам соответствующий способ получить эту информацию в OS X.
Ян С.
@CajunLuke: getentобычно доступен в Unix, * BSD и Linux-подобных системах. Я обновил свой вопрос.
Стефан Ласевски
Так что же вы пытаетесь сделать getent? Разрешить имена хостов /etc/hostsперед использованием DNS?
Ян С.
Мой наиболее распространенный вариант использования - разрешение имен хостов /etc/hostsдо DNS, что полезно для веб-сервера и других сетевых тестов. Но я (и другие системные администраторы) использую getent и для других целей, таких как устранение неполадок LDAP.
Стефан Ласевский

Ответы:

9

dscacheutilвероятно, лучший способ сделать это. Он не эмулирует обычный процесс поиска, он использует его, поэтому вы фактически получите те же результаты, что и стандартный поиск (включая кеширование, / etc / hosts, записи компьютеров в службах каталогов, DNS, mDNS для имен .local, так далее).

$ dscacheutil -q host -a name www.apple.com
name: e3191.c.akamaiedge.net
alias: www.apple.com www.isg-apple.com.akadns.net www.apple.com.edgekey.net 
ip_address: 69.192.45.15

$ dscacheutil -q host -a name gordons-mbp.local
name: gordons-mbp.local
ipv6_address: fe80:5::e6ce:8fff:fe50:136

name: gordons-mbp.local
ip_address: 192.168.10.249

$ dscacheutil -q host -a ip_address 127.0.0.1
name: localhost
alias: 1.0.0.127.in-addr.arpa 
ip_address: 127.0.0.1

$ dscacheutil -q user -a name gordon
name: gordon
password: ********
uid: 501
gid: 20
dir: /Users/gordon
shell: /bin/bash
gecos: Gordon Davisson
Гордон Дэвиссон
источник
2

Это не ракетостроение - выискивать источник гетента из OpenSolaris (или другой ОС, я бы попробовал одну из BSD, а не Linux) и портировать ее; Я получил это, чтобы работать в основном, просто отключив материал, для которого у macOS не было эквивалента (маски масок и проекта - специфичные для Solaris). Или можно написать это на Perl довольно легко. Кто-то давным-давно сделал ограниченный, а я сделал более полный; он не поддерживает эфиры, потому что нет стандартного поиска по Perl, но все остальное работает нормально.

getent.pl

Р. Гамильтон
источник