10

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

13 ответов13

18

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

who | wc -l

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

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

who | grep -c .

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


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

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

16

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

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

users | wc -w
7

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

who -q

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

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

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

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

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

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

who | awk '{ print $1 }' | sort | uniq | wc -l 
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
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
2

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

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

вышеуказанные буты со своим аккаунтом:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l
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

http://www.gnu.org/software/coreutils/manual/html_node/who-invocation.html

"кто" печатает информацию о пользователях, которые в данный момент вошли в систему. Сводка:

кто [опция] [файл] [я]

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/

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

0
who | cut -d ' ' -f1 | uniq | wc -l
-2

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

cat -n /etc/passwd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .