Files
2026-test-labor-02/bash/USAGE.md
2026-06-22 23:05:12 +03:00

16 KiB
Raw Blame History

Инструкция по использованию скрипта замера скорости интернета

Описание

speed_test.sh — это bash-скрипт для измерения скорости интернет-соединения путём последовательной загрузки файла с указанного URL.

Требования

Скрипт использует стандартные утилиты, которые обычно предустановлены в большинстве Unix-подобных систем:

  • bash — командная оболочка
  • curl — утилита для загрузки данных по URL
  • bc — калькулятор для вычислений с плавающей точкой
  • awk, seq — стандартные утилиты

Установка зависимостей (если требуется)

  • Ubuntu/Debian:
    sudo apt-get install curl bc
    
  • macOS:
    brew install curl bc
    
  • CentOS/RHEL:
    sudo yum install curl bc
    
  • Fedora/RHEL:
    sudo dnf install curl bc
    
  • Windows (через WSL):
    sudo apt-get install curl bc
    

Использование

Базовое использование

bash speed_test.sh [ОПЦИИ] <URL>

Где <URL> — адрес файла для загрузки (например, большая картинка или другой файл).

Опции

  • -n, --count NUM — Количество запросов для тестирования (по умолчанию: 10)
  • -q, --quiet — Тихий режим: выводит только скорость в МБ/с (без единиц измерения, просто число)
  • -g, --gzip — Разрешить HTTP-сжатие (gzip/deflate) для измерения эффективной скорости
  • -c, --no-color — Отключить цветной вывод (по умолчанию цвета включены)
  • -h, --help — Показать справку по использованию

Режимы измерения

По умолчанию (без -g): Реальная скорость канала

Измеряет реальную пропускную способность интернет-канала:

  • Отключает HTTP-сжатие (gzip/deflate)
  • Показывает, сколько байт реально передаётся по сети
  • Используйте для: тестирования скорости провайдера, VPN, выбора быстрого сервера

С опцией -g: Эффективная скорость

Измеряет эффективную скорость передачи данных:

  • Разрешает серверу использовать HTTP-сжатие
  • Показывает, сколько полезных данных получено (после распаковки)
  • Может быть в 2-10 раз выше для текстовых данных (HTML, JSON, CSS)
  • Используйте для: оценки производительности веб-приложений, API

Тихий режим особенно полезен для использования в других скриптах, где нужно получить только результат без дополнительного форматирования.

Примеры

Тест с использованием готового тестового файла selectel.ru (Санкт-Петербург):

./speed_test.sh https://speedtest.selectel.ru/10MB

Там же есть файлы других размеров, например:

  • 100MB: https://speedtest.selectel.ru/100MB
  • 1GB: https://speedtest.selectel.ru/1GB
  • 10GB: https://speedtest.selectel.ru/10GB

Как работает скрипт

  1. Проверка аргументов: Скрипт проверяет, что передан URL для тестирования
  2. Серия запросов: Выполняется 10 последовательных HTTP-запросов к указанному URL
  3. Замер параметров: Для каждого запроса измеряется:
    • Время выполнения (в секундах)
    • Объём скачанных данных (в байтах)
    • Скорость загрузки (в МБ/с)
  4. Вычисление средних значений: После завершения всех запросов вычисляются:
    • Среднее время запроса
    • Общий и средний объём данных
    • Средняя скорость интернет-соединения в МБ/с

Вывод скрипта

Обычный режим

Скрипт выводит:

  • Цветной заголовок (можно отключить через --no-color)
  • Информацию о каждом отдельном запросе с ✓ зелёной галочкой (время, объём, скорость)
  • Итоговую статистику:
    • Количество выполненных запросов
    • Общее и среднее время
    • Общий и средний объём данных
    • Среднюю скорость в МБ/с

Тихий режим (-q или --quiet)

В тихом режиме скрипт выводит только одно число — среднюю скорость в МБ/с без единиц измерения.

Это полезно для:

  • Использования результата в других скриптах.
  • Автоматизации тестирования.
  • Сравнения разных серверов, CDN и VPN-подключений.
  • Логирования результатов.

Пример:

$ ./speed_test.sh -q -n 2 https://speedtest.selectel.ru/10MB
2.40

Пример вывода

==============================================
Замер скорости интернета
==============================================
URL: http://speedtest.ftp.otenet.gr/files/test10Mb.db
Количество запросов: 10
==============================================

Запрос 1/10... OK (11.039670s, 10.00 МБ, .90 МБ/с)
Запрос 2/10... OK (127.344702s, 10.00 МБ, .07 МБ/с)
...
Запрос 10/10... OK (3.832720s, 10.00 МБ, 2.60 МБ/с)

==============================================
Результаты измерения
==============================================
Выполнено запросов: 10
Общее время: 192.026102 сек
Среднее время запроса: 19.2026 сек
Общий объём данных: 100.00 МБ
Средний объём на запрос: 10.00 МБ

==============================================
СРЕДНЯЯ СКОРОСТЬ: .52 МБ/с
==============================================

Рекомендации по выбору URL для тестирования

Для точного измерения скорости интернета рекомендуется:

  1. Размер файла: Используйте файлы размером от 5 МБ до 100 МБ

    • Слишком маленькие файлы (< 1 МБ) дадут неточные результаты
    • Слишком большие файлы (> 100 МБ) увеличат время тестирования
  2. Стабильный сервер: Выбирайте серверы с хорошей пропускной способностью

    • Speedtest-серверы
    • CDN-сервисы (Cloudflare, Akamai)
    • Известные хостинги изображений
  3. Географическая близость: Для более точных результатов выбирайте серверы в вашем регионе

Рекомендуемые тестовые файлы

Selectel Speedtest (Россия):

# 10 МБ файл (быстро, хорошо для частых тестов)
./speed_test.sh -n 5 https://speedtest.selectel.ru/10MB

# 100 МБ файл (рекомендуется для точных измерений)
./speed_test.sh https://speedtest.selectel.ru/100MB

# 1000 МБ (1 ГБ) файл (для очень стабильных каналов)
./speed_test.sh -n 3 https://speedtest.selectel.ru/1000MB

Примечание: Для больших файлов (100 МБ+) рекомендуется использовать меньшее количество запросов (2-5) для экономии времени и трафика.

Устранение неполадок

Ошибка: "curl: command not found"

Решение: Установите curl (см. раздел "Установка зависимостей")

Ошибка: "bc: command not found"

Решение: Установите bc (см. раздел "Установка зависимостей")

Ошибка: "Не удалось выполнить запрос"

Возможные причины:

  • Неверный или недоступный URL
  • Отсутствие интернет-соединения
  • Сервер не отвечает или перегружен
  • Файл был удалён

Решение: Проверьте URL и подключение к интернету

Очень низкая скорость

Возможные причины:

  • Медленный сервер источника
  • Проблемы с вашим интернет-соединением
  • Высокая загрузка сети

Решение: Попробуйте другой URL или проверьте соединение

Технические детали

Единицы измерения

  • МБ (мегабайт) = 1 048 576 байт (1024 × 1024)
  • Скрипт измеряет скорость в МБ/с (мегабайтах в секунду)
  • Это отличается от Мбит/с (мегабит в секунду), которые часто используют провайдеры
  • Конверсия: 1 МБ/с ≈ 8 Мбит/с

Метод расчёта

Средняя скорость вычисляется как:

Средняя скорость = (Общий объём данных в МБ) / (Общее время в секундах)

Этот метод даёт более точную картину реальной пропускной способности при последовательных запросах.

Защита от искажения результатов и режимы измерения

Проблема с HTTP-сжатием: Многие веб-серверы используют gzip/deflate сжатие для экономии трафика. Это создаёт две разные метрики скорости:

  1. Реальная скорость канала — сколько байт фактически передаётся по сети
  2. Эффективная скорость — сколько полезных данных получено после распаковки

Режим по умолчанию: Реальная скорость канала

Без опции -g скрипт измеряет реальную пропускную способность вашего интернет-канала:

  • Что делает: Добавляет HTTP-заголовок Accept-Encoding: identity
  • Эффект: Запрещает серверу отправлять сжатые данные
  • Измеряет: Реальный объём байт, переданных по сети
  • Используйте для:
    • Тестирования скорости интернет-провайдера
    • Сравнения VPN-серверов
    • Выбора быстрого CDN или зеркала
    • Диагностики проблем с каналом

Пример:

./speed_test.sh -n 5 https://speedtest.selectel.ru/10MB
# Результат: 2.5 МБ/с — реальная скорость вашего канала

Режим с опцией -g: Эффективная скорость

С опцией -g скрипт измеряет эффективную скорость передачи данных:

  • Что делает: Разрешает серверу использовать gzip/deflate сжатие
  • Эффект: Сервер сжимает данные перед отправкой, браузер распаковывает
  • Измеряет: Объём полезных данных после распаковки
  • Может быть выше в 2-10 раз для текстовых файлов (HTML, JSON, CSS, JS)
  • Используйте для:
    • Оценки производительности веб-приложений
    • Тестирования API с JSON-ответами
    • Понимания реальной скорости работы сайтов

Пример:

./speed_test.sh -g -n 5 https://www.wikipedia.org/
# Результат: 15.0 МБ/с — эффективная скорость с учётом сжатия
# (реальный канал 2.5 МБ/с, но благодаря gzip получили данных в 6 раз больше)

Сравнение режимов

Файл compare_modes.sh демонстрирует разницу:

./compare_modes.sh https://example.com/

Типичные результаты:

  • Бинарные файлы (изображения, видео, архивы): разницы почти нет
  • Текстовые данные (HTML, JSON, XML): эффективная скорость в 3-10 раз выше
  • Speedtest-файлы (специально не сжимаются): режимы дают одинаковый результат

Вывод: Используйте режим по умолчанию для честного замера скорости интернета. Используйте -g для оценки реальной производительности веб-приложений.

Модификация скрипта

Вы можете легко изменить параметры в начале скрипта:

# Изменить количество запросов (по умолчанию 10)
NUM_REQUESTS=20

# Добавить таймаут для curl (например, 30 секунд)
curl --max-time 30 -s -o /dev/null ...

# Использовать другой метод HTTP (по умолчанию GET)
curl -X POST ...

Использование в автоматизации

Пример: Поиск лучшего сервера

В проекте включён пример скрипта compare_servers.sh, который показывает, как использовать тихий режим для сравнения скорости разных серверов:

./compare_servers.sh

Этот скрипт:

  1. Тестирует список серверов
  2. Использует speed_test.sh -q для получения скорости каждого
  3. Находит и выводит самый быстрый сервер

Вы можете адаптировать этот пример для:

  • Выбора лучшего VPN-сервера
  • Тестирования разных CDN
  • Мониторинга скорости интернета по расписанию
  • Логирования производительности сети

Лицензия

Скрипт предоставляется "как есть" для образовательных целей.

Автор: Sergei Erjemin (+Claude Haiku 4.5 через CoPilot)

Создано как решение тестового задания для вакансии "Python-разработчик" в "Интерактивное агентство 'Это Легко'".