(Uwaga: groupspolecenie, choć nadal przydatne, jest w większości zastępowane przez polecenie id .)
Użytkownik ma podstawową grupę, która jest tradycyjnie zdefiniowana w pliku
/etc/passwdpliku, z którego się loguje, ale która dziś może mieć inne źródła. Może być również członkiem dodatkowych grup, znanych jako grupy drugorzędne lub uzupełniające, tradycyjnie określone w pliku /etc/groups, ale które dziś mogą również pochodzić lub być implikowane z dodatkowych źródeł (takich jak NIS, LDAP, SAMBA itp.).
Grupy podstawowe i dodatkowe są definiowane w momencie logowania i pozostają aktualne . Jednak użytkownik może w dowolnym momencie zmienić swoją bieżącą aktywną grupę podstawową
za pomocą newgrppolecenia.
Proces logowania ustawia grupy podstawowe i dodatkowe. W późniejszym przypadku zazwyczaj wywołuje funkcję initcroups libc
, która kompiluje listę dodatkowych danych grupowych i przekazuje ją do
funkcji setgroups , która ustala ją w kontekście procesu.
Źródłem informacji initgroupssą:
używane przez bibliotekę GNU C i niektóre inne aplikacje do określania źródeł, z których można uzyskać informacje o usługach nazw w różnych kategoriach iw jakiej kolejności. Każda kategoria informacji jest identyfikowana przez nazwę bazy danych.
Te groupspokazy dowodzenia grupy tak obecnie stosowane do użytkownika, a lista rozpocznie z bieżącej grupy podstawowej , a następnie przez grupy uzupełniających od czasu logowania. Wszelkie zmiany źródeł danych po czasie logowania nie są odzwierciedlane na wyświetlanej liście.
groups usernameKomenda prosi Linuksa do obliczenia grupy dla tego użytkownika, który będzie to zrobić przy użyciu głównie pliki /etc/password
i /etc/groups, a następnie dodatkowych źródeł. Odzwierciedla to obecną sytuację plików systemowych i może nie być równa bieżącym grupom , które nadal obowiązują od momentu zalogowania.
groups usernameKomenda może dać inny wynik, jeśli nie korzystać ze wszystkich źródeł, że proces logowania używane do obliczania swoich dodatkowych grup, do czego najwyraźniej stało się w Twoim przypadku. Źródła te mogą być niedostępne z twojego loginu lub po prostu nie mogą być przeglądane przez polecenie.
Użycie id usernamepolecenia może dać lepsze wyniki, chociaż nie gwarantuje się, że będzie tak kompletne jak w procesie logowania. idKomenda jest nowsza niż, a miała być bardziej precyzyjny niż starej groupskomendy.
Chociaż groupspolecenie daje dokładny i poprawny wynik, dobrze pokazałeś, że groups usernamenie można na nim polegać.
Nie badając kodu źródłowego groupspolecenia, zgaduję, że implementacja groups usernamepolecenia w analizie dystrybucji Linuksa /etc/groups, która w twoim przypadku nie zawierała niczego, ale nie używa /etc/nsswitch.conf, z której pochodziły wszystkie twoje dodatkowe grupy. W związku z tym są wymienione jedynie podstawowej nazwy grupowego
jacob.
Aby uzyskać więcej informacji zobacz: