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