Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

LINUX/ SHELL

Ответить
Ser_Crash
Молчаливый гость
Молчаливый гость
Сообщения: 1
Зарегистрирован: 19 сен 2016, 07:58

LINUX/ SHELL

Сообщение Ser_Crash »

Доброго времени суток.

Начинаю изучать язык программирования SHELL на LINUX.
Хотел бы попросить вашей помощи в написании скрипта.

"Разработать программу, выводящую через определённый интервал времени
информацию о пользователях в системе: кто вошел, кто вышел".

Ваш проделанный труд готов компенсировать услугами в сфере графического дизайна.
Аватара пользователя
Oleg65
Местный говорун
Местный говорун
Сообщения: 859
Зарегистрирован: 18 янв 2015, 10:56
Откуда: г.Коломна Моск.обл.

Re: LINUX/ SHELL

Сообщение Oleg65 »

Да как бы это не сложно: who - показывает вошедших пользователей, в цикл, тормоз в 10 сек - через sleep. Как-то так навскидку. Набросайте свою идею сами, поможем сделать работоспособной ;)
Olej

Re: LINUX/ SHELL

Сообщение Olej »

Ser_Crash писал(а):Доброго времени суток.
А зачем же дублировать темы? :evil:
Ser_Crash писал(а):Начинаю изучать язык программирования SHELL на LINUX.
Хотел бы попросить вашей помощи в написании скрипта.
Вот здесь вам ссылки на справочник с примерами на все случаи жизни: Программирование сценариев bash
P.S. Даже если вам помогут или напишут скрипт, то вам всё-равно придётся к нему возвращаться, улучшать и развивать (по опыту).
Olej

Re: LINUX/ SHELL

Сообщение Olej »

Oleg65 писал(а):who - показывает вошедших пользователей, в цикл, тормоз в 10 сек - через sleep.
За основу взять что-то отсюда:

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

[olej@dell ~]$ who -u -H
ИМЯ   ЛИНИЯ   ВРЕМЯ              PID КОММЕНТАРИЙ
olej     :0           2016-09-18 14:18   ?          1154 (:0)
olej     pts/2        2016-09-19 16:19   .          7352 (127.0.0.1)
Дальше анализировать (с периодом вот тот "тормоз в 10 сек") ... например, разгребая вывод регулярными выражениями...
(здесь нужно учесть, что в разных дистрибутивах Linux формат who может различаться ... поэтому нужно найти общее решение)

Ну, а по-хорошему, ваше приложение должно бы быть демоном, который пишет логи в системный или свой собственный журнал.
P.S. Всё сильно зависит для чего это вам надо: написать преподавателю чтобы отвязался :D , или написать себе любопытное приложение.
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: LINUX/ SHELL

Сообщение nezabudka »

Всех залогиненых пользователей выводят команды:
who
w

Показывает историю команда:
last
За очередность выполнения отвечает сервис cron
Присутствует еще такая команда watch которая без опций выполняет программу
каждую секунду. Хорошо будет видно на примере по использованию памяти:

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

watch free
В вашем случае это может быть выполненно вот так:

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

watch -n 10 w
Проверяет залогиненых пользователей каждые 10 секунд.
В моем выводе видно что я залогинена в системе два раза. Первый при входе в систему
через графический терминал и второй раз я подключилась к машине на свою же учетную запись
с локального адреса 192.168.0.22 по ssh.
[album]450[/album]
Список будет обновляться каждые 10 секунд. Кроме того
вполне можно самому написать скрипт вывода через определенный промежуток времени используя функцию sleep:
cat test.sh

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

#!/usr/bin/env bash
while : ; do
     echo "Привет"
     sleep 2
done
Делаем скрипт исполняемым:

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

chmod 755 test.sh
И запускаем:
./test
Вместо строчки echo "Привет" подставляем нужную команду, например df -h /
В слудующей строчке выбираем интервал повтора в секундах.
Завершить выполнение Ctrl+C
И в заключении просмотреть список всех зарегистрированных в системе пользователей можно командой:

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

getent passwd | awk -F: '{ if ($3 >= 1000) print $1}'
Еще присутствует команда id предлагаю ознакомится самостоятельно С ее помощью например можно с имитировать команду whoami Не буду изменять, перепишу приведенный скрипт с командой очистки экрана
и выводом счетчика, а то получается не доделаный:

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

#!/usr/bin/env bash
znak=0
while : ; do
     echo $((znak++))
     sleep 1
done
Последний раз редактировалось nezabudka 20 сен 2016, 22:09, всего редактировалось 5 раз.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: LINUX/ SHELL

Сообщение nezabudka »

Ser_Crash писал(а):...Ваш проделанный труд готов компенсировать услугами в сфере графического дизайна.
Звучит не очень располагающе но можно исправить ситуацию. Назвался груздем - полезай в кузов. С вас
логотип форума. Без обязательств. :)
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: LINUX/ SHELL

Сообщение nezabudka »

Увлеклась чё то. Давно не писала скрипты, взгрустнулось :) .

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

#!/usr/bin/env bash
znak=0
tput civis
for((i=0; i<8; i++)); do
        wellcom="Hello World "
        tput setaf $znak
        tput sc
        while [[ $wellcom != "" ]]; do
             echo -ne "${wellcom:0:1}"
             sleep 0.1 
             wellcom=${wellcom:1}
        done
        sleep 0.2 
        ((znak++))
        tput el1 
        tput rc
done
tput sgr0
tput cnorm
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Ответить

Вернуться в «Программы в Linux»