Команда id: проверка UID и групп, whoami, groups и дополнительные группы
На сервере Linux UID и группы текущей учётной записи проверяют командой id; если нужно только имя учётной записи, используют whoami, а если только имена групп — groups. При запуске трёх команд по очереди на серверах AlmaLinux 9 и Debian 12 и сравнении вывода id -un и whoami вывели одно и то же имя учётной записи, а groups вывела список групп из id, оставив только имена.
Вывод ниже получен на сервере AlmaLinux 9.8 под учётной записью root и на сервере Debian 12 под обычной учётной записью. Имя и номера учётной записи для входа и её дополнительные группы заменены примерными значениями (user1, 1000, adm, systemd-journal).
1️⃣ Базовое использование команды id
При запуске id без опций сведения об учётной записи, запустившей текущую оболочку, выводятся одной строкой. Под учётной записью root все три поля были равны 0(root).
iduid=0(root) gid=0(root) groups=0(root)Поле uid — это номер и имя учётной записи, поле gid — номер и имя основной группы (primary group). Поле groups — это все группы, в которые входит учётная запись, причём первой идёт основная группа.
Если после id указать имя учётной записи, выводятся сведения об этой учётной записи. При проверке обычной учётной записи user1, у которой есть дополнительные группы, в поле groups после основной группы user1 шли adm и systemd-journal. Эти группы, в которые учётная запись входит помимо основной, и есть дополнительные группы (supplementary group).
id user1uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)У многих учётных записей номера UID и gid совпадают, поэтому два числа легко принять за одно значение, но у учётной записи adm, которая есть на сервере по умолчанию, UID был равен 3, а номер основной группы — 4. У учётной записи operator основной группой была root.
id admuid=3(adm) gid=4(adm) groups=4(adm)id operatoruid=11(operator) gid=0(root) groups=0(root)Если указать несколько учётных записей, они выводятся по одной в строке.
id root binuid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)Если указать несуществующую учётную запись, появляется ошибка [no such user], а код завершения был равен 1.
id no-such-user9id: 'no-such-user9': no such userecho $?1Код завершения для существующей учётной записи равен 0, поэтому в скрипте его можно использовать как условие проверки, существует ли учётная запись.
2️⃣ Опции команды id
Чтобы передать скрипту только один номер из всего вывода, опцией выбирают одно поле. -u выводит UID, -g — номер основной группы, а -G — все номера групп, в которые входит учётная запись.
id -u0id -u daemon2id -G user11000 4 190Вместе с -n вместо номеров выводятся имена. При проверке групп user1 через [id -Gn] три номера превратились в три имени.
id -Gn user1user1 adm systemd-journalid -gn user1user1-n и -r используют вместе с одной из опций -u, -g и -G. При указании только -n появилась ошибка ниже.
id -nid: cannot print only names or real IDs in default format-r выводит реальный (real) ID вместо эффективного (effective) ID. Запуск [id -ur] в оболочке учётной записи root вывел 0. Если указать вместе две или больше опций, выбирающих номер, например -u и -g, появляется ошибка [cannot print "only" of more than one choice]. Опции собраны ниже.
| Опция | Копировать | Описание |
|---|---|---|
| -u--user | Выводит номер UID | |
| -g--group | Выводит номер основной группы | |
| -G--groups | Выводит все номера групп, в которые входит учётная запись | |
| -n--name | Вместе с -u, -g или -G выводит имя вместо номера | |
| -r--real | Вместе с -u, -g или -G выводит реальный (real) ID вместо эффективного ID |
| Опция | Копировать | Описание |
|---|---|---|
| -Z--context | Выводит только контекст безопасности процесса | |
| -z--zero | Разделяет элементы вывода символами NUL вместо пробелов; недоступно в формате по умолчанию | |
| -a | Принимается только для совместимости с другими версиями id и игнорируется | |
| --help | Выводит справку | |
| --version | Вывести версию |
🔲 Симулятор команды id
Симулятор ниже начинает работу под учётной записью user1, у которой есть дополнительные группы. Добавив группу wheel чипом [🖊 Other window], можно сравнить [id] и [id user1], а чипом [🔁 Log in again] проверить группы новой оболочки.
3️⃣ Команда whoami и id -un
Если нужно только имя учётной записи текущей оболочки, запускают whoami. Страница man описывает whoami как ту же команду, что и [id -un]. Под учётной записью root обе команды вывели root.
whoamirootid -unrootПод обычной учётной записью на сервере Debian 12 обе команды тоже вывели одно и то же имя учётной записи.
whoamiuser1id -unuser1whoami выводит имя учётной записи, соответствующее текущему эффективному (effective) UID. Команда проверяет только текущую учётную запись, поэтому, если добавить после неё имя учётной записи, появляется ошибка.
whoami user1whoami: extra operand 'user1'
Try 'whoami --help' for more information.Имя или номер другой учётной записи проверяют, указав эту учётную запись после id.
id -un user1user1Если вместо -un указать -u, на том же месте вместо имени учётной записи выводится номер UID.
4️⃣ Команда groups и дополнительные группы
groups выводит только имена групп одной строкой. Без имени учётной записи выводятся группы текущей оболочки, и под учётной записью root это была одна группа root.
groupsrootЕсли указать имя учётной записи, выводятся имя учётной записи и после двоеточия группы. При указании нескольких учётных записей они выводились по одной в строке.
groups user1 daemonuser1 : user1 adm systemd-journal
daemon : daemonОсновная группа и дополнительные группы записываются в разных местах. Дополнительные группы записаны как участники в четвёртом поле базы данных групп (/etc/group), а основная группа — как номер в четвёртом поле сведений об учётной записи (/etc/passwd).
getent group admadm:x:4:user1getent group user1user1:x:1000:getent passwd daemondaemon:x:2:2:daemon:/sbin:/sbin/nologinУ группы user1, основной группы user1, четвёртое поле было пустым, а в дополнительной группе adm user1 был записан как участник. Число 2 в четвёртом поле строки учётной записи daemon — это номер основной группы.
Для добавления учётной записи в дополнительную группу служит команда usermod в виде [usermod -aG группа учётная запись]. Если указать только -G без -a, учётная запись выпадет из прежних дополнительных групп, не указанных в списке, поэтому -a указывают вместе с ней.
groups, запущенная без имени учётной записи, выводит группы процесса текущей оболочки. Страница man объясняет, что при изменении базы данных групп это значение может отличаться от базы данных.
Поэтому сразу после изменения групп проверьте группы в базе данных через [groups учётная запись] или [id учётная запись], а чтобы они применились в оболочке, войдите заново. Команда, которая меняет текущий ID группы без выхода из системы, — newgrp.
🔢 FAQ & рекомендуемые материалы
Создание учётных записей
Linux: команда useradd & команда passwd
Команды, которые создают новую учётную запись пользователя и задают для неё пароль.
Удаление учётной записи
[Linux] Команда userdel: удаление учётных записей пользователей
Команда, которая удаляет ненужную учётную запись пользователя и заодно очищает её домашнюю папку.
Срок действия пароля
Команда chage в Linux
Команда, которая проверяет и изменяет срок действия и дату истечения пароля учётной записи пользователя.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.