LINUX/ SHELL

LINUX/ SHELL

Сообщение Ser_Crash » 19 сен 2016, 08:08

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

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

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

Ваш проделанный труд готов компенсировать услугами в сфере графического дизайна.
Ser_Crash
Молчаливый гость
Молчаливый гость
 
Автор темы
Сообщений: 1
Стаж: 1 год 10 месяцев 1 день
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

LINUX/ SHELL

Спонсор

Спонсор
 

Re: LINUX/ SHELL

Сообщение Oleg65 » 19 сен 2016, 10:19

Да как бы это не сложно: who - показывает вошедших пользователей, в цикл, тормоз в 10 сек - через sleep. Как-то так навскидку. Набросайте свою идею сами, поможем сделать работоспособной ;)
Аватар пользователя
Oleg65
Местный говорун
Местный говорун
 
Сообщений: 851
Стаж: 3 года 6 месяцев 2 дня
Откуда: г.Коломна Моск.обл.
Благодарил (а): 71 раз.
Поблагодарили: 205 раз.

Re: LINUX/ SHELL

Сообщение Olej » 19 сен 2016, 16:14

Ser_Crash писал(а):

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

А зачем же дублировать темы? :evil:

Ser_Crash писал(а):

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

Вот здесь вам ссылки на справочник с примерами на все случаи жизни: Программирование сценариев bash
P.S. Даже если вам помогут или напишут скрипт, то вам всё-равно придётся к нему возвращаться, улучшать и развивать (по опыту).
Olej
 
Стаж: 48 лет 6 месяцев 19 дней

Re: LINUX/ SHELL

Сообщение Olej » 19 сен 2016, 16:26

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 , или написать себе любопытное приложение.
Olej
 
Стаж: 48 лет 6 месяцев 19 дней

Re: LINUX/ SHELL

Сообщение nezabudka » 20 сен 2016, 16:38

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

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

В вашем случае это может быть выполненно вот так:
Код: выделить все
watch -n 10 w

Проверяет залогиненых пользователей каждые 10 секунд.
В моем выводе видно что я залогинена в системе два раза. Первый при входе в систему
через графический терминал и второй раз я подключилась к машине на свою же учетную запись
с локального адреса 192.168.0.22 по ssh.
450
Список будет обновляться каждые 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 предлагаю ознакомится самостоятельно
Код: выделить все
man id

С ее помощью например можно с имитировать команду whoami
Код: выделить все
id -un

Не буду изменять, перепишу приведенный скрипт с командой очистки экрана
и выводом счетчика, а то получается не доделаный:
Код: выделить все
#!/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
Местный говорун
Местный говорун
 
Сообщений: 613
Фото: 180
Стаж: 3 года 3 месяца 2 дня
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 145 раз.

Re: LINUX/ SHELL

Сообщение nezabudka » 20 сен 2016, 16:43

Ser_Crash писал(а):

...Ваш проделанный труд готов компенсировать услугами в сфере графического дизайна.

Звучит не очень располагающе но можно исправить ситуацию. Назвался груздем - полезай в кузов. С вас
логотип форума. Без обязательств. :)
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Сообщений: 613
Фото: 180
Стаж: 3 года 3 месяца 2 дня
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 145 раз.

Re: LINUX/ SHELL

Сообщение nezabudka » 20 сен 2016, 22:12

Увлеклась чё то. Давно не писала скрипты, взгрустнулось :) .
Код: выделить все
#!/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
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Сообщений: 613
Фото: 180
Стаж: 3 года 3 месяца 2 дня
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 145 раз.


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

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron