add: версия bash
This commit is contained in:
331
bash/USAGE.md
Normal file
331
bash/USAGE.md
Normal file
@@ -0,0 +1,331 @@
|
||||
# Инструкция по использованию скрипта замера скорости интернета
|
||||
|
||||
## Описание
|
||||
|
||||
`speed_test.sh` — это bash-скрипт для измерения скорости интернет-соединения путём последовательной загрузки файла с указанного URL.
|
||||
|
||||
## Требования
|
||||
|
||||
Скрипт использует стандартные утилиты, которые обычно предустановлены в большинстве Unix-подобных систем:
|
||||
- `bash` — командная оболочка
|
||||
- `curl` — утилита для загрузки данных по URL
|
||||
- `bc` — калькулятор для вычислений с плавающей точкой
|
||||
- `awk`, `seq` — стандартные утилиты
|
||||
|
||||
### Установка зависимостей (если требуется)
|
||||
|
||||
* **Ubuntu/Debian:**
|
||||
```bash
|
||||
sudo apt-get install curl bc
|
||||
```
|
||||
* **macOS:**
|
||||
```bash
|
||||
brew install curl bc
|
||||
```
|
||||
* **CentOS/RHEL:**
|
||||
```bash
|
||||
sudo yum install curl bc
|
||||
```
|
||||
* **Fedora/RHEL:**
|
||||
```bash
|
||||
sudo dnf install curl bc
|
||||
```
|
||||
* **Windows (через WSL):**
|
||||
```bash
|
||||
sudo apt-get install curl bc
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
### Базовое использование
|
||||
|
||||
```bash
|
||||
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 (Санкт-Петербург):
|
||||
```bash
|
||||
./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-подключений.
|
||||
- Логирования результатов.
|
||||
|
||||
Пример:
|
||||
```bash
|
||||
$ ./speed_test.sh -q -n 2 https://speedtest.selectel.ru/10MB
|
||||
2.40
|
||||
```
|
||||
|
||||
### Пример вывода
|
||||
|
||||
```text
|
||||
==============================================
|
||||
Замер скорости интернета
|
||||
==============================================
|
||||
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 (Россия):**
|
||||
```bash
|
||||
# 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 или зеркала
|
||||
- Диагностики проблем с каналом
|
||||
|
||||
**Пример:**
|
||||
```bash
|
||||
./speed_test.sh -n 5 https://speedtest.selectel.ru/10MB
|
||||
# Результат: 2.5 МБ/с — реальная скорость вашего канала
|
||||
```
|
||||
|
||||
#### Режим с опцией `-g`: Эффективная скорость
|
||||
|
||||
С опцией `-g` скрипт измеряет **эффективную скорость** передачи данных:
|
||||
|
||||
- **Что делает:** Разрешает серверу использовать gzip/deflate сжатие
|
||||
- **Эффект:** Сервер сжимает данные перед отправкой, браузер распаковывает
|
||||
- **Измеряет:** Объём полезных данных после распаковки
|
||||
- **Может быть выше в 2-10 раз** для текстовых файлов (HTML, JSON, CSS, JS)
|
||||
- **Используйте для:**
|
||||
- Оценки производительности веб-приложений
|
||||
- Тестирования API с JSON-ответами
|
||||
- Понимания реальной скорости работы сайтов
|
||||
|
||||
**Пример:**
|
||||
```bash
|
||||
./speed_test.sh -g -n 5 https://www.wikipedia.org/
|
||||
# Результат: 15.0 МБ/с — эффективная скорость с учётом сжатия
|
||||
# (реальный канал 2.5 МБ/с, но благодаря gzip получили данных в 6 раз больше)
|
||||
```
|
||||
|
||||
#### Сравнение режимов
|
||||
|
||||
Файл `compare_modes.sh` демонстрирует разницу:
|
||||
```bash
|
||||
./compare_modes.sh https://example.com/
|
||||
```
|
||||
|
||||
**Типичные результаты:**
|
||||
- **Бинарные файлы** (изображения, видео, архивы): разницы почти нет
|
||||
- **Текстовые данные** (HTML, JSON, XML): эффективная скорость в 3-10 раз выше
|
||||
- **Speedtest-файлы** (специально не сжимаются): режимы дают одинаковый результат
|
||||
|
||||
**Вывод:** Используйте режим по умолчанию для честного замера скорости интернета. Используйте `-g` для оценки реальной производительности веб-приложений.
|
||||
|
||||
## Модификация скрипта
|
||||
|
||||
Вы можете легко изменить параметры в начале скрипта:
|
||||
|
||||
```bash
|
||||
# Изменить количество запросов (по умолчанию 10)
|
||||
NUM_REQUESTS=20
|
||||
|
||||
# Добавить таймаут для curl (например, 30 секунд)
|
||||
curl --max-time 30 -s -o /dev/null ...
|
||||
|
||||
# Использовать другой метод HTTP (по умолчанию GET)
|
||||
curl -X POST ...
|
||||
```
|
||||
|
||||
## Использование в автоматизации
|
||||
|
||||
### Пример: Поиск лучшего сервера
|
||||
|
||||
В проекте включён пример скрипта `compare_servers.sh`, который показывает, как использовать тихий режим для сравнения скорости разных серверов:
|
||||
|
||||
```bash
|
||||
./compare_servers.sh
|
||||
```
|
||||
|
||||
Этот скрипт:
|
||||
1. Тестирует список серверов
|
||||
2. Использует `speed_test.sh -q` для получения скорости каждого
|
||||
3. Находит и выводит самый быстрый сервер
|
||||
|
||||
Вы можете адаптировать этот пример для:
|
||||
- Выбора лучшего VPN-сервера
|
||||
- Тестирования разных CDN
|
||||
- Мониторинга скорости интернета по расписанию
|
||||
- Логирования производительности сети
|
||||
|
||||
## Лицензия
|
||||
|
||||
Скрипт предоставляется "как есть" для образовательных целей.
|
||||
|
||||
## Автор: Sergei Erjemin (+Claude Sonnet 4.5 mini через CoPilot)
|
||||
|
||||
Создано как решение тестового задания для вакансии "Python-разработчик" в "Интерактивное агентство 'Это Легко'".
|
||||
Reference in New Issue
Block a user