← Весь справочник

id, groups, whoami

Кто я и в каких группах — UID, GID, список групп текущего процесса или любого пользователя

id печатает числовые идентификаторы пользователя (UID) и групп (GID) с именами. Без аргумента — для текущего процесса, с именем пользователя — по данным из /etc/passwd и /etc/group. groups и whoami — короткие версии для частых вопросов «в каких я группах» и «под кем я работаю».

Синтаксис

id [опции] [пользователь…]
groups [пользователь…]
whoami

Опции id

ОпцияЧто печатает
(без опций)uid=1001(alice) gid=1001(alice) groups=1001(alice),1002(devs)
-uтолько UID (эффективный), например 1001
-gтолько основной GID
-Gвсе GID через пробел: основная группа и дополнительные
-nимена вместо чисел; работает только вместе с -u, -g или -G
-rреальный ID вместо эффективного (с -u, -g, -G); отличаются у setuid-программ
-zразделять значения нулевым байтом (только с -u/-g/-G)
-Zконтекст SELinux; на ядре без SELinux — ошибка

Частые сочетания: id -un — имя (то же, что whoami), id -gn — имя основной группы, id -Gn — имена всех групп (то же, что groups).

Как читать вывод

ПолеСмысл
uid=1001(alice)номер пользователя и его имя; root — всегда 0
gid=1001(alice)основная группа: с ней создаются новые файлы
groups=…все группы, включая основную; от них зависят права доступа к файлам

groups alice печатает в формате alice : alice devs, а groups без аргумента — просто alice devs.

Коды возврата

КодКогда
0всё в порядке
1пользователя нет: id: 'bob': no such user

Примеры

# под кем я работаю
whoami
id -un

# полная информация о пользователе
id alice

# только номер — удобно в скриптах
id -u alice

# проверить, что скрипт запущен от root
if [ "$(id -u)" -ne 0 ]; then echo "нужен root" >&2; exit 1; fi

# состоит ли alice в группе devs
id -nG alice | grep -qw devs && echo "да"

# существует ли пользователь
id bob >/dev/null 2>&1 || echo "нет такого пользователя"

# группы текущего процесса и группы по базе — сравни после usermod -aG
id -Gn
id -Gn "$(whoami)"

Подводные камни

  • id без аргумента и id имя могут не совпадать. Без аргумента показаны группы уже запущенного процесса, с именем — то, что сейчас записано в /etc/group. После usermod -aG devs alice команда id alice сразу покажет devs, а в старой сессии alice группы не будет, пока она не войдёт заново (или не запустит newgrp devs, su - alice).
  • -n без -u/-g/-G — ошибка: id -n пишет «cannot print only names or real IDs in default format».
  • whoami показывает эффективного пользователя, а не того, кто вошёл в систему. После sudo -i или su это root. Кто вошёл изначально, видно в who или logname (без терминала logname пишет «no login name»).
  • $USER — просто переменная, её может не быть (в cron, в контейнере) или её могли переопределить. В скриптах надёжнее id -un или $EUID в bash.
  • Имя в скобках печатается, только если номер есть в базе пользователей. Файлы из чужой системы или архива покажут голые числа и в ls -l.

См. также

useradd · su · sudo · getent · chown · who-last