Ответы:
На основе gid
пользователей системы и пользователей услуг можно разделить следующим образом:
/etc/passwd
содержит список для всех пользователей вместе с некоторой другой информацией. Пользователи службы или реальные пользователи имеют gid
больше или равно 1000. Таким образом, список реальных пользователей может быть получен как,
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Также список пользователей системы ( gid
<1000) можно извлечь как,
awk -F: '($3<1000){print $1}' /etc/passwd
Как это работает
Содержание /etc/passwd
как,
root:x:0:0:root:/root:/bin/bash
...
souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
При использовании awk
с -F:
ним содержимое строки разбивается на несколько полей, рассматриваемых :
как разделитель полей. Первое поле содержит имя пользователя, а третье поле имеет gid
.
Следовательно, чтобы извлечь реальных пользователей, awk
просто проверьте, что значение третьего поля больше, чем равно 1000, и оно не никем и печатает первое поле, то есть имя пользователя.
Чтобы перечислить всех пользователей системы, он просто проверяет, gid
что меньше 1000, и печатает имя пользователя.
редактировать
Как вы хотите, чтобы список root
(GID = 0) в реальном списке пользователей. Получить реальных пользователей, как,
awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Получить пользователей системы как,
awk -F: '($3<1000)&&($1!="root"){print $1}' /etc/passwd
Обратите внимание, я всегда игнорирую nobody
пользователя.
Для списка локальных (системных пользователей), которые могут войти и иметь homedir и GID менее 1000
cat /etc/passwd | cut -d: -f 1,3,6 | grep "[1-9][0-9][0-9][0-9]" | grep "/home" | cut -d: -f1
Чтобы перечислить всех других пользователей: (в основном системные пользователи и GID менее 1000):
cat /etc/passwd | cut -d: -f 1,3,6 | grep -v "[1-9][0-9][0-9][0-9]" | cut -d: -f1