читать файлы напрямую VS getent

В разных сценариях оболочки я часто вижу два подхода к получению информации из баз данных, поддерживаемых библиотеками Switch Name Service, такими как /etc/group , /etc/hosts или /etc/services . Одна из них – утилита getent а другая – grep или другой инструмент обработки текста. Например:

 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:~# 

..или:

 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:~# 

Какой из этих двух подходов должен использоваться в сценариях? Я имею в виду одно из решений, более элегантное или стандартное, чем другое?

2 Solutions collect form web for “читать файлы напрямую VS getent”

Многое из этого будет связано с факторами, вытекающими из конкретной среды, в которой вы находитесь, но я предпочитаю genent метод genent потому что он ищет внешних пользователей, а также местных пользователей. В частности, он будет искать пользователей LDAP в моей среде с сервера LDAP, тогда как cat /etc/passwd или подобное не знают, что мой LDAP-сервер даже существует, а тем более имеет действительных пользователей на нем. Если все ваши пользователи всегда локальны, getent действительно не покупает вас, кроме «не нужно переписывать, если мы добавим LDAP-сервер через 10 лет».

getent подход будет более совместимым и предпочтительным. Эти файлы (/ etc / group, / etc / hosts, / etc / services, / etc / passwd, …) не всегда находятся в /etc они также могут быть в зависимости от операционной системы, в которой вы находитесь, в других мест. getent все равно найдет записи (если они находятся в системе).

Кроме того, как пояснил @John, getent ищет все настроенные базы данных nsswitch. Даже если у вас есть (несколько) внешних источников, где ваши пользователи аутентифицируются с разрешениями имен или имен через DNS-серверы и так далее. getent медленнее, потому что каждый поиск должен проходить через все базы данных.

  • Как определяется имя пользователя и можно ли скрыть компонент домена в имени пользователя winbind?
  • Проблема с отказом от переключения Linux между двумя коммутаторами cisco
  • хосты Getent не используют DNS
  • getent passwd, когда параметр passwd nsswitch: файлы ldap
  • Достигнуто разрешение имени хоста nss-хоста
  • Редактирование nsswitch.conf для проверки файлов, отличных от / etc / passwd, при поиске локальных файлов для деталей пользователя
  • Инструмент разрешения имен доменов, не относящийся к DNS
  • Создание локальных групп Unix для пользователей AD
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.