¿Comando fácil de usar para enumerar todos los usuarios en el sistema Ubuntu?

22

¿Existe un comando fácil de usar que pueda usar para enumerar usuarios en una consola en un sistema Ubuntu?

Cuando cat /etc/passwdconsigo una lista difícil de leer de los usuarios. Sería bueno ver una lista alfabetizada, con entradas organizadas en columnas, y con los nombres de los grupos entre paréntesis junto a las ID de los grupos.

M. Dudley
fuente
2
bueno, / etc / passwd está organizado en columnas ... si desea ver solo unas pocas columnas, quizás use cut. Para alfabetizado, hay sort. Si necesita los nombres de los grupos, juegue con join (que en realidad puede mostrar solo un subconjunto de columnas, por cierto).
njsg

Respuestas:

27

Buena manera de obtener una buena salida del archivo / etc / passwd:

$ column -nts: /etc/passwd

Ahora puedes ordenarlo:

$ column -nts: /etc/passwd | sort

Con nombres de grupos en la última columna (sin paréntesis):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort
Nykakin
fuente
Gracias, estos comandos hacen lo que quiero. Sin embargo, para un novato esto es muy desalentador ... Supongo que tendré que aprender a crear un alias para ellos.
M. Dudley
En la columna de Centos no me gustó la nopción. column -ts: /etc/passwdfuncionó bien
user1014251
9

Si tiene acceso de root en la máquina, puede hacer lo siguiente:

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

Cómo funciona

Conviértete en root para leer el archivo shadow. Solo necesita privilegios de root si desea verificar si el usuario tiene una contraseña establecida (usuario humano), de lo contrario puede simplemente en cat /etc/passwdlugar de sudo grep ...:

sudo 

Mostrar solo a los usuarios que tienen una contraseña establecida:

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

Ordenar por nombre de usuario:

sort 

Descarte toda la información excepto el nombre de usuario:

cut -d: -f1

Iterar a través de los nombres de usuario y enriquecerlo con información grupal

while read user; do id $user; done

Formatee la entrada en columnas:

column -ts' ,'

Use vi para ver el resultado:

vi '+set nowrap' - 

Si no tienes acceso de root,

prueba algo como esto:

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

Su salida es un poco diferente, pero lo dejo como un ejercicio para el lector para combinar las dos partes en esta respuesta en algo que se ajuste completamente al trabajo. (¿No solo amas sed?)

jippie
fuente
"Lo dejo como un ejercicio para el lector ..." :)
Emanuel Berg
1

En Ubuntu puede ser de la siguiente manera:

siete campos de / etc / passwd almacenados en $ 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
Fatima Zohra
fuente
1

Algo que hago y funciona para mis propósitos es

ls /home

De acuerdo, eso realmente no le da una lista de usuarios, sino una lista de los directorios de inicio de los usuarios y los directorios de usuarios anteriores, pero cualquier comando que desee ejecutar en un usuario que no existe terminal le dirá y podría ser una pista para eliminar el archivo de inicio que no tiene un usuario o lo mueve

Sam Hamblin
fuente
Me gusta esto. Hace el trabajo en un nivel básico.
aalaap
0

Pensé que esto sería fácil join, pero joinrequiere que los archivos se ordenen en el campo de unión . Entonces requirió (?) Una solución alternativa con archivos temporales. La salida se ordena por usuario y muestra usuario, grupo e ID de 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
}

Traducir un personaje a otro con tr; sortde acuerdo con un campo clave con -k, salida a archivo con -o; unirse con respecto a los campos en el primer ( -1) y segundo ( -2) archivo, generar ciertos campos en el primer archivo ( -o 1.1), así como el segundo ( ,2.1,2.3).

Emanuel Berg
fuente
tenga en cuenta que /tmpsería mejor, porque FHS establece que /var/tmpno se borrará en los reinicios, lo que realmente no necesitamos.
strugee