(Примечание: groups
команда, хотя она все еще полезна, в основном заменяется командой id .)
У пользователя есть основная группа, которая традиционно определяется в файле, в
/etc/passwd
который он входит, но сегодня у него могут быть другие источники. Он также может быть членом дополнительных групп, известных как вторичные или дополнительные группы, которые традиционно указываются в файле /etc/groups
, но которые сегодня также могут поступать или подразумеваться из дополнительных источников (таких как NIS, LDAP, SAMBA и т. Д.).
Основные и дополнительные группы определяются во время входа в систему и остаются актуальными . Однако пользователь может в любое время изменить свою текущую активную первичную группу
с помощью newgrp
команды.
Процесс входа в систему устанавливает основные и дополнительные группы. В последующем он обычно вызывает initgroups функции libc
, которая составляет список дополнительных данных группы и передает его в
функцию setgroups , которая устанавливает его в контексте процесса.
Источниками информации для initgroups
являются:
используется библиотекой GNU C и некоторыми другими приложениями для определения источников, из которых можно получить информацию службы имен в ряде категорий, и в каком порядке. Каждая категория информации идентифицируется именем базы данных.
Команда groups
показывает группы, которые в настоящее время применяются к вашему пользователю, и список начнется с текущей основной группы, за которой следуют дополнительные группы с момента входа в систему. Любые изменения в источниках данных после входа в систему не отображаются в отображаемом списке.
groups username
Команда просит Linux , чтобы вычислить группы для этого пользователя, что он будет делать , используя главным образом файлы /etc/password
и /etc/groups
затем дополнительные источники. Это будет отражать текущую ситуацию с системными файлами и может не совпадать с текущими группами , действующими со времени входа в систему.
Команда groups username
может дать другой результат, если она не использует все источники, которые использовались процессом входа в систему для расчета ваших дополнительных групп, что, по-видимому, и произошло в вашем случае. Эти источники могут быть недоступны из вашего логина или просто не могут быть просмотрены командой.
Использование id username
команды может дать лучшие результаты, хотя также не гарантируется, что оно будет таким же полным, как и процесс входа в систему. Команда id
более поздняя, чем предыдущая, и должна была быть более точной, чем старая groups
.
Несмотря на то, что groups
команда дает точный и правильный результат, вы хорошо продемонстрировали, что от groups username
команды нельзя полагаться на то же самое.
Не изучая исходный код groups
команды, я бы предположил, что реализация groups username
команды в вашем дистрибутиве Linux анализирует /etc/groups
, которая в вашем случае ничего не содержит, но не использует /etc/nsswitch.conf
, из которой пришли все ваши дополнительные группы. Поэтому в списке указано только имя основной группы
jacob
.
Для получения дополнительной информации см .: