✅ Решения — урок 21

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

⚡ Скрипты из занятия

Задание 2 (10 файлов + архив):

#!/bin/bash
mkdir -p /home/tar
temp_dir="/home/tar"
for i in {1..10}; do echo "Random: $RANDOM" > "$temp_dir/$i.txt"; done
tar -czf /tmp/RANDOM.tar.gz -C $temp_dir .
rm -r $temp_dir

Задание 3 (/home/MyDir + время + архив):

#!/bin/bash
set -e
mkdir -p /home/MyDir
for run in {1..10}; do date '+%T' > /home/MyDir/$run.txt; sleep 0.5; done
tar -cvzf /tmp/mydir.tar.gz /home/MyDir/*
sleep 5
tar -tf /tmp/mydir.tar.gz > /root/mydir-tar.txt

Решение 1 — Объяснение команд tar

Команда 1: tar -cf archive.tar file1.txt file2.txt directory1

  • -c — создаёт новый архив
  • -f — определяет имя архива (archive.tar)
  • Результат: архив archive.tar, содержащий файлы file1.txt, file2.txt и содержимое директории directory1
  • Архив НЕ сжат — tar только объединяет файлы

Команда 2: tar -czf archive.tar.gz directory1

  • -c — создаёт новый архив
  • -z — сжимает данные с помощью gzip
  • -f — определяет имя архива (archive.tar.gz)
  • Результат: сжатый архив archive.tar.gz, содержащий содержимое директории directory1
  • Расширение .tar.gz = сначала tar (объединить), потом gzip (сжать)

Решение 2 — Скрипт: 10 файлов с $RANDOM + архив

Полный скрипт из источника лекции:

# /home/tar/create_random.sh

#!/bin/bash
# Создаем временную директорию
mkdir -p /home/tar
temp_dir="/home/tar"
# Создадим файлы
for i in {1..10}; do echo "Случайное число: $RANDOM" > "$temp_dir/$i.txt"; done
# Создаем архив из временной директории
tar -czf /tmp/RANDOM.tar.gz -C $temp_dir .
# Удаляем временную директорию
rm -r $temp_dir

Разбор строк:

  • mkdir -p /home/tar — создаёт директорию, если её нет
  • temp_dir="/home/tar" — задаём переменную с путём к директории
  • for i in {1..10}; do ... done — цикл 10 итераций
  • echo "Случайное число: $RANDOM" > "$temp_dir/$i.txt" — записываем случайное число в файл 1.txt, 2.txt, ... 10.txt
  • tar -czf /tmp/RANDOM.tar.gz -C $temp_dir . — создаём gzip-архив; -C $temp_dir меняет директорию перед архивацией, . = текущая (то есть /home/tar)
  • rm -r $temp_dir — удаляем временную директорию
⚠️ ВНИМАНИЕ: rm -r $temp_dir
Если переменная $temp_dir пустая или неправильная, команда может удалить важные данные. Всегда проверяйте значение переменной перед использованием с rm -r.

Решение 3 — Скрипт: /home/MyDir + время + архив

Полный скрипт из источника лекции:

# /home/mydir_script.sh

#!/bin/bash
set -e
mkdir -p /home/MyDir
for run in {1..10}
do
    date '+%T' > /home/MyDir/$run.txt
    sleep 0.5
done

tar -cvzf /tmp/mydir.tar.gz /home/MyDir/*
sleep 5
tar -tf /tmp/mydir.tar.gz > /root/mydir-tar.txt

Разбор строк:

  • set -e — прерывает скрипт при любой ошибке
  • mkdir -p /home/MyDir — создаёт директорию /home/MyDir, если ещё не существует
  • for run in {1..10} — цикл, который будет выполняться 10 раз
  • date '+%T' > /home/MyDir/$run.txt — в каждой итерации записывает текущее время в формате HH:MM:SS в файл в директории /home/MyDir
  • sleep 0.5 — приостанавливает выполнение скрипта на 0.5 секунды
  • tar -cvzf /tmp/mydir.tar.gz /home/MyDir/* — создаёт архив с именем mydir.tar.gz, который содержит все файлы из директории /home/MyDir; флаг -v выводит имена файлов
  • sleep 5 — приостанавливает выполнение скрипта на 5 секунд
  • tar -tf /tmp/mydir.tar.gz > /root/mydir-tar.txt — выводит список файлов в архиве mydir.tar.gz в файл /root/mydir-tar.txt