Wie kann ich die Anzahl der Benutzer online unter Linux ermitteln?

10

Wie kann ich sehen, wie viele Personen an einem Linux-Computer angemeldet sind? Ich weiß, dass der Befehl 'Benutzer' alle angemeldeten Personen anzeigt, aber ich benötige eine Nummer. Gibt es einen Schalter für Benutzer, den ich in der Manpage vermisse? Ich dachte daran, den grep -cBefehl zu verwenden, aber es muss in jedem Benutzernamen etwas geben, das gleich ist, damit dies funktioniert. Gibt es einen einfacheren Weg?

Jamal
quelle

Antworten:

15

Sie suchen nach dem wcBefehl (Wortanzahl).

Versuche dies:

users | wc -w
John T.
quelle
Beachten Sie, dass bei diesem Ansatz (eine Who / W-Lösung) nur angemeldete Benutzer angezeigt werden, nicht unbedingt aktive Benutzer (dh Benutzer, die einen Prozess starten und sich dann abmelden und den laufenden Prozess hinter sich lassen). Nur um den Unterschied aufzuzeigen.
Estani
18

Klassischerweise lautet der Befehl "wer" und nicht "Benutzer", aber "wer" gibt Ihnen mehr Informationen. Rückblickend auf die ursprünglichen Unix-Artikel (Mitte der 70er Jahre) wäre das Beispiel gewesen:

who | wc -l

Die Verwendung von 'wc -l' zählt die Ausgabezeilen - dies funktioniert sowohl mit 'Benutzern' als auch mit 'Wer'. Die Verwendung von '-w' funktioniert nur dann zuverlässig, wenn ein Wort pro Benutzer vorhanden ist (wie bei 'Benutzern', jedoch nicht bei 'Wer').

Sie können 'grep -c' verwenden, um die Zeilen zu zählen. Da Sie nur an nicht leeren Benutzernamen interessiert sind, können Sie Folgendes tun:

who | grep -c .

In jeder Zeile steht immer mindestens ein Zeichen.


Wie in den Kommentaren von John T erwähnt , unterscheidet sich der usersBefehl whoin einer Reihe von Punkten. Das Wichtigste ist, dass anstelle eines Namens pro Zeile die Namen auf mehrere pro Zeile verteilt werden. Ich habe keinen Computer mit genügend verschiedenen Benutzern angemeldet, um zu testen, was passiert, wenn die Anzahl der Benutzer groß wird. Der andere Unterschied besteht darin, dass "wer" über verwendete Terminalverbindungen berichtet. Wenn mehrere Terminalfenster geöffnet sind, werden mehrere Zeilen für einen einzelnen Benutzer angezeigt, während "Benutzer" einen angemeldeten Benutzer nur einmal aufzulisten scheint.

Infolge dieses Unterschieds grep -c .funktioniert die Formulierung ' ' nicht mit dem Befehl 'users'. ' wc -w' ist notwendig.

Jonathan Leffler
quelle
kleiner nitpick - der Befehl users druckt nicht 1 Zeile pro Benutzer, sondern nur die IDs nacheinander, also grep -c. würde in diesem Fall nicht funktionieren. Kluges Denken.
John T
Dies bedeutet auch, dass wc -l nicht mit dem Befehl users funktioniert, wie hier gezeigt: i26.tinypic.com/4pw0vd.png
John T
@ John T: Na ja, angesichts des Screenshots haben Sie Recht. Ich habe "Benutzer" unter MacOS X getestet - aber nur ein Benutzer ist angemeldet. Wenn ich zweimal mit einem zweiten angemeldeten Benutzer nachgeprüft habe, wird das Verhalten "Alle in einer Zeile" angezeigt.
Jonathan Leffler
1
Um mehr Benutzer zu simulieren, können Sie SSH in Ihre eigene Box :)
John T
Vielen Dank für diese wertvollen Informationen, obwohl ich mich an den Befehl "Benutzer" halten wollte. Ich habe dich auch positiv bewertet, danke.
7

Öffnen Sie eine Shell und geben Sie Folgendes ein:

who -q

Die letzte Zeile gibt Ihnen eine Zählung.

BEARBEITEN:

(seufzt) Ich habe die Frage falsch verstanden. Hier ist ein etwas Brute-Force-Ansatz:

So zeigen Sie eindeutige Benutzernamen an:

who | awk '{ print $1 }' | sort | uniq

So zeigen Sie eine Anzahl eindeutiger Benutzer an:

who | awk '{ print $1 }' | sort | uniq | wc -l 
Avery Payne
quelle
Das zählt alle Anmeldungen desselben Benutzers in der Summe.
Hayalci
Überprüfen Sie die erneute Bearbeitung. Ich denke, Sie werden feststellen, dass die neuen Antworten dies ansprechen.
Avery Payne
Dies funktioniert immer noch nicht. Uniq entfernt nur doppelte aufeinanderfolgende Zeilen. Sie müssen zuerst die Ausgabe von who sortieren.
Theotherreceive
Das bekomme ich, wenn ich um 1 Uhr morgens Antworten poste. (seufz) behoben.
Avery Payne
3

Möchten Sie die Anzahl der Sitzungen oder die Anzahl der tatsächlichen Benutzer anzeigen?

$ who
andrew   tty1         2009-07-26 15:31 (:0)
andrew   pts/0        2009-07-27 00:11 (:0.0)
andrew   pts/1        2009-07-27 01:58 (:0.0)

Das ist auf meinem Laptop, also bin ich der einzige Benutzer, aber ich bin dreimal angemeldet.

$ who | wc -l
3
$ users | wc -w
3

Es ist jedoch ziemlich einfach, diese Duplikate herauszufiltern, um die Anzahl der tatsächlichen Benutzer zu ermitteln.

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1
theotherreceive
quelle
3

Hier ist eine Bash-Version von Tinks großartigem Awk -Beitrag:

set $(users)
declare -A user
for u ; do ((user[$u]++)) ; done
for key in "${!user[@]}" ; do echo "$key: ${user[$key]}" ; done | column -t | sort -nk 2

Ok, es ist ein bisschen länger, aber es hat sich gelohnt, dieses zu finden ... :).

Führen Sie beim Testen vor dem nächsten Versuch Folgendes aus:

shift $#                # clear positional parameters
unset user              # remove associative array variable
Sasch
quelle
2

Anzahl der aktuell angemeldeten Benutzer:

who |cut -c 1-9 |sort -u |wc -l

die oben genannten Buta mit ihrem Kontonamen:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l
Krise
quelle
1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Wer die Liste druckt, schneidet alles außer der ersten Zeile, sortiert -u sortiert und entfernt Duplikate und wc -l zählt die Zeilen. Funktioniert gut für mich auf Ubuntu / Bash :)

Kim
quelle
1

Sie können einfach w( /usr/bin/wauf meinem Red Hat-basierten System) oder uptimesie zeigen die tatsächliche Anzahl der angemeldeten Benutzer an.

w:

                              v
 22:40:38 up 3 days, 22 min,  1 user,  load average: 0.02, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
manuel   pts/0    pc-manuel        09:35    0.00s  0.07s  0.00s /usr/bin/screen -xRR

Betriebszeit:

                              v
 22:39:18 up 3 days, 21 min,  1 user,  load average: 0.08, 0.02, 0.01
Manuel Faux
quelle
1

Und eine Methode, die nur ein Rohr verwendet ...

users | awk '{for(i=1;i<=NF;i++){a[$i]++}}END{for(i in a){print i"\t"a[i]}}'

:}

basteln
quelle
0

Sie können jederzeit das kostenlose Unix-Tool TOP herunterladen. Es erstellt eine Liste der Benutzer und auch, was sie gerade auf dem System tun, und wird so lange aktualisiert, wie es ausgeführt wird.

Es befindet sich unter http://www.unixtop.org/

Es verfügt über viele Befehlszeilenoptionen, sodass Sie in der Lage sein sollten, die gesuchten Informationen zu extrahieren.

Axxmasterr
quelle
Ich habe noch keine Linux-Distribution gefunden, die standardmäßig nicht top enthält, geschweige denn keine Option, sie aus Paketen zu installieren.
Theotherreceive
0
who | cut -d ' ' -f1 | uniq | wc -l
Arjun Dandagi
quelle
2
Dies scheint eine geringfügige Variation von Kims Antwort zu sein und enthält keine Erklärung. Es könnte angemessener sein, diese Antwort zu kommentieren (was etwas mehr Wiederholung erfordert). Die Absicht ist, dass jede Antwort eine Lösung bietet, die sich wesentlich von der bereits geleisteten unterscheidet.
Fixer1234
-2

Wenn Sie nach der Gesamtzahl der angemeldeten und abgemeldeten Benutzer in der richtigen Reihenfolge suchen, ist der beste auszuführende Befehl

cat -n /etc/passwd
Amrik Singh
quelle
2
Nein, das macht dieser Befehl nicht. cat -ndruckt einfach alle Zeilen in der Datei und nummeriert jede. Sie erhalten eine Liste der Benutzer, die auf diesem System vorhanden sind, aber Sie erhalten nicht viele Anmeldeinformationen.
cpast