🏠 Домашнее задание 15 — Продолжение работы со скриптами

К оглавлению урока

⚡ Что нужно сдать

Один файл скрипта с 6 задачами: sleeper.sh (цикл 10 раз), редактирование sleep, cpuinfo, имя ОС, чистое имя ОС, 50 файлов. Прислать файл скрипта.

Задание (дословно из LMS)

Linux: Домашнее задание 15 (Python)

Работаем в Fabrice Bellard jslinux или на учебном сервере в Вашей директории в папке opt:

  1. Создайте скрипт sleeper.sh, который будет 10 раз с интервалом в 5 секунд писать дату в формате HH:MM:SS и количество процессов одним числом.
  2. Уменьшите или уберите временной интервал (который нам дает sleep), используя vi или nano, закомментировав строку или поменяв значение sleep.
  3. С помощью скрипта запишите в файл информацию о процессоре.
  4. С помощью скрипта запишите в файл информацию об операционной системе, но отфильтруйте информацию так, чтобы осталось только имя (NAME=Alpine Linux) — или другое имя, если работаете на сервере.
  5. Выполните прошлое действие, но так, чтобы слово NAME= не осталось, а было только имя в чистом виде (Alpine).
  6. С помощью скрипта создайте 50 файлов с расширением txt и именами от 50.txt до 100.txt.
  7. Пришлите файл скрипта.

Вот что вам понадобится для реализации всего этого:

sleep
touch
ps -ef
date +"%H:%M:%S"
cat /etc/os-release
grep
awk '{print$НОМЕР_СТОЛБЦА}'
cat /proc/cpuinfo

Если удобно, то вот однострочник, создающий простейший скрипт, который надо будет редактировать:

echo -e '#!/bin/bash\n date\n echo "it works!"' > /tmp/script.sh

Подготовка окружения

Вариант А — jslinux (в браузере)

  1. Открыть bellard.org/jslinux → выбрать Alpine Linux
  2. Дождаться загрузки (1–2 мин)
  3. Создать рабочую директорию: mkdir -p /opt/homework24 && cd /opt/homework24

Вариант Б — учебный сервер

  1. Подключиться: ssh user@linux.itcareerhub.de
  2. Перейти в рабочую директорию: cd /opt/ГРУППА

Пошаговое решение

Шаг 1 — Создать скрипт sleeper.sh

# /opt/homework24/sleeper.sh

#!/bin/bash
for i in {1..10}; do
    date +"%H:%M:%S"
    ps -ef | wc -l
    sleep 5
done
# Сделать исполняемым и запустить
chmod +x sleeper.sh
./sleeper.sh

Скрипт выведет 10 раз (с паузой 5 сек) строку вида:

14:23:01
87
14:23:06
87

Шаг 2 — Убрать/уменьшить sleep

Открыть скрипт в vi:

vi sleeper.sh

Найти строку sleep 5 и:

  • Закомментировать: добавить # в начало строки → # sleep 5
  • Или уменьшить: изменить 5 на 1sleep 1

В vi: нажать i (режим вставки), изменить, нажать Esc, ввести :wq, нажать Enter.

В nano: nano sleeper.sh → изменить → Ctrl+O (сохранить) → Ctrl+X (выйти).

Шаг 3 — Записать информацию о процессоре

# /opt/homework24/sleeper.sh (добавить в конец)

# Задание 3: информация о процессоре
cat /proc/cpuinfo > cpuinfo.txt
echo "CPU info saved to cpuinfo.txt"

Шаг 4 — Имя ОС с NAME=

# Задание 4: имя ОС, фильтровать до NAME=...
cat /etc/os-release | grep "PRETTY_NAME"
# Вывод: PRETTY_NAME="Alpine Linux v3.18"

Записать в файл:

cat /etc/os-release | grep "PRETTY_NAME" > os_info.txt

Шаг 5 — Только имя ОС без NAME=

# Задание 5: только имя без PRETTY_NAME= и кавычек
cat /etc/os-release | grep "PRETTY_NAME" | awk -F'"' '{print $2}'
# Вывод: Alpine Linux v3.18

Объяснение: awk -F'"' '{print $2}' — разделитель — кавычка ", второй элемент между кавычками — это и есть имя ОС.

Шаг 6 — Создать 50 файлов 50.txt–100.txt

# Задание 6: файлы с именами 50.txt, 51.txt, ..., 100.txt
for j in {50..100}; do
    touch ${j}.txt
done
ls *.txt | head -5   # проверка
Итоговый скрипт с всеми заданиями

# /opt/homework24/sleeper.sh

#!/bin/bash

# Задание 1: 10 раз вывести дату HH:MM:SS и количество процессов
for i in {1..10}; do
    date +"%H:%M:%S"
    ps -ef | wc -l
    sleep 5   # Задание 2: закомментировать или уменьшить
done

# Задание 3: информация о процессоре
cat /proc/cpuinfo > cpuinfo.txt
echo "CPU info saved to cpuinfo.txt"

# Задание 4: имя ОС (с NAME=...)
cat /etc/os-release | grep "PRETTY_NAME" > os_name.txt
echo "OS name (with prefix) saved to os_name.txt"

# Задание 5: только имя ОС (без NAME=...)
cat /etc/os-release | grep "PRETTY_NAME" | awk -F'"' '{print $2}' > os_name_clean.txt
echo "Clean OS name saved to os_name_clean.txt"

# Задание 6: создать 50 файлов 50.txt–100.txt
for j in {50..100}; do
    touch ${j}.txt
done
echo "Created $(ls *.txt | wc -l) txt files"

Проверка выполнения

# Проверить количество txt-файлов (должно быть 51: от 50 до 100 включительно)
ls *.txt | wc -l

# Проверить файлы с информацией
cat cpuinfo.txt | head -5
cat os_name.txt
cat os_name_clean.txt

# Запустить скрипт ещё раз (уже без sleep)
./sleeper.sh