Como posso instalar o getent no Snow Leopard?

9

Eu tenho vários scripts que requerem o utilitário getent. Além disso, eu li várias dicas úteis que usam getent .

getenté um utilitário de rede amplamente disponível em sistemas baseados em Unix, * BSD e Linux. Essa ferramenta é comumente usada por administradores de sistemas e usuários avançados para pesquisar informações de rede (endereços IP, etc.). No que diz respeito aos nomes de host, getenté uma das poucas ferramentas que usam o /etc/hostsDNS e o DNS.

Como a Wikipedia diz :

O getent é um comando unix que ajuda o usuário a obter entradas em vários arquivos de texto importantes chamados bancos de dados.

O importante aqui é que getentprocurará os mesmos serviços de nomes na mesma ordem que a maioria dos aplicativos em um sistema semelhante ao Unix. Isso o torna inestimável ao depurar problemas no sistema ou no aplicativo. Ferramentas como dige nslookupespecificamente analisam apenas o DNS, enquanto dsclesperam que você especifique os serviços de nome que deseja pesquisar.

Eu gostaria de usar getentpara dois casos de teste:

  1. Analise /etc/hostsantes de consultar o DNS . Por exemplo, se eu adicionar testhost.example.orga /etc/hosts, getent hosts testhost.example.orgdeverá usar a entrada de /etc/hostsantes de consultar o DNS.

  2. Consulta LDAP usando getent

O MacPorts parece não fornecer um pacote getent.

Existe getentno Snow Leopard?

Stefan Lasiewski
fonte
O que é getent? O que isso faz? Em quais sistemas ele normalmente está disponível?
Cajunluke
3
Não há mapeamento 1: 1 para o getentOS X porque o OS X usa o DirectoryService para resolver problemas como nomes de host. Você pode dar alguns getentexemplos específicos de uso? Isso mostraria a maneira correspondente de obter essas informações no OS X mais fácil.
Ian C.
@CajunLuke: getentnormalmente está disponível em sistemas Unix, * BSD e Linux. Eu atualizei minha pergunta.
Stefan Lasiewski
Então, com o que você está tentando fazer getent? Resolver nomes de host /etc/hostsantes de usar o DNS?
Ian C.
Meu caso de uso mais comum é resolver nomes de host /etc/hostsanteriores ao DNS, o que é útil para servidores da Web e outros testes de rede. Mas eu (e outros administradores de sistemas) também utilizamos o getent para outras coisas, como solucionar problemas de LDAP.
Stefan Lasiewski

Respostas:

9

dscacheutilé provavelmente a melhor maneira de fazer isso. Ele não emula o processo de pesquisa usual, usa -o; portanto, você obtém os mesmos resultados de uma pesquisa padrão (incluindo cache, / etc / hosts, registros de computador nos serviços de diretório, DNS, mDNS para nomes .local, etc).

$ 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
Gordon Davisson
fonte
2

Não é ciência do foguete buscar a fonte getent do OpenSolaris (ou algum outro sistema operacional, eu tentaria um dos BSDs em vez do Linux) e portá-lo; Consegui que isso funcionasse principalmente desativando o material para o qual o macOS não tinha equivalente (máscaras de rede e projetos - específicos ao Solaris). Ou pode-se escrever em perl com bastante facilidade. Alguém fez um limitado há muito tempo, e eu fiz um mais completo; ele não suporta éteres porque não há pesquisa padrão para isso do perl, mas o resto parece funcionar bem.

getent.pl

R. Hamilton
fonte