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.