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

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

Модераторы: /dev/random, Модераторы разделов

Ответить
asker8484
Сообщения: 13

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

Сообщение asker8484 »

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

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

Сообщение Vascom »

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

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

Сообщение asker8484 »

Как вариант решения задачи, скрипт, к сожалению, не подходит.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

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

Сообщение Vascom »

Ну и когда ты через пайп направляешь данные в 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
Администратор
Сообщения: 5282
ОС: Gentoo

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

Сообщение /dev/random »

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

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

Сообщение asker8484 »

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

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

Сообщение Vascom »

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

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

Сообщение asker8484 »

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

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

Сообщение Bizdelnick »

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

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

Сообщение asker8484 »

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

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

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

Сообщение asker8484 »

Еще одна маленькая просьба: Вы бы не могли бы подсказать, что это за прием
/dev/random писал:
07.10.2019 15:36
подставьте через "$(...)"
, как он называется? Чтобы поискать и почитать. Заранее спасибо.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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
Сообщения: 13

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

Сообщение asker8484 »

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
Администратор
Сообщения: 5282
ОС: Gentoo

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

Сообщение /dev/random »

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

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

Сообщение asker8484 »

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

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

Сообщение /dev/random »

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

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

Сообщение Vascom »

Надо лишь немного усложнить регулярку для паттерна грепа.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

Сообщение asker8484 »

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

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

Сообщение /dev/random »

В правильном-то в правильном (если по условию задачи нужно именно грепать /etc/passwd, а не использовать более удобный getent), но это один маленький шажок на огромном пути, и даже этот шажок вы сделали не до конца: "^" имеет более высокий приоритет, чем "|".
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

Сообщение Alek46 »

А как машина будет работать с этой командой?

grep -E ^$(users | tr -s " " "|") /etc/passwd
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2604
ОС: Gentoo

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

Сообщение ormorph »

Shell

$ loginctl list-users
Добавлено (23:19):
Alek46 писал(а):
03.10.2022 20:26
А как машина будет работать с этой командой?
Будет выводить правильно, если только присутствует только один пользователь, иначе grep ни чего не покажет. Лучше уж тогда использовать xargs в конвейере.

Shell

$ users |tr " " "\n"| xargs -i echo USER={}
echo просто привел для примера, вам её нужно заменить на grep с символом начала строки ^ и т.д.
Последний раз редактировалось ormorph 03.10.2022 23:22, всего редактировалось 2 раза.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

Offtopic
Интересно, нерадивые студенты будут набегать в эту тему каждый год в начале октября?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить