leu arquivos diretamente VS getent

5

Em vários shell scripts, muitas vezes vejo duas abordagens para obter informações de bancos de dados suportados pelas bibliotecas Name Service Switch , como /etc/group , /etc/hosts ou /etc/services . Um é getent utility e outro é grep ou alguma outra ferramenta de processamento de texto. Por exemplo:

root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 


root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 

.. ou:

root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~# 

root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~# 

Quais dessas duas abordagens acima devem ser usadas em scripts? Quero dizer, é uma das soluções mais elegantes ou padrão que a outra?

    
por Martin 17.04.2015 / 14:29

2 respostas

7

Muito disso se resumirá a fatores derivados do ambiente específico em que você está, mas eu prefiro o método getent porque ele procura usuários externos e também usuários locais. Especificamente, ele procurará os usuários do LDAP em meu ambiente a partir do servidor LDAP, enquanto um cat /etc/passwd ou similar não tem idéia de que o meu servidor LDAP existe, muito menos tem usuários válidos nele. Se todos os seus usuários são sempre locais, getent realmente não lhe compra muito além de "não é necessário reescrever se adicionarmos um servidor LDAP em 10 anos".

    
por 17.04.2015 / 14:38
4

A abordagem getent seria mais compatível e preferível. Esses arquivos (/ etc / group, / etc / hosts, / etc / services, / etc / passwd, ...) nem sempre estão em /etc , eles também podem ser, dependendo do sistema operacional em que você está, outros lugares. getent encontraria as entradas (se estiver no sistema).

Também como @John afirmou, getent procura através de todos os bancos de dados nsswitch configurados. Mesmo se você tiver (várias) fontes externas conectadas, onde seus usuários são autenticados com ou nomeiam resoluções através de servidores DNS e assim por diante. getent , portanto, é mais lento, porque toda pesquisa deve passar por todos os bancos de dados.

    
por 17.04.2015 / 15:37