(Примечание: 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.
Для получения дополнительной информации см .: