🏠 Домашнее задание

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

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

Linux: Домашнее задание 19
  1. Создайте на сервере linux.itcareerhub.de в своей папке /opt 2 дополнительных директории.
  2. В первой директории найдите способ (например написав скрипт или выполнив команду в терминале) создать 100 файлов со случайными названиями с использованием $RANDOM. Например файлы 15358 9396 240.
  3. Напишите скрипт, который будет переносить в другую директорию файлы, если число, стоящее в названии чётное — то перенести файлы в другую директорию, если нет — оставить в текущей.
  4. Пришлите команды или скрипты, с помощью которых Вы выполнили задание.

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

Шаг 1: подключиться к серверу

ssh имя_пользователя@linux.itcareerhub.de

Шаг 2: создать две директории в /opt

# Перейти в свою папку /opt
cd /opt/your_username

# Создать две директории
mkdir dir_source
mkdir dir_even

# Проверить
ls -la

Шаг 3: создать 100 файлов с $RANDOM-именами

Вариант А: одна команда

cd dir_source
for i in {1..100}; do touch $RANDOM; done
ls | head -20

Вариант Б: скрипт

#!/bin/bash
# Создать 100 файлов с именами $RANDOM в первой директории
TARGET_DIR="/opt/your_username/dir_source"
cd "$TARGET_DIR"
for i in {1..100}; do
  touch $RANDOM
done
echo "Создано файлов: $(ls | wc -l)"
Примечание: $RANDOM генерирует число от 0 до 32767. Возможны коллизии (одинаковые имена), поэтому реально созданных файлов может быть немного меньше 100.

Шаг 4: скрипт переноса файлов с чётными именами

#!/bin/bash
SOURCE_DIR="/opt/your_username/dir_source"
TARGET_DIR="/opt/your_username/dir_even"

# Перебрать все файлы в исходной директории
for file in "$SOURCE_DIR"/*; do
  # Получить имя файла (без пути)
  name=$(basename "$file")

  # Проверить, является ли имя числом и чётным ли оно
  if [ "$((name % 2))" -eq 0 ]; then
    mv "$file" "$TARGET_DIR/"
    echo "Перенесён: $name"
  fi
done

echo "Готово!"
echo "В dir_source: $(ls $SOURCE_DIR | wc -l) файлов"
echo "В dir_even:   $(ls $TARGET_DIR | wc -l) файлов"

Шаг 5: запустить скрипт

chmod +x move_even.sh
./move_even.sh

Шаг 6: проверить результат

# Посмотреть сколько файлов в каждой директории
ls /opt/your_username/dir_source | wc -l   # нечётные
ls /opt/your_username/dir_even | wc -l     # чётные

# Убедиться что все имена в dir_even чётные
for f in /opt/your_username/dir_even/*; do
  name=$(basename "$f")
  echo "$name % 2 = $((name % 2))"
done

Объяснение логики

  • basename "$file" — извлечь имя файла без пути
  • $((name % 2)) — арифметическое выражение: остаток от деления на 2
  • -eq 0 — равно нулю (чётное число)
  • mv "$file" "$TARGET_DIR/" — переместить файл в целевую директорию
Проверка в VS Code: Если у вас настроено подключение к серверу через Remote-SSH расширение, можно открыть терминал и запустить скрипт прямо из редактора. Точки останова (F9) и отладка (F5) работают для Python-скриптов; для bash-скриптов используйте bash -x ./move_even.sh (режим трассировки).