Как я могу увидеть, сколько людей вошли на компьютер с Linux? Я знаю, что команда 'users' показывает всех людей, вошедших в систему, но мне нужен номер. Есть ли переключатель для пользователей, которого мне не хватает на странице руководства? Я думал об использовании команды grep -c
, но в каждом имени пользователя должно быть что-то одинаковое, чтобы это работало. Есть ли более простой способ?
13 ответов
Классически, команда «кто», а не «пользователи», но «кто» дает вам больше информации. Оглядываясь назад на оригинальные статьи Unix (середина 70-х годов), можно привести следующий пример:
who | wc -l
Использование 'wc -l' подсчитывает количество строк вывода - оно работает как с 'users', так и с 'who'. Использование «-w» надежно работает только тогда, когда на пользователя приходится одно слово (как с «пользователями», но не с «кто»).
Вы можете использовать 'grep -c' для подсчета строк. Поскольку вас интересуют только непустые имена пользователей, вы можете сделать:
who | grep -c .
В каждой строке всегда есть хотя бы один символ.
Как отмечено в комментариях Джона Т, команда users
отличается от who
по ряду аспектов. Наиболее важным является то, что вместо того, чтобы давать одно имя в строке, оно распределяет имена по несколько в строке - у меня нет машины с достаточным количеством зарегистрированных пользователей, чтобы проверить, что происходит, когда число пользователей становится большим. Другое отличие состоит в том, что «кто» сообщает об используемых терминальных соединениях. Если открыто несколько окон терминала, для одного пользователя будет отображаться несколько строк, тогда как «пользователи», по-видимому, выводят зарегистрированного пользователя только один раз.
Как следствие этого различия, grep -c .
«Формулировка не будет работать с командой« пользователи »; ' wc -w
' необходим.
Вы ищете команду wc
(подсчет слов).
Попробуй это:
users | wc -w
Откройте оболочку и введите:
who -q
Последняя строка даст вам счет.
РЕДАКТИРОВАТЬ:
(вздох) Я неправильно понял вопрос. Вот несколько грубый подход:
Чтобы увидеть уникальные имена пользователей:
who | awk '{ print $1 }' | sort | uniq
Чтобы увидеть количество уникальных пользователей:
who | awk '{ print $1 }' | sort | uniq | wc -l
Вот 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
Хотите увидеть количество сессий или количество реальных пользователей?
$ 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
количество пользователей, которые в настоящее время вошли в систему:
who |cut -c 1-9 |sort -u |wc -l
вышеуказанные буты со своим аккаунтом:
who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l
who | cut --delimiter=' ' -f 1 | sort -u | wc -l
Кто распечатывает список, cut удаляет все, кроме первой строки, сортирует -u, сортирует его и удаляет дубликаты, а wc -l подсчитывает строки. У меня отлично работает на Ubuntu / Bash :)
Вы можете просто использовать 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
http://www.gnu.org/software/coreutils/manual/html_node/who-invocation.html
"кто" печатает информацию о пользователях, которые в данный момент вошли в систему. Сводка:
кто [опция] [файл] [я]
И метод, который использует только одну трубу ...
users | awk '{for(i=1;i<=NF;i++){a[$i]++}}END{for(i in a){print i"\t"a[i]}}'
:}
Вы всегда можете скачать бесплатный инструмент для Unix под названием TOP. Он создает список пользователей, а также то, что они делают в системе в данный момент, и будет обновляться до тех пор, пока он работает.
Он находится по адресу http://www.unixtop.org/
Он имеет много переключателей командной строки, поэтому вы сможете извлечь информацию, которую вы ищете.
who | cut -d ' ' -f1 | uniq | wc -l
Если вы ищете общее количество пользователей, вошедших в систему и вышедших из нее в правильной последовательности, лучше всего выполнить команду
cat -n /etc/passwd