Как я могу узнать количество пользователей онлайн в Linux?

10

Как я могу увидеть, сколько людей вошли на компьютер с Linux? Я знаю, что команда 'users' показывает всех людей, вошедших в систему, но мне нужен номер. Есть ли переключатель для пользователей, которого мне не хватает на странице руководства? Я думал об использовании grep -cкоманды, но должно быть что-то одинаковое в каждом имени пользователя, чтобы это работало. Есть ли более простой способ?

Джамал
источник

Ответы:

15

Вы ищете команду wc(количество слов).

Попробуй это:

users | wc -w
Джон Т
источник
обратите внимание, что в этом подходе (решения who / w) отображаются только пользователи, вошедшие в систему, но не обязательно активные пользователи (т.е. пользователи, которые запускают процесс и затем выходят из системы, оставляя запущенный процесс позади). Просто чтобы разобраться в разнице.
Эстани
18

Классически команда - это «кто», а не «пользователи», но «кто» дает вам больше информации. Оглядываясь назад на оригинальные статьи Unix (середина 70-х годов), можно привести следующий пример:

who | wc -l

Использование 'wc -l' подсчитывает количество строк вывода - оно работает как с 'users', так и с 'who'. Использование '-w' надежно работает только тогда, когда на пользователя приходится одно слово (как с 'пользователями', но не с 'кто')

Вы можете использовать 'grep -c' для подсчета строк. Поскольку вас интересуют только непустые имена пользователей, вы можете сделать:

who | grep -c .

В каждой строке всегда есть хотя бы один символ.


Как было отмечено в комментариях по John T , то usersкоманда отличается от whoв ряде отношений. Наиболее важным является то, что вместо того, чтобы давать одно имя на строку, оно распределяет имена по несколько на строку - у меня нет машины с достаточным количеством разных пользователей, вошедших в систему, чтобы проверить, что происходит, когда число пользователей становится большим. Другое отличие состоит в том, что «кто» сообщает об используемых терминальных соединениях. Если открыто несколько окон терминала, для одного пользователя будет отображаться несколько строк, тогда как «пользователи», по-видимому, выводят зарегистрированного пользователя только один раз.

Как следствие этого различия, grep -c .формулировка «не будет работать с командой« пользователи »; ' wc -w' необходимо.

Джонатан Леффлер
источник
small nitpick - команда users не печатает 1 строку на пользователя, она просто печатает id последовательно, поэтому grep -c. не будет работать в этом случае. Умное мышление, хотя.
Джон Т
это также означает, что wc -l не будет работать с командой users, как показано здесь: i26.tinypic.com/4pw0vd.png
Джон Т
@ Джон Т: о, ну, учитывая снимок экрана, вы правы. Я протестировал «пользователи» в MacOS X - но только один вошел в систему. Когда я дважды проверил, когда вошел второй пользователь, я вижу поведение «все в одной строке».
Джонатан Леффлер
1
для симуляции большего количества пользователей вы можете использовать SSH в своем собственном боксе :)
John T
Спасибо за эту ценную информацию, хотя я хотел придерживаться команды "пользователи". Также проголосовал за вас, спасибо.
7

Откройте оболочку и введите:

who -q

Последняя строка даст вам счет.

РЕДАКТИРОВАТЬ:

(вздох) Я неправильно понял вопрос. Вот несколько грубый подход:

Чтобы увидеть уникальные имена пользователей:

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

Чтобы увидеть количество уникальных пользователей:

who | awk '{ print $1 }' | sort | uniq | wc -l 
Эйвери Пэйн
источник
это подсчитывает все логины одного и того же пользователя в общем.
Хаялчи
проверьте повторное редактирование, я думаю, вы обнаружите, что новые ответы адресованы этому.
Эйвери Пейн
Это по-прежнему не работает, uniq удаляет только дубликаты последовательных строк, вам нужно сначала отсортировать вывод who.
другой прием
это то, что я получаю за публикацию ответов в 1:00. (вздох) исправлено.
Эйвери Пейн
3

Вы хотите увидеть количество сессий или количество реальных пользователей?

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

Это на моем ноутбуке, так что я единственный пользователь, но я вошел в систему три раза.

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

Это довольно легко отфильтровать эти дубликаты, хотя, чтобы получить количество реальных пользователей.

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1
theotherreceive
источник
3

Вот bash-версия отличного поста Tink 's awk:

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

Хорошо, это немного дольше, но стоило найти этот ... :).

Во время тестирования сделайте перед следующей попыткой:

shift $#                # clear positional parameters
unset user              # remove associative array variable
Sasch
источник
2

количество пользователей, которые в настоящее время вошли в систему:

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

вышеперечисленные буты со своим аккаунтом:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l
Cris
источник
1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Кто распечатывает список, cut удаляет все, кроме первой строки, сортирует -u, сортирует его и удаляет дубликаты, а wc -l подсчитывает строки. У меня отлично работает на Ubuntu / Bash :)

Ким
источник
1

Вы можете просто использовать w( /usr/bin/wв моей системе на базе Red Hat) или uptimeони показывают фактическое количество зарегистрированных пользователей.

ш:

                              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

Провел на сайте:

                              v
 22:39:18 up 3 days, 21 min,  1 user,  load average: 0.08, 0.02, 0.01
Мануэль Фо
источник
1

И метод, который использует только одну трубу ...

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

:}

Дзынь
источник
0

Вы всегда можете скачать бесплатный инструмент для Unix под названием TOP. Он создает список пользователей, а также то, что они делают в системе в данный момент, и будет продолжать обновляться, пока он работает.

Он находится по адресу http://www.unixtop.org/

Он имеет много переключателей командной строки, поэтому вы должны быть в состоянии извлечь информацию, которую вы ищете.

Axxmasterr
источник
Я еще не нашел дистрибутив Linux, в котором по умолчанию нет top, не говоря уже о том, чтобы не иметь возможности установить его из пакетов.
theotherreceive
0
who | cut -d ' ' -f1 | uniq | wc -l
Арджун Дандаги
источник
2
Это кажется незначительным изменением ответа Ким и не содержит объяснений. Это может быть более уместным в качестве комментария к этому ответу (который требует немного больше повторений). Предполагается, что каждый ответ дает решение, которое существенно отличается от того, что уже было внесено.
fixer1234
-2

Если вы ищете общее количество пользователей, вошедших в систему и вышедших из нее в правильной последовательности, лучше всего выполнить команду

cat -n /etc/passwd
Амрик Сингх
источник
2
Нет, это не то, что делает эта команда. cat -nпросто печатает все строки в файле, нумеруя каждую. Вы получите список пользователей, которые существуют в этой системе, но вы не получите много информации для входа в систему.
cpast