2

Я знаю, что это любительский вопрос. Мне нужно написать скрипт оболочки Bash, который подсчитывает, сколько пользователей в данный момент подключено к серверу SSH. Мне нужно игнорировать несколько входов в систему и показать имя пользователя и место, где они вошли.

Благодарю.

2 ответа2

1

Это пахнет домашней работой, ну да ладно

#!/bin/bash

users=$(users | xargs -n1 | sort -u)
for u in $users; do
    w -h | awk '{print $1 " " $3}' | grep -m1 $u
done

Объяснение:

Сначала мы создаем список зарегистрированных пользователей с помощью команды "пользователь" и отфильтровываем дубликаты, помещая по одному в каждую строку (xargs -n) и сортируя с фильтрами unique (sort -u).

w -h печатает список всех вошедших в систему пользователей, мы пропускаем через awk только нужные поля (1 и 3), передавая результаты через grep для фильтрации всех, кроме пользователя, которого мы ищем на каждой итерации цикла. -m1 гарантирует, что он остановится после первого матча, вместо этого вы можете передать через 'голову -1'.

0

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

mike@magisterial $ w
 12:00:25 up 239 days, 22:40, 18 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
john    pts/1    xx.yy.74.10    09:29    1:34m  0.59s  0.02s sshd: john [priv]
jane    pts/3    xx.yy.74.10    09:44    2:05m  0.38s  0.01s sshd: jane [priv]
mike    pts/4    xx.yy.74.10    09:45    1:10m  0.21s  0.21s -bash

В вашем случае отфильтруйте вывод с помощью grep, чтобы он возвращал только логины ssh:

w | grep 'sshd:'

john    pts/1    xx.yy.74.10    09:29    1:34m  0.59s  0.02s sshd: john [priv]
jane    pts/3    xx.yy.74.10    09:44    2:05m  0.38s  0.01s sshd: jane [priv]

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