Polecenie id: sprawdzanie UID i grup, whoami, groups i grupy dodatkowe

Środowisko testoweRodzina RHELAlmaLinux 9.8coreutils 8.32konto rootDebian 12 · coreutils 9.1 zwykłe konto
Polecenia użytkowników · grupid, whoami, groupsLokalizacja/usr/bin/id

Na serwerze z Linuksem UID i grupy bieżącego konta sprawdza się poleceniem id; gdy potrzebna jest tylko nazwa konta, używa się whoami, a gdy tylko nazwy grup — groups. Po uruchomieniu kolejno trzech poleceń na serwerach AlmaLinux 9 i Debian 12 i porównaniu wyników okazało się, że id -un i whoami wypisały tę samą nazwę konta, a groups wypisało listę grup z id z samymi nazwami.

Poniższe wyniki pochodzą z serwera AlmaLinux 9.8 z konta root i z serwera Debian 12 ze zwykłego konta. Nazwę i numery konta logowania oraz grupy dodatkowe zastąpiono wartościami przykładowymi (user1, 1000, adm, systemd-journal).

1️⃣ Podstawowe użycie polecenia id

  • ↪️ Czytanie trzech pól uid, gid i groups

Uruchomienie id bez opcji wypisuje w jednym wierszu informacje o koncie, które uruchomiło bieżącą powłokę. Na koncie root wszystkie trzy pola miały wartość 0(root).

id
uid=0(root) gid=0(root) groups=0(root)

Pole uid to numer i nazwa konta, a pole gid to numer i nazwa grupy podstawowej (primary group). Pole groups to wszystkie grupy, do których należy konto, z grupą podstawową na początku.

Po wpisaniu nazwy konta za id wypisywane są informacje o tym koncie. Sprawdzenie zwykłego konta user1, które ma grupy dodatkowe, pokazało w polu groups po grupie podstawowej user1 grupy adm i systemd-journal. Te grupy, do których konto należy poza grupą podstawową, to grupy dodatkowe (supplementary group).

id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)

Wiele kont ma ten sam numer UID i gid, więc łatwo uznać obie liczby za tę samą wartość, ale konto adm, które jest na serwerze domyślnie, miało UID 3 i numer grupy podstawowej 4. Konto operator miało root jako grupę podstawową.

id adm
uid=3(adm) gid=4(adm) groups=4(adm)
id operator
uid=11(operator) gid=0(root) groups=0(root)

Po wpisaniu kilku kont wypisywane jest jedno w każdym wierszu.

id root bin
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)

Po wpisaniu konta, które nie istnieje, pojawia się błąd [no such user], a kod wyjścia wynosił 1.

id no-such-user9
id: 'no-such-user9': no such user
echo $?
1

Kod wyjścia po wpisaniu istniejącego konta to 0, więc w skrypcie można go użyć jako warunku sprawdzającego, czy konto istnieje.

2️⃣ Opcje polecenia id

  • ↪️ -u, -g, -G dla numerów i -n dla nazw

Żeby przekazać do skryptu tylko jeden numer z całego wyniku, opcją wybiera się jedno pole. -u wypisuje UID, -g numer grupy podstawowej, a -G wszystkie numery grup, do których należy konto.

id -u
0
id -u daemon
2
id -G user1
1000 4 190

Z dodatkiem -n zamiast numerów pojawiają się nazwy. Sprawdzenie grup user1 przez [id -Gn] zamieniło trzy numery na trzy nazwy.

id -Gn user1
user1 adm systemd-journal
id -gn user1
user1

-n i -r stosuje się razem z jedną z opcji -u, -g i -G. Wpisanie samego -n dało poniższy błąd.

id -n
id: cannot print only names or real IDs in default format

-r wypisuje rzeczywisty (real) ID zamiast efektywnego (effective) ID. Uruchomienie [id -ur] w powłoce konta root wypisało 0. Wpisanie razem dwóch lub więcej opcji wybierających numer, na przykład -u i -g, daje błąd [cannot print "only" of more than one choice]. Opcje zebrano poniżej.

OpcjaKopiujOpis
-u--userWypisuje numer UID
-g--groupWypisuje numer grupy podstawowej
-G--groupsWypisuje wszystkie numery grup, do których należy konto
-n--nameRazem z -u, -g lub -G wypisuje nazwę zamiast numeru
-r--realRazem z -u, -g lub -G wypisuje rzeczywisty (real) ID zamiast efektywnego ID
OpcjaKopiujOpis
-Z--contextWypisuje tylko kontekst bezpieczeństwa procesu
-z--zeroRozdziela elementy wyniku znakami NUL zamiast spacji; niedostępne w formacie domyślnym
-aPrzyjmowana tylko dla zgodności z innymi wersjami id i ignorowana
--helpWypisuje pomoc
--versionWypisanie wersji

🔲 Symulator polecenia id

Symulator poniżej zaczyna od konta user1, które ma grupy dodatkowe. Po dodaniu grupy wheel chipem [🖊 Other window] można porównać [id] i [id user1], a chipem [🔁 Log in again] sprawdzić grupy nowej powłoki.

Symulator polecenia idcoreutils 8.32
[root@server work]#
Działa tylko w przeglądarce. Po zmianie grup chipem [🖊 Other window] porównuje się [id] i [id user1], a chipem [🔁 Log in again] sprawdza grupy nowej powłoki.

3️⃣ Polecenie whoami i id -un

  • ↪️ Sprawdzanie nazwy bieżącego konta i sprawdzanie innych kont

Gdy potrzebna jest tylko nazwa konta bieżącej powłoki, uruchamia się whoami. Strona man opisuje whoami jako to samo polecenie co [id -un]. Na koncie root oba polecenia wypisały root.

whoami
root
id -un
root

Także na zwykłym koncie na serwerze Debian 12 oba polecenia wypisały tę samą nazwę konta.

whoami
user1
id -un
user1

whoami wypisuje nazwę konta odpowiadającą bieżącemu efektywnemu (effective) UID. To polecenie sprawdza tylko bieżące konto, więc dopisanie za nim nazwy konta daje błąd.

whoami user1
whoami: extra operand 'user1'
Try 'whoami --help' for more information.

Nazwę lub numer innego konta sprawdza się, wpisując to konto za id.

id -un user1
user1

Po wpisaniu -u zamiast -un w tym samym miejscu pojawia się numer UID zamiast nazwy konta.

4️⃣ Polecenie groups i grupy dodatkowe

  • ↪️ Grupa podstawowa i grupy dodatkowe oraz powłoka po zmianie grup

groups wypisuje w jednym wierszu same nazwy grup. Bez nazwy konta pojawiają się grupy bieżącej powłoki, a na koncie root był to sam root.

groups
root

Po wpisaniu nazwy konta pojawia się nazwa konta, a po dwukropku grupy. Po wpisaniu kilku kont wypisane zostało jedno w każdym wierszu.

groups user1 daemon
user1 : user1 adm systemd-journal
daemon : daemon

Grupa podstawowa i grupy dodatkowe są zapisywane w różnych miejscach. Grupy dodatkowe są zapisane jako członkowie w czwartym polu bazy danych grup (/etc/group), a grupa podstawowa jako numer w czwartym polu informacji o koncie (/etc/passwd).

getent group adm
adm:x:4:user1
getent group user1
user1:x:1000:
getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

Grupa user1, grupa podstawowa konta user1, miała czwarte pole puste, a w grupie dodatkowej adm konto user1 było zapisane jako członek. Liczba 2 w czwartym polu wiersza konta daemon to numer grupy podstawowej.

Do dodania konta do grupy dodatkowej służy polecenie usermod w postaci [usermod -aG grupa konto]. Przy samym -G bez -a konto wypada z dotychczasowych grup dodatkowych, których nie wpisano na liście, dlatego -a wpisuje się razem z nim.

groups uruchomione bez nazwy konta wypisuje grupy bieżącego procesu powłoki. Strona man wyjaśnia, że po zmianie bazy danych grup ta wartość może różnić się od bazy danych.

Dlatego zaraz po zmianie grup sprawdza się grupy w bazie danych przez [groups konto] lub [id konto], a żeby zmiana objęła powłokę, trzeba zalogować się ponownie. Poleceniem zmieniającym bieżący ID grupy bez wylogowania jest newgrp.

🔢 FAQ & polecane treści

Można. Uruchomienie [id 0] na serwerze AlmaLinux 9.8 wypisało to samo co [id root]: uid=0(root) gid=0(root) groups=0(root).

Od numeru zapisanego w UID_MIN w pliku /etc/login.defs. Na serwerze AlmaLinux 9.8 było to 1000, a SYS_UID_MIN i SYS_UID_MAX w tym samym pliku wynosiły 201 i 999, czyli zakres kont systemowych.

who am i to who z dwoma dopisanymi słowami; działa tak samo jak opcja -m i wypisuje jeden wiersz z informacją o logowaniu terminala, w którym się pisze. whoami wypisuje tylko jeden wiersz z nazwą konta bieżącego efektywnego UID.

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 9   +   3   =