5 votos

Cómo obtener el número de usuarios de un Mac

Quiero saber cuántos usuarios locales hay. Cómo se puede hacer esto desde una línea de comandos?

Nota: No estoy buscando un lista de los usuarios, puedo hacerlo fácilmente.

9voto

Tomek Tarczynski Puntos 986

Aunque MacOS aparentemente no proporciona un método de línea de comandos para listar usuarios interactivos reales, podemos tomar un atajo y obtener CoreServices que haga el trabajo duro por nosotros utilizando AppleScript:

$ osascript -e $'tell application "System Events" -- ACCOUNTS\ncount user\nend tell'
1

Lo que equivale a ejecutar este AppleScript:

tell application "System Events" -- ACCOUNTS
  count user
end tell

Esto debería corresponder al número de cuentas que ve en Preferencias del Sistema.

Desafortunadamente, este método puede disparar una alerta GUI para aprobar la automatización de Eventos del Sistema por su terminal o programa shell.

6voto

Douglas Puntos 10417

Método rápido

Para obtener una lista de los usuarios a través de la línea de comandos, utilice awk en colaboración con dscl

awk '! /^_/ {print} END{print NR}' <<< $(dscl . -list users)

Cuando utilice el comando dscl . -list users obtendrá todos los usuarios, incluidos los usuarios de servicios y demonios.

  • Para excluir esto, hacemos una coincidencia de patrón negativa utilizando awk . En ! /^_/ coincidirá con todo lo que no empiece por guión bajo.

  • En {print NR} mostrará el número de registros generados. Este será el número de usuarios.

Función dedicada/script

He creado una pequeña función/script que utilizará dos utilidades incorporadas:

  • dscl . -list /Users para obtener una lista de los usuarios
  • dsmemberutil checkmembership -U <username> -G <group> para verificar que el usuario es miembro de un grupo determinado. Esto ayudará a eliminar tanto a los usuarios como a los demonios del sistema y limitarlo sólo a los usuarios reales.

El script funciona tomando la lista de usuarios generada por dscl y consultando cada uno de ellos contra un grupo conocido; en este caso Staff . Imprimirá los usuarios de ese grupo y un recuento.

Puedes crear un grupo específico para usuarios estudiantes y filtrarlo para mayor precisión. .

El nombre del grupo puede modificarse según sea necesario. El script de abajo está configurado como un función. . Fuente del archivo (en .bash_profile , zprofile o similar) y luego llamar al nombre de la función. La alternativa es extraer el código (entre llaves - { } - y ejecutarlo como un script.

A continuación se muestra un ejemplo de cómo funciona.

% . ./users.sh          <——— sourcing the file
% listUsers             <——- calling the function

allan
testdude

Number of Users on this Mac: 2

Copie y pegue esto en un script o directamente en .bash_profile o .zprofile . Obtenga el archivo o cierre y vuelva a abrir Termina/iTerm y llame a la función. Si lo pega como un script independiente, copie lo que hay entre las llaves ( { } ).

listUsers () 
{ 

local userGRP="Staff"
local count=0
declare -a users_arr=($(dscl . -list /Users))

for uname in  ${users_arr[@]}
do
  result=$(dsmemberutil checkmembership -U $uname -G $userGRP)
  if [[ $result =~ "is a member" ]]
  then
    printf "%s\n $uname"
    ((count++))
  fi
done

printf "\n\nNumber of Users on this Mac: %s\n\n"  $count

} 

Ambas soluciones funcionarán tanto en Bash (3.x) como en Zsh. Es decir, funcionarán en versiones anteriores de MacOS que tengan el shell Bash por defecto.

1voto

Program5284 Puntos 18

Puede utilizar wc -l con ls -A .

En primer lugar, abra Terminal y ejecute cd /Users .

Entonces, ya que ejecutar ls -A le ofrece la lista de todos los usuarios (uno por línea) y wc -l el número de líneas en su ventana Terminal, ejecutando ls -A | wc -l (obtener el número de líneas para un comando dado) le dará el número de líneas dado por ls -A y, por tanto, te da el número de usuarios del mac. Pero, también podría haber una entrada (para algunas personas que tocaron el /Users carpeta) /Users/Shared que obviamente no es un usuario. Basta con tomar el número obtenido anteriormente (con ls -A | wc -l ) y réstale 1, te dará el número exacto de usuarios. Véase también Comentario de @nohillside sobre cómo hacerlo automáticamente (sin tener que hacer -1). También, puede haber otros archivos, pero sólo comprueba si hay algunos "usuarios" que no son realmente unos y resta el número al total.

Tenga en cuenta que puede obtener información directamente del /Users/ utilizando ls /Users | wc -l . (Del comentario de @zeeple)

1voto

WGroleau Puntos 255

Las respuestas y los comentarios han proporcionado varios métodos que suelen funcionar, pero no están garantizados. He aquí otro método poco fiable:

sudo last | awk '{print $1}' | sort -u | egrep -v "(reboot|shutdown|wtmp)"

listará todos los usuarios que han iniciado sesión recientemente . Puede incluir root. Así que

sudo last | awk '{print $1}' | sort -u | egrep -v "(reboot|shutdown|wtmp)" | wc -l

los contará. Pero reste uno (1) porque last también incluye una línea en blanco.

No sé exactamente qué significa "recientemente", pero las tres últimas líneas de last en mi sistema ahora mismo son:

WGroleau@MBP ~ % date; last | tail -3
Wed Apr 12 07:47:00 PDT 2023
reboot    ~                         Mon Oct 24 22:47 

wtmp begins Mon Oct 24 22:47

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X