Respostas:
Com base em gid
, usuários do sistema e usuários do serviço podem ser separados da seguinte maneira:
/etc/passwd
contém lista para todos os usuários, juntamente com outras informações. Usuários de serviço ou usuários reais têm gid
maior ou igual a 1000. Portanto, uma lista de usuários reais pode ser obtida como,
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Também gid
é possível extrair uma lista de usuários do sistema ( <1000) como,
awk -F: '($3<1000){print $1}' /etc/passwd
Como funciona
O conteúdo de /etc/passwd
são como,
root:x:0:0:root:/root:/bin/bash
...
souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
Ao usá awk
- -F:
lo, divide o conteúdo de uma linha em vários campos tratados :
como separador de campos. O primeiro campo contém o nome de usuário e o terceiro campo possui o gid
.
Portanto, para extrair usuários reais, awk
basta verificar se o valor do terceiro campo é maior que igual a 1000 e não é ninguém e imprime o primeiro campo, ou seja, o nome do usuário.
Para listar todos os usuários do sistema, basta verificar se gid
é menor que 1000 e imprimir o nome do usuário.
Editar
Como você deseja listar root
(gid = 0) na lista real de usuários. Obtenha usuários reais como,
awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Obtenha usuários do sistema como,
awk -F: '($3<1000)&&($1!="root"){print $1}' /etc/passwd
Nota : estou sempre ignorando o nobody
usuário.
Para listar locais (usuários do sistema) que podem fazer login e ter homedir e GID menor que 1000
cat /etc/passwd | cut -d: -f 1,3,6 | grep "[1-9][0-9][0-9][0-9]" | grep "/home" | cut -d: -f1
Para listar todos os outros usuários: (principalmente usuários do sistema e GID menores que 1000):
cat /etc/passwd | cut -d: -f 1,3,6 | grep -v "[1-9][0-9][0-9][0-9]" | cut -d: -f1