Назад | Перейти на главную страницу

Команда 'getent'

Часть 1

Является getent должен быть исполняемым файлом?

В моей настройке zsh я вижу, что getent фактически определяется как функция

$ which getent   
getent () {
    if [[ $2 = <-> ]]
    then
        grep ":$2:[^:]*$" /etc/$1
    else
        grep "^$2:" /etc/$1
    fi
}

Если я хочу выполнить его из оболочки bash,

bash -c  "getent passwd user"  

Я получаю getent: command not found ошибка.

Часть 2

В Mac OSX, getent не выполняется независимо от того, действителен идентификатор пользователя или нет. Оказывается, идентификатор пользователя не хранится в /etc/passwd файл. Почему так? А какая альтернатива?

В системах Linux, Solaris и (я считаю) * BSD getent является исполняемым файлом и будет обращаться к тому же набору баз данных, что и обычные функции поиска (файлы / etc, LDAP, NIS и т.д.).

Os-x не предоставляет getent, но вы можете получить аналогичную функциональность, используя dscacheutil или dsutil программы (которые общаются с серверной частью службы каталогов). Поиск в Интернете по запросу "osx getent" даст вам более подробную информацию.

getent И dsutil также не работают для меня на OSX bash.

Как Павел указывает выше, эта команда dscacheutil будет работать. Я смог проверить конкретного пользователя с помощью этой команды:

dscacheutil -q user -a name <username>. 

Список пользователей с этой командой

dscacheutil -q user | grep 'name:'