Comando amigável para listar todos os usuários no sistema Ubuntu?

22

Existe um comando fácil de usar que eu possa usar para listar usuários em um console em um sistema Ubuntu?

Quando cat /etc/passwdrecebo uma lista de usuários difícil de ler. Seria bom ver uma lista em ordem alfabética, com entradas organizadas em colunas e nomes de grupos entre parênteses, ao lado dos IDs do grupo.

M. Dudley
fonte
2
bem, / etc / passwd é organizado em colunas ... se você quiser ver apenas algumas colunas, talvez use cut. Para alfabetizado, existe sort. Se você precisar dos nomes dos grupos, jogue com join (que pode realmente mostrar apenas um subconjunto de colunas, btw).
precisa saber é

Respostas:

27

Boa maneira de obter uma boa saída do arquivo / etc / passwd:

$ column -nts: /etc/passwd

Agora você pode classificá-lo:

$ column -nts: /etc/passwd | sort

Com nomes de grupos na última coluna (sem parênteses):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort
Nykakin
fonte
Obrigado, esses comandos fazem o que eu quero. Para um novato, isso é muito assustador ... Suponho que terei que aprender a criar um apelido para eles.
M. Dudley
Na coluna Centos não gostei da nopção. column -ts: /etc/passwdfuncionou bem.
user1014251
9

Se você tiver acesso root na máquina, poderá fazer o seguinte:

sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -

Como funciona

Torne-se root para ler o arquivo de sombra. Você só precisa de privilégios de root se quiser verificar se o usuário tem uma senha definida (usuário humano); caso contrário, você pode simplesmente em cat /etc/passwdvez de sudo grep ...:

sudo 

Mostrar apenas usuários com uma senha definida:

grep -vE '^[^*!]+:[*!]:' /etc/shadow

Classificar por nome de usuário:

sort 

Descarte todas as informações, exceto o nome de usuário:

cut -d: -f1

Itere os nomes de usuário e o enriqueça com informações do grupo:

while read user; do id $user; done

Formate a entrada em colunas:

column -ts' ,'

Use vi para visualizar o resultado:

vi '+set nowrap' - 

Se você não tem acesso root,

tente algo como isto:

cut -d: -f1 /etc/passwd | sort | while read user; do id $user; done | sed 's/\(\()\|^\)[^(]*(\|)\)/ /g' | column -t

Seu resultado é um pouco diferente, mas deixo como exercício para o leitor combinar as duas partes desta resposta em algo que se encaixa perfeitamente no trabalho. (Você simplesmente não ama sed?)

jippie
fonte
"Eu deixá-lo como um exercício para o leitor ..." :)
Emanuel Berg
1

No Ubuntu, pode ser o seguinte:

sete campos de / etc / passwd armazenados em $ f1, f2 ..., $ f7

while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
 echo "User $f1 use $f7 shell and stores files in $f6 directory."
done < /etc/passwd
Fátima Zohra
fonte
1

Algo que eu faço e funciona para meus propósitos é

ls /home

É verdade que isso realmente não fornece uma lista de usuários, mas uma lista dos diretórios pessoais e dos diretórios anteriores, mas qualquer comando que você deseja executar em um usuário que não existe terminal informará e poderá ser uma dica para remover o arquivo inicial que não possui um usuário ou o move!

Sam Hamblin
fonte
Eu gosto disso. Faz o trabalho em um nível básico.
aalaap
0

Eu pensei que isso seria fácil join, mas joinrequer que os arquivos sejam classificados no campo de junção . Por isso, exigiu (?) Uma solução alternativa com arquivos temporários. A saída é classificada em usuário e exibe usuário, grupo e ID do grupo.

uag () {
  TEMP_GROUPS=/var/tmp/sorted_groups
  TEMP_USERS=/var/tmp/sorted_users
  cat /etc/group  | tr ":" " " | sort -k 3 -o $TEMP_GROUPS
  cat /etc/passwd | tr ":" " " | sort -k 4 -o $TEMP_USERS
  join -1 4 -2 3 -o 1.1,2.1,2.3 $TEMP_USERS $TEMP_GROUPS | sort
  rm $TEMP_GROUPS $TEMP_USERS
}

Traduzir um personagem para outro com tr; sortde acordo com um campo-chave com -k, saída para arquivo -o; junte em relação aos campos no primeiro ( -1) e no segundo ( -2) arquivo, produza determinados campos no primeiro arquivo ( -o 1.1) e no segundo ( ,2.1,2.3).

Emanuel Berg
fonte
note que /tmpseria melhor, porque a FHS afirma que /var/tmpnão será apagado nas reinicializações, o que realmente não precisamos.
strugee