Skip to content

Отложенное и регулярное выполнение заданий

Переходим к заданиям потруднее. По традиции будет представлен формат: вопрос — ответ. Разберем работу с процессами, сигналами и приоритетами в Bash. Также затронем тему выполнения отложенных задач, и, разумеется, напишем их сами.

Поехали:

    Процессы, сигналы и приоритеты

  1. Узнать имя файла устройства того терминала, на котором вы вошли в сеанс.
    tty

  2. Вывести список запущенных в текущем терминале процессов.
    ps

  3. Вывести список всех процессов, в виде таблицы с колонками ID процесса, ID родительского процесса, имя процесса.
    ps -A

  4. Выведите список процессов, запущенных пользователями, вошедшими в сеанс.
    w

  5. Получите список всех процессов, связанных с терминалами.
    ps -t

  6. Выведите PID процессов, связанных с каталогом /usr.
    ps -C /usr

  7. Выведите список процессов, содержащих «man» в имени.
    ps -f | grep man

  8. Получите иерархический список процессов с помощью команды ps (не pstree).
    ps axjf

  9. Вывести id текущей оболочки bash.
    echo $$

  10. Найдите пустые файлы в каталоге linux_lab2 в фоновом режиме.
    find d1/ -empty &

  11. Подтвердите тип содержимого двух из найденных файлов?
    file pusto-1

  12. Запустить в фоновом режиме команду sleep 1000 и sleep 2000. Вывести информацию о запущенных задачах.
    sleep 1000 &
    sleep 2000 &
    jobs

  13. Убить одной командой все запущенные задачи sleep.
    pkill sleep

  14. Проверить, как задача sleep 1000, запущенная в фоновом режиме, реагируют на сигналы HUP, INT, QUIT, TRAP, KILL, TERM.
    hup — Обрыв терминальной линии
    int — Прерывание
    quit — Выход
    trap — Ловушка трассировки/останова
    kill — убито
    TERM — Завершено

  15. Запрограммировать оболочку bash таким образом, чтобы при получении ей сигнала HUP она выводила список всех запущенных процессов в файл, содержащий в названии id текущей оболочки bash.
    trap " ps > file-$(echo $$)" HUP

  16. Запустите команду sleep 10000 в фоновом режиме с приоритетом 10.
    nice -n 10 sleep 10000 &

  17. Увеличьте приоритет предыдущей команды на 6 пунктов.
    renise 16 3541[id]

  18. Уменьшите приоритет предыдущей команды на 10 пунктов.
    Приоритет изменился? Как изменить приоритет?
    renise 6 3541[id] (Приоритет не изменился, отказано в доступе. Можно изменить от root.)

  19. От имени суперпользователя запустить команду индексирования базы данных поиска в следующем виде: sudo time nice -n 19 updatedb. Затем выполните такую же команду, в которой значение nice number для updatedb будет 5. Сравнить полученные
    результаты.
    Ответ: при запуске одинаковых команд с разными приоритетами время выполнение тоже будет разное.

  20. От имени обычного пользователя попытайтесь запустить оболочку bash со значением nice number, равным -1. Какое сообщение выводится?
    nice: невозможно установить значение nice: Отказано в доступе.

  21. Для непрерывного просмотра запущенных в системе процессов установите время обновления 10 сек. Какое время установлено по умолчанию?
    top -d 10
    6 сек по умолчанию

  22. Просмотрите список запущенных вами процессов в непрерывном режиме.
    top -u nikiqq

  23. Организуйте завершение команды top после десяти обновлений.
    top -n 10

  24. Отложенное и регулярное выполнение задач

  25. Создайте файл, содержащий полный список процессов, полученный через 10 минут от текущего времени.
    at now +10 minutes
    at> ps > file1
    at> "Ctrl + d"

  26. Проверьте, запущены ли какие-нибудь задания в cron или at для пользователя root.
    at -l
    crontab -l

  27. При помощи команды at сделать так, чтобы ровно через 5 минут от текущего времени произошла запись списка всех процессов в файл с именем, содержащим в своём названии системное время на момент записи.
    at now + 5 minutes
    at> ps > file-$(date +%T)
    at> "Ctrl + d"

  28. При помощи команды at организовать обычное завершение работы браузера firefox или chrome в 16:00.
    at 16:00
    at> pkill firefox
    at> "Ctrl + d"

  29. Сделать при помощи cron так, чтобы команда updatedb запускалась раз в сутки, каждый час, каждые 5 минут.
    echo '58 16 * * * updatedb' > crontab1
    echo '58 * * * * updatedb' > crontab1
    echo '0,5,10,15,20,25,30,35,40,45,50,55 * * * * updatedb' > crontab1

  30. При помощи команды at сделать так, чтобы через 5 минут от текущего времени создалось задание для cron, которое создавало бы каждые 9 минут ещё одно задание для cron, заключающееся в том, чтобы каждые 7 минут уничтожать все задания пользователя для cron.
    at now + 5 minutes
    at> echo '9 * * * * echo '7 * * * * pkill cron '' > crontab1
    at> crontab crontab1
    at> "Ctrl + d"

  31. Ежедневно в 10:30 требуется получать список пользователей, входивших в сеанс в последнее время.
    echo '30 10 * * * last' > crontab1
    crontab -e
    (заходим в редактор)
    crontab crontab1 ( устанавливаем таблицу)
    от root: crontab -e -u nikiqq
    в редакторе выбираем цифру 1 и таблица с заданиями отобразилась.

Опубликовано вLinux Bash

Будьте первым, кто оставит комментарий

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *