Jak mogę znaleźć liczbę użytkowników online w systemie Linux?

10

Jak mogę zobaczyć, ile osób jest zalogowanych na komputerze z systemem Linux? Wiem, że polecenie „users” pokazuje wszystkie zalogowane osoby, ale potrzebuję numeru. Czy na stronie podręcznika brakuje przełącznika dla użytkowników? Myślałem o użyciu grep -cpolecenia, ale musi być coś takiego samego w każdej nazwie użytkownika, aby to zadziałało. Czy istnieje prostszy sposób?

Jamal
źródło

Odpowiedzi:

15

Szukasz polecenia wc(liczba słów).

Spróbuj tego:

users | wc -w
John T.
źródło
zauważ, że to podejście (rozwiązania kto / w) pokazuje tylko zalogowanych użytkowników, niekoniecznie aktywnych użytkowników (tj. użytkowników, którzy rozpoczynają proces, a następnie wylogowują się, pozostawiając uruchomiony proces). Tylko po to, żeby powiedzieć o różnicy.
estani
18

Klasycznie polecenie brzmi „kto”, a nie „użytkownicy”, ale „kto” daje więcej informacji. Patrząc wstecz na oryginalne artykuły uniksowe (z połowy lat 70.), przykładem może być:

who | wc -l

Użycie „wc -l” zlicza linie wyjściowe - działa zarówno z „użytkownikami”, jak i „kim”. Użycie „-w” działa niezawodnie tylko wtedy, gdy dla jednego użytkownika występuje jedno słowo (jak w przypadku „użytkowników”, ale nie w przypadku „kogo”).

Możesz użyć 'grep -c' do zliczenia linii. Ponieważ interesują Cię tylko niepuste nazwy użytkowników, możesz:

who | grep -c .

W każdej linii zawsze jest co najmniej jeden znak.


Jak zauważył w komentarzach przez John T The userspolecenie różni whosię pod wieloma względami. Najważniejsze jest to, że zamiast podawać jedną nazwę w linii, rozdziela ona kilka nazw w linii - nie mam komputera z wystarczającą liczbą różnych użytkowników, aby sprawdzić, co się stanie, gdy liczba użytkowników stanie się duża. Inna różnica polega na tym, że „kto” raportuje używane połączenia terminali. Przy otwartych wielu oknach terminala pokaże wiele linii dla jednego użytkownika, podczas gdy „użytkownicy” zdają się wyświetlać tylko jednego zalogowanego użytkownika.

W wyniku tej różnicy grep -c .sformułowanie „ ” nie będzie działać z poleceniem „users”; „ wc -w” jest konieczne.

Jonathan Leffler
źródło
small nitpick - polecenie users nie drukuje 1 linii na użytkownika, po prostu wypisuje id po kolei, więc grep -c. nie zadziałałoby w tym przypadku. Jednak inteligentne myślenie.
John T
oznacza to również, że wc -l nie będzie działać z poleceniem users, jak pokazano tutaj: i26.tinypic.com/4pw0vd.png
John T
@John T: och - cóż, biorąc pod uwagę zrzut ekranu, masz rację. Testowałem „użytkowników” na MacOS X - ale z zalogowanym tylko jednym użytkownikiem. Kiedy sprawdziłem dwukrotnie, gdy zalogował się drugi użytkownik, widzę zachowanie „wszystko w jednym wierszu”.
Jonathan Leffler
1
aby symulować więcej użytkowników, możesz SSH we własnym polu :)
John T
Dziękuję za tę cenną informację, chociaż chciałem trzymać się polecenia „users”. Głosowałem również, dziękuję.
7

Otwórz powłokę i wpisz:

who -q

Ostatnia linia da ci liczyć.

EDYTOWAĆ:

(westchnienie) Źle zrozumiałem pytanie. Oto nieco brutalne podejście:

Aby zobaczyć unikalne nazwy użytkowników:

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

Aby zobaczyć liczbę unikalnych użytkowników:

who | awk '{ print $1 }' | sort | uniq | wc -l 
Avery Payne
źródło
która liczy wszystkie loginy tego samego użytkownika łącznie.
hayalci
sprawdź ponowną edycję, myślę, że przekonasz się, że nowe odpowiedzi to rozwiązują.
Avery Payne
To wciąż nie działa, uniq usuwa tylko zduplikowane kolejne linie, musisz posortować dane wyjściowe kto pierwszy.
theotherreceive
to otrzymuję za publikowanie odpowiedzi o 1 w nocy. (westchnienie) naprawione.
Avery Payne,
3

Czy chcesz zobaczyć liczbę sesji lub liczbę rzeczywistych użytkowników?

$ 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)

To na moim laptopie, więc jestem jedynym użytkownikiem, ale jestem zalogowany trzy razy.

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

Jednak dość łatwo jest odfiltrować te duplikaty, aby uzyskać liczbę rzeczywistych użytkowników.

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1
inne
źródło
3

Oto bashowa wersja świetnego posta awk tink :

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, jest trochę dłużej, ale warto było znaleźć ten ... :).

Podczas testowania wykonaj przed następną próbą:

shift $#                # clear positional parameters
unset user              # remove associative array variable
Sasch
źródło
2

liczba zalogowanych użytkowników:

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

powyższe przyciski z nazwą konta:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l
Cris
źródło
1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Kto drukuje listę, cut usuwa wszystko oprócz pierwszego wiersza, sortuje -u sortuje i usuwa duplikaty, a wc -l zlicza linie. Działa dobrze dla mnie na Ubuntu / Bash :)

Kim
źródło
1

Możesz po prostu użyć w( /usr/bin/ww moim systemie opartym na Red Hat) lub uptimepokazują rzeczywistą liczbę zalogowanych użytkowników.

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

czas pracy:

                              v
 22:39:18 up 3 days, 21 min,  1 user,  load average: 0.08, 0.02, 0.01
Manuel Faux
źródło
1

I metoda wykorzystująca tylko jedną rurę ...

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

:}

zadzwonić
źródło
0

Zawsze możesz pobrać bezpłatne narzędzie dla systemu UNIX o nazwie TOP. Tworzy listę użytkowników, a także to, co robią w tym czasie w systemie i będzie aktualizowana tak długo, jak działa.

Znajduje się na stronie http://www.unixtop.org/

Ma wiele przełączników wiersza poleceń, więc powinieneś być w stanie wyodrębnić informacje, których szukasz.

Axxmasterr
źródło
Nie znalazłem jeszcze dystrybucji Linuksa, która domyślnie nie zawiera top, nie mówiąc już o braku opcji instalacji z pakietów.
therereceive
0
who | cut -d ' ' -f1 | uniq | wc -l
Arjun Dandagi
źródło
2
To wydaje się być niewielką odmianą odpowiedzi Kima i nie zawiera żadnego wyjaśnienia. Może być bardziej odpowiedni jako komentarz do tej odpowiedzi (która wymaga nieco więcej powtórzeń). Chodzi o to, aby każda odpowiedź zawierała rozwiązanie zasadniczo odmienne od tego, co już zostało wniesione.
fixer1234
-2

Jeśli szukasz całkowitej liczby zalogowanych i wylogowanych użytkowników we właściwej kolejności, najlepszym poleceniem do uruchomienia jest

cat -n /etc/passwd
Amrik Singh
źródło
2
Nie, nie to robi to polecenie. cat -npo prostu drukuje wszystkie linie w pliku, numerując każdy z nich. Otrzymasz listę użytkowników, którzy istnieją w tym systemie, ale nie dostaniesz dużo informacji o logowaniu.
cpast