Як я можу знайти кількість користувачів в Інтернеті в Linux?


10

Як я можу побачити, скільки людей увійшли до машини Linux? Я знаю, що команда "користувачів" показує всіх людей, які увійшли, але мені потрібен номер. Чи є перемикач для користувачів, якого я відсутній на сторінці man? Я думав скористатися grep -cкомандою, але для роботи цього повинно бути щось однакове у кожному імені користувача. Чи є простіший спосіб?

Відповіді:


15

Ви шукаєте команду wc(count word).

Спробуйте це:

users | wc -w

зауважте, що цей підхід (рішення, хто / з якого) показує лише зареєстрованих користувачів, не обов'язково активних користувачів (тобто користувачів, які починають процес, а потім виходять із системи, залишаючи запущений процес позаду). Просто для того, щоб підняти голову щодо різниці.
естані

18

Класично команда - це "хто", а не "користувачі", але "хто" дає більше інформації. Оглянувшись на оригінальні статті Unix (середина 70-х років), прикладом цього було б:

who | wc -l

Використання 'wc -l' підраховує рядки виводу - воно працює як з 'користувачами', так і з 'хто'. Використання '-w' надійно працює лише тоді, коли на кожного користувача є одне слово (як у випадку "користувачів", але не з "хто").

Ви можете використовувати 'grep -c' для підрахунку рядків. Оскільки вас цікавлять лише порожні імена користувачів, ви можете зробити:

who | grep -c .

Завжди є щонайменше один символ у кожному рядку.


Як було відзначено в коментарі по John T , то usersкоманда відрізняється від whoв ряді відносин. Найголовніше - це те, що замість того, щоб давати одне ім’я на рядок, він поширює імена на кілька рядків - у мене немає машини з достатньою кількістю користувачів, щоб увійти, щоб перевірити, що відбувається, коли кількість користувачів стане великою. Інша відмінність полягає в тому, що "хто" звітує про використовувані термінальні з'єднання. Якщо відкрито декілька вікон терміналів, він відображатиме кілька рядків для одного користувача, тоді як "користувачі", схоже, перераховують користувача, який увійшов у систему лише один раз.

Як наслідок цієї різниці, grep -c .формулювання ' ' не працюватиме з командою 'users'; ' wc -w' необхідно.


маленький нитпок - команда користувачів не друкує 1 рядок на користувача, вона просто друкує ідентифікатор послідовно, тому grep -c. не працював би в цьому випадку. Хоча розумне мислення.
Джон Т

це також означає, що wc -l не буде працювати з командою користувачів, як показано тут: i26.tinypic.com/4pw0vd.png
Джон T,

@John T: о - добре, враховуючи знімок екрана, ви маєте рацію. Я перевіряв "користувачів" на MacOS X - але лише з одним користувачем, який увійшов. Коли я двічі перевірив, коли другий користувач увійшов, я бачу поведінку "всі в одну лінію".
Джонатан Леффлер

1
щоб імітувати більше користувачів, ви можете SSH у свій власний ящик :)
Джон T,

Дякую за цю цінну інформацію, хоча я хотів дотримуватися команди "користувачі". Тебе також схвалили, дякую.

7

Відкрийте оболонку та введіть:

who -q

Останній рядок дасть вам рахунок.

Редагувати:

(зітхаючи) Я неправильно зрозумів питання. Ось дещо жорстокий підхід:

Щоб побачити унікальні імена користувачів:

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

Щоб побачити кількість унікальних користувачів:

who | awk '{ print $1 }' | sort | uniq | wc -l 

що підраховує всі входи одного і того ж користувача в загальній кількості.
hayalci

перевірте повторну редагування, я думаю, ви знайдете, що нові відповіді відповідають на це.
Avery Payne

Це все ще не працює, uniq видаляє лише повторювані послідовні рядки, вам потрібно впорядкувати результат того, хто перший.
theoterreceive

ось що я отримую за розміщення відповідей о 1 ранку. (зітхання) виправлений.
Avery Payne

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

3

Ось версія Баша з Дзинь «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

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

Хто роздруковує список, вирізання видаляє все, окрім першого рядка, сортування -у сортування та видалення дублікатів, а wc -l рахує рядки. Добре працює для мене на ubuntu / bash :)


1

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

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

час роботи:

                              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/

У ньому є багато комутаторів командного рядка, тому ви маєте змогу витягувати інформацію, яку шукаєте.


Я ще не міг знайти дистрибутив Linux, який за замовчуванням не містить верху, не кажучи вже про можливість встановити його з пакетів.
theoterreceive

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

2
Це здається незначним варіантом відповіді Кіма, і воно не містить пояснень. Це може бути більш доречним як коментар до цієї відповіді (що вимагає трохи більше повторень). Намір полягає в тому, щоб кожна відповідь забезпечила рішення, яке суттєво відрізняється від того, що вже було внесено.
fixer1234

-2

Якщо ви шукаєте загальну кількість користувачів, які ввійшли та вийшли у відповідну послідовність, найкращою командою для запуску є

cat -n /etc/passwd

2
Ні, це не те, що робить ця команда. cat -nпросто друкує всі рядки у файлі, нумеруючи кожен. Ви отримаєте список користувачів, які існують у цій системі, але ви не отримаєте багато інформації для входу.
cpast
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.