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.
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.
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.
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.
He creado una pequeña función/script que utilizará dos utilidades incorporadas:
dscl . -list /Users
para obtener una lista de los usuariosdsmemberutil 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.
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)
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 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.