Comando intuitivo per elencare tutti gli utenti sul sistema Ubuntu?


22

Esiste un comando intuitivo che posso usare per elencare gli utenti in una console su un sistema Ubuntu?

Quando cat /etc/passwdricevo un elenco di utenti difficile da leggere. Sarebbe bello vedere un elenco alfabetico, con voci disposte in colonne e con i nomi dei gruppi tra parentesi accanto agli ID del gruppo.


2
bene, / etc / passwd è organizzato in colonne ... se vuoi vedere solo alcune colonne, forse usa cut. Per alfabetico, c'è sort. Se hai bisogno dei nomi dei gruppi, gioca con join (che potrebbe effettivamente essere in grado di mostrare solo un sottoinsieme di colonne, tra l'altro).
njsg,

Risposte:


27

Buon modo per un buon output del file / etc / passwd:

$ column -nts: /etc/passwd

Ora puoi ordinarlo:

$ column -nts: /etc/passwd | sort

Con i nomi dei gruppi nell'ultima colonna (nessuna parentesi):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort

Grazie, questi comandi fanno quello che voglio. Per un principiante questo è molto scoraggiante però ... Suppongo che dovrò imparare come creare un alias per loro.
M. Dudley,

Nella colonna Centos l' nopzione non è piaciuta . column -ts: /etc/passwdha funzionato bene.
user1014251

9

Se si dispone dell'accesso root sulla macchina, è possibile effettuare le seguenti operazioni:

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

Come funziona

Diventa root per leggere il file shadow. Hai bisogno dei privilegi di root solo se vuoi verificare se l'utente ha una password impostata (utente umano), altrimenti puoi semplicemente cat /etc/passwdinvece di sudo grep ...:

sudo 

Mostra solo gli utenti che hanno una password impostata:

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

Ordina per nome utente:

sort 

Elimina tutte le informazioni tranne il nome utente:

cut -d: -f1

Scorrere i nomi utente e arricchirlo con le informazioni di gruppo:

while read user; do id $user; done

Formatta l'input in colonne:

column -ts' ,'

Usa vi per visualizzare il risultato:

vi '+set nowrap' - 

Se non si dispone dell'accesso root,

prova qualcosa del genere:

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

Il suo output è un po 'diverso, ma lo lascio come un esercizio al lettore per combinare le due parti in questa risposta in qualcosa che si adatta perfettamente al lavoro. (Non ami e basta sed?)


"Lo lascio come un esercizio al lettore ..." :)
Emanuel Berg,

1

In Ubuntu può essere il seguente:

sette campi da / etc / passwd memorizzati in $ 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

1

Qualcosa che faccio e funziona per i miei scopi è

ls /home

Certo, questo non ti dà davvero un elenco di utenti piuttosto un elenco di home directory dell'utente e di directory dell'utente precedente ma qualsiasi comando che vuoi fare su un utente che non esiste terminale ti dirà e potrebbe essere un suggerimento da rimuovere il file home che non ha un utente o lo sposta!


Mi piace questo. Fa il lavoro ad un livello base.
aalaap,

0

Ho pensato che sarebbe stato facile con join, ma joinrichiede che i file siano ordinati nel campo di join . Quindi ha richiesto (?) Una soluzione alternativa con file temporanei. L'output è ordinato per utente e visualizza l'ID utente, gruppo e gruppo.

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
}

Traduci un personaggio in un altro con tr; sortsecondo un campo chiave con -k, output in file con -o; si uniscono per quanto riguarda i campi nel primo ( -1) e secondo ( -2) file, output determinati campi nel primo file ( -o 1.1) così come il secondo ( ,2.1,2.3).


nota che /tmpsarebbe meglio, perché FHS afferma che /var/tmpnon verrà cancellato al riavvio, di cui non abbiamo davvero bisogno.
Strugee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.