(Примечание. Команда groups
, хотя и по-прежнему полезна, в основном заменяется командой id.)
У пользователя есть основная группа, которая традиционно определяется в файле /etc/passwd
которую он входит, но сегодня у нее могут быть другие источники.
Он также может быть членом дополнительных групп, известных как вторичные или дополнительные группы, которые традиционно указываются в файле /etc/groups
, но которые сегодня также могут быть получены или подразумеваться из дополнительных источников (таких как NIS, LDAP, SAMBA и т.д.). ,
Основные и дополнительные группы определяются во время входа в систему и остаются актуальными.
Однако пользователь может в любое время изменить свою текущую активную первичную группу с помощью команды newgrp
.
Процесс входа в систему устанавливает основные и дополнительные группы.
В последующем он обычно вызывает функцию initcroups 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
.
Для получения дополнительной информации см .: