информация об активных пользователях
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 13
информация об активных пользователях
Здравствуйте!
Прошу помочь в решении следующей проблемы: необходимо вывести информацию о всех активных пользователях, используя группировку команд, т.е. команда должна быть в одну строку.
Как я предполагал сделать. Получить список активных пользователей при помощи команды users и вывод команды перенаправить в команду grep ШАБЛОН /etc/passwd.
Подскажите, пожалуйста, как в место ШАБЛОН подставить вывод команды users? В результате выполнения команды users может быть как одно слово, так и несколько, в зависимости от количества пользователей, зарегистрированных в настоящий момент в системе.
Прошу помочь в решении следующей проблемы: необходимо вывести информацию о всех активных пользователях, используя группировку команд, т.е. команда должна быть в одну строку.
Как я предполагал сделать. Получить список активных пользователей при помощи команды users и вывод команды перенаправить в команду grep ШАБЛОН /etc/passwd.
Подскажите, пожалуйста, как в место ШАБЛОН подставить вывод команды users? В результате выполнения команды users может быть как одно слово, так и несколько, в зависимости от количества пользователей, зарегистрированных в настоящий момент в системе.
-
- Сообщения: 1699
- ОС: Fedora 32
Re: информация об активных пользователях
Напиши скрипт и запускай его командой в одну строку.
-
- Сообщения: 13
Re: информация об активных пользователях
Как вариант решения задачи, скрипт, к сожалению, не подходит.
-
- Сообщения: 1699
- ОС: Fedora 32
Re: информация об активных пользователях
Ну и когда ты через пайп направляешь данные в 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 раз.
Спасибо сказали:
-
- Администратор
- Сообщения: 5190
- ОС: Gentoo
Re: информация об активных пользователях
Поскольку это явно учебное задание, давать вам готовый ответ было бы неправильно. Но подсказать можно: sed'ом отредактируйте вывод команды users, чтобы он выглядел, как регулярное выражение, и подставьте через "$(...)" в grep.
Спасибо сказали:
-
- Сообщения: 13
Re: информация об активных пользователях
Да. Я знаю, что вариант users | grep /etc/passwd не помогает. Условие задачи в части выполнения команды одной строкой тоже не могу поменять.
-
- Сообщения: 1699
- ОС: Fedora 32
Re: информация об активных пользователях
Мой вариант "одной строкой" сойдёт? Как раз - группировка команд.
Но через sed и регулярку, наверное, правильнее.
Но через sed и регулярку, наверное, правильнее.
Последний раз редактировалось Vascom 07.10.2019 15:41, всего редактировалось 1 раз.
Спасибо сказали:
-
- Сообщения: 13
Re: информация об активных пользователях
Да. Это учебное задание. Я не скрываю. Большое спасибо за подсказку. Пойду изучать вопрос./dev/random писал: ↑07.10.2019 15:36Поскольку это явно учебное задание, давать вам готовый ответ было бы неправильно. Но подсказать можно: sed'ом отредактируйте вывод команды users, чтобы он выглядел, как регулярное выражение, и подставьте через "$(...)" в grep.
-
- Модератор
- Сообщения: 20043
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: информация об активных пользователях
Я бы вместо грепания /etc/passwd использовал getent.
Добавлено (15:55):
Что если в системе окажутся пользователи user, user1 и testuser, причём user будет залогинен? А если юзера зовут bash?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
- Сообщения: 13
Re: информация об активных пользователях
Большое спасибо за помощь. Особенно /dev/random и Vascom. Задача решена путем объединения ваших советов.
Решил задачу следующим образом: grep -E $(users | tr -s " " "|") /etc/passwd
Еще раз большое спасибо!!!
Решил задачу следующим образом: grep -E $(users | tr -s " " "|") /etc/passwd
Еще раз большое спасибо!!!
-
- Сообщения: 13
Re: информация об активных пользователях
Еще одна маленькая просьба: Вы бы не могли бы подсказать, что это за прием
, как он называется? Чтобы поискать и почитать. Заранее спасибо.
-
- Модератор
- Сообщения: 20043
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: информация об активных пользователях
Всё же попробуйте ответить на вопросы:
Bizdelnick писал: ↑07.10.2019 15:42Что если в системе окажутся пользователи user, user1 и testuser, причём user будет залогинен? А если юзера зовут bash?
Command substitution.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
- Сообщения: 13
Re: информация об активных пользователях
Создал юзера bash, выполнил командуBizdelnick писал: ↑07.10.2019 16:19Всё же попробуйте ответить на вопросы:Bizdelnick писал: ↑07.10.2019 15:42Что если в системе окажутся пользователи user, user1 и testuser, причём user будет залогинен? А если юзера зовут bash?Command substitution.
Вот какой результат получил:
Вроде бы сработало как надо. Но для более уверенного суждения у меня не хватает опыта. Какие подводные камни можно ожидать?
-
- Администратор
- Сообщения: 5190
- ОС: Gentoo
-
- Сообщения: 13
Re: информация об активных пользователях
Аааа. Я понял. Вы клоните к тому, что если будет залогинен только user, но при этом в системе будут зарегистрированы пользователи user1 или testuser, то при выполнении поиска, в результат также попадут строки user1 и testuser? Правильно?
-
- Администратор
- Сообщения: 5190
- ОС: Gentoo
Re: информация об активных пользователях
Именно. А если залогинен пользователь bash, то в результат попадут пользователи, у которых /bin/bash в качестве шелла.
Спасибо сказали:
-
- Сообщения: 1699
- ОС: Fedora 32
Re: информация об активных пользователях
Надо лишь немного усложнить регулярку для паттерна грепа.
Спасибо сказали:
-
- Модератор
- Сообщения: 20043
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: информация об активных пользователях
А потом подумать, что будет, если в имени пользователя встретится, например, точка, и усложнить ещё немного… А потом ещё немного…
В общем, формировать регулярки скриптом — дело неблагодарное, и требует хорошего понимания того, как они работают.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
- Сообщения: 13
Re: информация об активных пользователях
Немного усложнил:
grep -E ^$(users | tr -s " " "|") /etc/passwd
В правильном направлении мыслю? Поиск только по словам (они же юзеры) находящихся в начале строки. Тогда, если какой-то юзер использует bash, то строка не выводится. У себя на машине проверил, вроде работает, но не уверен.
-
- Администратор
- Сообщения: 5190
- ОС: Gentoo
Re: информация об активных пользователях
В правильном-то в правильном (если по условию задачи нужно именно грепать /etc/passwd, а не использовать более удобный getent), но это один маленький шажок на огромном пути, и даже этот шажок вы сделали не до конца: "^" имеет более высокий приоритет, чем "|".
Спасибо сказали:
-
- Модератор
- Сообщения: 20043
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: информация об активных пользователях
А как насчёт user vs. user1? В обоих случаях в начале строки будет user.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 1
Re: информация об активных пользователях
А как машина будет работать с этой командой?
grep -E ^$(users | tr -s " " "|") /etc/passwd
grep -E ^$(users | tr -s " " "|") /etc/passwd
-
- Сообщения: 2289
- ОС: Gentoo
Re: информация об активных пользователях
Shell
$ loginctl list-users
Добавлено (23:19):
Будет выводить правильно, если только присутствует только один пользователь, иначе grep ни чего не покажет. Лучше уж тогда использовать xargs в конвейере.
Shell
$ users |tr " " "\n"| xargs -i echo USER={}
Последний раз редактировалось ormorph 03.10.2022 23:22, всего редактировалось 2 раза.
-
- Модератор
- Сообщения: 20043
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: информация об активных пользователях
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |