информация об активных пользователях

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

asker8484
Сообщения: 9

информация об активных пользователях

Сообщение asker8484 » 07.10.2019 15:24

Здравствуйте!
Прошу помочь в решении следующей проблемы: необходимо вывести информацию о всех активных пользователях, используя группировку команд, т.е. команда должна быть в одну строку.
Как я предполагал сделать. Получить список активных пользователей при помощи команды users и вывод команды перенаправить в команду grep ШАБЛОН /etc/passwd.
Подскажите, пожалуйста, как в место ШАБЛОН подставить вывод команды users? В результате выполнения команды users может быть как одно слово, так и несколько, в зависимости от количества пользователей, зарегистрированных в настоящий момент в системе.
Спасибо сказали:

Аватара пользователя
Vascom
Сообщения: 1526
ОС: Fedora 30

Re: информация об активных пользователях

Сообщение Vascom » 07.10.2019 15:27

Напиши скрипт и запускай его командой в одну строку.
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 07.10.2019 15:32

Как вариант решения задачи, скрипт, к сожалению, не подходит.
Спасибо сказали:

Аватара пользователя
Vascom
Сообщения: 1526
ОС: Fedora 30

Re: информация об активных пользователях

Сообщение Vascom » 07.10.2019 15:33

Ну и когда ты через пайп направляешь данные в grep, то в этих данных осуществляется поиск паттерна, а не используются в качестве паттерна.

Тогда меняй задачу или условия. Так не выйдет.
Добавлено (15:36):
Хотя, если надо в одну строку, а не в одну команду, то можно так:

Код: Выделить всё

users | tr " " "\n" | uniq > /tmp/users.txt; for i in $(cat /tmp/users.txt); do grep $i /etc/passwd; done
Последний раз редактировалось Vascom 07.10.2019 15:36, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4879
ОС: Gentoo

Re: информация об активных пользователях

Сообщение /dev/random » 07.10.2019 15:36

Поскольку это явно учебное задание, давать вам готовый ответ было бы неправильно. Но подсказать можно: sed'ом отредактируйте вывод команды users, чтобы он выглядел, как регулярное выражение, и подставьте через "$(...)" в grep.
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 07.10.2019 15:39

Да. Я знаю, что вариант users | grep /etc/passwd не помогает. Условие задачи в части выполнения команды одной строкой тоже не могу поменять.
Спасибо сказали:

Аватара пользователя
Vascom
Сообщения: 1526
ОС: Fedora 30

Re: информация об активных пользователях

Сообщение Vascom » 07.10.2019 15:40

Мой вариант "одной строкой" сойдёт? Как раз - группировка команд.
Но через sed и регулярку, наверное, правильнее.
Последний раз редактировалось Vascom 07.10.2019 15:41, всего редактировалось 1 раз.
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 07.10.2019 15:41

/dev/random писал:
07.10.2019 15:36
Поскольку это явно учебное задание, давать вам готовый ответ было бы неправильно. Но подсказать можно: sed'ом отредактируйте вывод команды users, чтобы он выглядел, как регулярное выражение, и подставьте через "$(...)" в grep.
Да. Это учебное задание. Я не скрываю. Большое спасибо за подсказку. Пойду изучать вопрос.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15953
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: информация об активных пользователях

Сообщение Bizdelnick » 07.10.2019 15:42

Я бы вместо грепания /etc/passwd использовал getent.
Добавлено (15:55):
Vascom писал:
07.10.2019 15:40
Мой вариант "одной строкой" сойдёт?
Что если в системе окажутся пользователи user, user1 и testuser, причём user будет залогинен? А если юзера зовут bash?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 07.10.2019 16:07

Большое спасибо за помощь. Особенно /dev/random и Vascom. Задача решена путем объединения ваших советов.
Решил задачу следующим образом: grep -E $(users | tr -s " " "|") /etc/passwd

Еще раз большое спасибо!!!
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 07.10.2019 16:14

Еще одна маленькая просьба: Вы бы не могли бы подсказать, что это за прием
/dev/random писал:
07.10.2019 15:36
подставьте через "$(...)"
, как он называется? Чтобы поискать и почитать. Заранее спасибо.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15953
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: информация об активных пользователях

Сообщение Bizdelnick » 07.10.2019 16:19

asker8484 писал(а):
07.10.2019 16:07
Решил задачу следующим образом: grep -E $(users | tr -s " " "|") /etc/passwd
Всё же попробуйте ответить на вопросы:
Bizdelnick писал:
07.10.2019 15:42
Что если в системе окажутся пользователи user, user1 и testuser, причём user будет залогинен? А если юзера зовут bash?
asker8484 писал(а):
07.10.2019 16:14
как он называется?
Command substitution.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 07.10.2019 16:46

Bizdelnick писал:
07.10.2019 16:19
asker8484 писал(а):
07.10.2019 16:07
Решил задачу следующим образом: grep -E $(users | tr -s " " "|") /etc/passwd
Всё же попробуйте ответить на вопросы:
Bizdelnick писал:
07.10.2019 15:42
Что если в системе окажутся пользователи user, user1 и testuser, причём user будет залогинен? А если юзера зовут bash?
asker8484 писал(а):
07.10.2019 16:14
как он называется?
Command substitution.
Создал юзера bash, выполнил команду
Вот какой результат получил:
Изображение
Вроде бы сработало как надо. Но для более уверенного суждения у меня не хватает опыта. Какие подводные камни можно ожидать?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4879
ОС: Gentoo

Re: информация об активных пользователях

Сообщение /dev/random » 07.10.2019 16:52

asker8484 писал(а):
07.10.2019 16:46
Вроде бы сработало как надо. Но для более уверенного суждения у меня не хватает опыта. Какие подводные камни можно ожидать?
Попробуйте именно так, как написал Bizdelnick: залогинен только пользователь с именем user. Дословно.
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 07.10.2019 17:11

Аааа. Я понял. Вы клоните к тому, что если будет залогинен только user, но при этом в системе будут зарегистрированы пользователи user1 или testuser, то при выполнении поиска, в результат также попадут строки user1 и testuser? Правильно?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4879
ОС: Gentoo

Re: информация об активных пользователях

Сообщение /dev/random » 07.10.2019 17:13

asker8484 писал(а):
07.10.2019 17:11
Вы клоните к тому, что если будет залогинен только user, но при этом в системе будут зарегистрированы пользователи user1 или testuser, то при выполнении поиска, в результат также попадут строки user1 и testuser?
Именно. А если залогинен пользователь bash, то в результат попадут пользователи, у которых /bin/bash в качестве шелла.
Спасибо сказали:

Аватара пользователя
Vascom
Сообщения: 1526
ОС: Fedora 30

Re: информация об активных пользователях

Сообщение Vascom » 07.10.2019 17:43

Надо лишь немного усложнить регулярку для паттерна грепа.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15953
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: информация об активных пользователях

Сообщение Bizdelnick » 07.10.2019 17:57

Vascom писал:
07.10.2019 17:43
Надо лишь немного усложнить регулярку для паттерна грепа.
А потом подумать, что будет, если в имени пользователя встретится, например, точка, и усложнить ещё немного… А потом ещё немного…
В общем, формировать регулярки скриптом — дело неблагодарное, и требует хорошего понимания того, как они работают.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

asker8484
Сообщения: 9

Re: информация об активных пользователях

Сообщение asker8484 » 08.10.2019 11:00

Vascom писал:
07.10.2019 17:43
Надо лишь немного усложнить регулярку для паттерна грепа.
Немного усложнил:
grep -E ^$(users | tr -s " " "|") /etc/passwd
В правильном направлении мыслю? Поиск только по словам (они же юзеры) находящихся в начале строки. Тогда, если какой-то юзер использует bash, то строка не выводится. У себя на машине проверил, вроде работает, но не уверен.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4879
ОС: Gentoo

Re: информация об активных пользователях

Сообщение /dev/random » 08.10.2019 11:08

В правильном-то в правильном (если по условию задачи нужно именно грепать /etc/passwd, а не использовать более удобный getent), но это один маленький шажок на огромном пути, и даже этот шажок вы сделали не до конца: "^" имеет более высокий приоритет, чем "|".
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15953
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: информация об активных пользователях

Сообщение Bizdelnick » 08.10.2019 11:34

asker8484 писал(а):
08.10.2019 11:00
Поиск только по словам (они же юзеры) находящихся в начале строки. Тогда, если какой-то юзер использует bash, то строка не выводится.
А как насчёт user vs. user1? В обоих случаях в начале строки будет user.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: