ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Linux для сетевых инженеров. Как написать сценарий Bash

Linux для сетевых инженеров. Как написать сценарий Bash

В наших блогах по Linux мы в основном говорим об отдельных командах и о том, как их использовать. Одной из самых мощных возможностей Linux является возможность автоматизации задач с помощью написания программ или сценариев.

Один из самых простых (и легко доступных) способов начать работу с кодированием в Linux – использовать Bash-скрипт. Bash – это язык оболочки, который интерпретирует команды между интерфейсом командной строки и операционной системой. Если вы используете один из самых популярных дистрибутивов Linux (Ubuntu, Debian, Fedora), то, скорее всего, вы раньше использовали Bash. Вы также можете найти его на MacOs и на Windows 10.

Также лучшие советы по настройке Linux/UNIX можно почитать в интернете, информации достаточно.

Мы не собираемся перечислять все циклические или условные операторы, доступные в Bash; Вы можете найти их в Интернете. Вместо этого мы дадим вам краткий шаблон скрипта, который делает что-то, имеющее отношение к сетевой инженерии: скрипт, который периодически запускает тест скорости (скорость загрузки и выгрузки) и сохраняет результаты в файле журнала.

Постановка задачи

Допустим, вы хотите измерять пропускную способность загрузки и выгрузки сети один раз в час и сохранять результаты в файле журнала для анализа. Вы можете получить эти измерения на любом устройстве, зайдя на speedtest.net и выполнив тест. Очевидно, невозможно, чтобы кто-то делал это раз в час и регистрировал результаты для вас.

Для решения этой проблемы нам понадобятся три вещи:

  1. Запустите этот тест пропускной способности в командной строке
  2. Автоматизируйте это через скрипт
  3. Записать результаты в файл

 

Команда Speedtest

Есть несколько способов измерить скорость загрузки и выгрузки. Один из самых простых и простых способов – использовать команду «speedtest-cli», которая является версией командной строки службы Ookla speedtest.net для командной строки. Для установки команды введите:

apt-get install speedtest-cli

Вывод:

~# apt-get install speedtest-cli
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
speedtest-cli
0 upgraded, 1 newly installed, 0 to remove and 146 not upgraded.
Need to get 13.1 kB of archives.
After this operation, 64.5 kB of additional disk space will be used.
Get:1 http://mirror.yandex.ru/ubuntu xenial/universe amd64 speedtest-cli all 0.3.4-1 [13.1 kB]
Fetched 13.1 kB in 0s (301 kB/s)
Selecting previously unselected package speedtest-cli.
(Reading database ... 78919 files and directories currently installed.)
Preparing to unpack .../speedtest-cli_0.3.4-1_all.deb ...
Unpacking speedtest-cli (0.3.4-1) ...
Setting up speedtest-cli (0.3.4-1) ...

 

Вот как выглядит результат команды speedtest:

speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from JSC Server (213.159.210.167)...
Selecting best server based on latency...
Hosted by MGTS (Moscow) [1.61 km]: 2.856 ms
Testing download speed........................................
Download: 91.34 Mbit/s
Testing upload speed..................................................
Upload: 232.51 Mbit/s

 

Он обнаружил интернет-провайдера (JSC Server) и публичный IP (213.159.xxx.xxx). Затем он обнаружил сервер рядом с MGTS с задержкой 2,856 мс и 1,61 км. А затем он измерил скорость загрузки и выгрузки.

 

Псевдокод

Прежде чем писать какой-либо код, давайте подумаем о логике нашего скрипта. Мы полагаем, что легко понять следующий псевдокод, который соответствует формулировке проблемы выше:

  1. Бесконечный цикл
  2. Запустить speedtest
  3. Результаты журнала в файле
  4. Ждать 1 час
  5. Конец цикла

Скрипт на Bash

Фактический скрипт выглядит так:

#!/bin/bash

while true ;
do
    echo "Speedtest запущен..."
    speedtest-cli --simple >> /home/pi/speedtest.log
    echo "Speedtest остановлен..."
    sleep 3600
done

Давайте разберемся с ним:

Строка 1: это называется шебанг и сообщает операционной системе, какая оболочка используется для команд в сценарии. В данном случае это Bash.

Строка 3: «while» – это конструкция, которая может образовывать циклы. Выполняется ли цикл или нет, зависит от условия после «while». В этом случае мы жестко закодировали это условие в «true», поэтому цикл будет выполняться вечно. В качестве примера другого условия while “while [ “$SECONDS” -lt 3 ];” создает цикл, который запускается до 3 секунд с момента запуска скрипта (в Bash «$ SECONDS» дает истекшие секунды с момента запуска скрипт).

Строка 4: с помощью ключевого слова do мы указываем начало кода, который будет включен в цикл while. Вместе со словом «done» в строке 9 они указывают начало и конец команд, включенных в цикл.

Строка 5: Этот оператор выводит на экран сообщение «Speedtest запущен…». Это сообщение и сообщение «echo “Speedtest остановлен…”» в строке 7 помогают нам узнать, когда Speedtest начинается и заканчивается.

Строка 6: выполняет команду speedtest. Опция «–simple» не показывает подробный вывод, показывать только основную информацию. Таким образом, мы можем скопировать и вставить результаты в электронную таблицу для дальнейшей обработки или построения графиков. Поскольку мы хотим сохранить результаты в файле, мы используем команду добавления «>>», чтобы сохранить результаты в файле «/home/pi/speedtest.log».

Строка 7: она сообщает нам, что speedtest завершен

Строка 8: он спит в течение 3600 секунд, другими словами, он ждет час перед повторным выполнением цикла

Строка 9: определяет конец цикла команд

 

Запуск сценария

Мы сохранили скрипт в файле speedtest.sh (расширение «.sh» часто используется для файлов скриптов Bash).

Для запуска скрипта у вас есть два варианта:

  1. Введите «bash speedtest.sh»
  2. Сделайте скрипт исполняемым файлом и затем запустите его с помощью следующих команд
    1. chmod + x speetest.sh &
    2. ./speedtest.sh &

 

Чтобы скрипт продолжал работать после выхода из системы, необходимо запустить его в фоновом режиме с амперсандом «&» в конце. Если вы не используете амперсанд, сценарий остановится, как только вы выйдете из сеанса командной строки.

 

Результаты

Вот как выглядят сохраненные результаты в файле «/home/pi/speedtest.log»:

Ping: 2.369 ms
Download: 83.55 Mbit/s
Upload: 222.80 Mbit/s
Ping: 2.154 ms
Download: 84.23 Mbit/s
Upload: 223.34 Mbit/s

Давайте объясним каждую строку:

Поле 1 (2.154): задержка

Поле 2 (83.55 Mbit/s): скорость загрузки в мегабит/с

Поле 3 (222.80 Mbit/s): скорость выгрузки в мегабит/с

 

Мы надеемся, что вы найдете этот скрипт полезным и достаточно простым, чтобы попробовать его на своем одном Linux-компьютере. Если у вас есть Raspberry Pi, вы можете заставить его работать, делая что-то полезное. И когда ваш провайдер не предоставляет пропускную способность, за которую вы платите, у вас будут свои инструменты.

Exit mobile version