Мы все знаем, что у нас есть пользователи системы и пользователи услуг. Я ищу способ разделить их на пользователей системы и список пользователей услуг.
Есть ли способ?
На основе 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