Написание скриптов для Linux на Python

Введение

Скрипт - это программный сценарий, управляющий программным обеспечением, автоматизируя различные задачи. Например для того что бы настроить веб-сервер необходимо установить и настроить собственно программу веб-сервера (Nginx, Apache), сервер баз данных (MySQL, MariaDB, PostgreSQL), поддержку языка PHP и другие программы, необходимые для обеспечения работы сервера и выполнения необходимых задач. Если необходимо настроить один - два сервера, то проблем никаких, устанавливаем, настраиваем и готово. А если такие серверов надо настроить 10, 20, 100? В ручную это сделать будет довольно проблематично. Гораздо проще будет написать один раз скрипт, который будет делать всю эту работы автоматически. Для Linux скрипты можно писать на различных языках, самый распространенный из них - Bash. В этой статье, я расскажу об альтернативном варианте, написании скриптов на языке Python.

Подготовка

В отличии от Bash, Python из коробки поставляется не во всех дистрибутивах. Поэтому, для запуска Python-скрипта требуется небольшая подготовка, а именно установка поддержки языка операционной системой. Делается это очень просто, одной командой. Проверить установлен ли Python в системе можно выполнив команду:

[root@hostname ~]# python3 -V
Проверка версии Python

Проверка версии Python

Если появится сообщение с версией, то все в порядке, Python установлен, если нет - устанавливаем. Если у вас операционная система Fedora, CentOS 8 или CentOS Srtreem введите:

[root@hostname ~]# dnf install python3

Если CentOS 7:

[root@hostname ~]# yum install python3

Для Debian, Ubuntu, Linux Mint команда будет следующей:

[root@hostname ~]# apt install python3

Теперь все готово для написания первого Python-скрипта. Можно приступать.

Выполнение команд

Язык Python известен своим простым синтаксисом, поэтому писать на нем скрипты задача не самая трудная. Скрипт Python представляет из себя файл с расширением py. Передача системе команд осуществляется с использованием модуля os. Поэтому в самом начале файла его необходимо импортировать с помощью строки import os. Для того, что бы передать в систему команду нужно задать переменную, которая будет хранить в себе передаваемую команду. Назвать ее можно как угодно, для простоты примера я назову ее cmd. После задания переменной с Linux командой необходимо ввести os.system (cmd), где cmd имя переменной. Если необходимо передать несколько команд одновременно нужно их перечислить через двоеточие, если команды необходимо выполнить одну за другой - через точку с запятой. Например "dnf install nginx ; systemctl start nginx ; systemctl enable nginx". Команды должны быть заключены в кавычки или апострофы. Этот скрипт должен выглядеть так:

import os
cmd = "dnf install nginx ; systemctl start nginx ; systemctl enable nginx"
os.system (cmd)

Данный скрипт установить веб-сервер Nginx, запустит его и добавит в автозагрузку. Все предельно просто. Теперь немного усложним задачу и добавим в скрипт условие. Скажем при запуске скрипта будет выведено сообщение с предложением ввести цифру 1 или 2. При вводе цифры 1 будет установлен запущен и добавлен в автозагрузку Nginx, если 2 - Apache. Выглядеть это будет примерно так:

import os
task = int(input("""Для установки Nginx введите цифру 1, для установки Apache - цифру 2
Введите: """))
if task == 1:
    cmd = "dnf install nginx -y; systemctl start nginx ; systemctl enable nginx"
    os.system (cmd)
elif task == 2:
    cmd = "dnf install httpd -y ; systemctl start httpd ; systemctl enable httpd"
    os.system (cmd)
else:
    print("Введена неверная цифра")

Первой строкой мы так же импортируем модуль os. Далее объявляем переменную task, сообщаем ей, что хранить она будет целое число (int) и значение переменной будет введено пользователем (input). Вместо task соответственно может быть любое наименование. Тройные кавычки обозначают, что вывод будет многострочным. По другому это можно было бы записать так: "Для установки Nginx введите цифру 1, для установки Apache - цифру 2\nВведите: ". Здесь \n переводит строку. Теперь попробуем создать и выполнить этот скрипт. Вводим:

[root@hostname ~]# nano linux.py

Где linux произвольное название скрипта, а py его расширение. И заполняем его вышеприведенным кодом.

Скрипт

Скрипт

Пробуем запустить:

[root@hostname ~]# python3 linux.py
Запуск скрипта и ввод неверного значения

Запуск скрипта и ввод неверного значения

В примере на скриншоте я запустил скрипт и ввел цифру три, как следствие получил сообщение Введена неверная цифра. Соответственно если ввести 1 или 2 будут произведены операции установки и запуска веб-серверов. Можете проверить.

Работа с файлами

А что если делать если нам для реализации задачи мало одного выполнения команд? Ведь в Linux почти всегда установленные программы надо настраивать путем редактирования конфигурационных файлов. Придется делать это в ручную после выполнения скрипта? Конечно же нет. Python достаточно хорошо умеет работать с файлами. Перед тем как приступить к работе с тем или иным файлом его нужно отрыть, для этого нужно объявить переменную и присвоить ей значение вида: file = open("/newfolder/file.conf", "w"). Эта строка откроет файл file.conf расположенный в папке /newfolder. Буква w обозначает режим, в котором файл будет открыт. Перечень режимов и значений:

w - открытие на запись, содержимое файла заменяется передаваемой информацией, если файл не существует будет создан новый.

r - открытие на чтение, будет выбрано по умолчание если не указано иное.

x - открытие на запись, если файла не существует, иначе исключение.

a - открытие на дозапись, информация добавляется в конец файла.

b - открытие в двоичном режиме.

t - открытие к текстовом режиме.

+ - открытие на чтение и запись.

Напишем для примера скрипт создающий файл и записывающий в него информацию. После открытия файла передадим данные для записи в файл, например: file.write("Информация, записанная при помощи скрипта!!!"). После записи информации осталось только закрыть файл: file.close(). Текст такого скрипта будет следующим:

import os
file = open("file.conf", "w")
file.write("Информация, записанная при помощи скрипта!!!")
file.close()
print("Информация записана в файл!")

Если запустить этот скрипт, то в текущем каталоге будет создан файл file.conf (если конечно такого еще нет) и в него будет записана строка Информация, записанная при помощи скрипта!!!.

Работа с MySQL

Так же порой часто бывает нужно совершить какие-либо манипуляции с базами данных. Например если вы пишите скрипт установки того же LEMP или LAMP, то без этого не обойтись. Для работы с базами данных необходим специальной модуль, который будет обеспечивать взаимодействие. Он не входит в состав Python и устанавливается отдельно. Самые распространенные модули для работы с базами это mysql.connector или pymysql. В примере я буду использовать pymysql. Для его установки необходимо выполнить команду в терминале:

[root@hostname ~]# pip3 install pymysql

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

import pymysql
db = pymysql.connect("localhost","root")
cursor = db.cursor()
cursor.execute("CREATE DATABASE db1;")
db.close()

Данный скрипт создаст базу данных с именем db1. В начале скрипта мы импортируем нужный нам модуль. Если нужно импортировать несколько модулей их названия указываются через запятую, например: import os, pymysql. Далее так как же как в примере с файлами объявляем переменную db (ее имя может быть любым) и выполняем подключение к серверу баз данных с логином root на сервере localhost. За место этих значений необходимо подставить свои. Если учетная запись к которой выполняется подключение имеет пароль, то он указывается так же через запятую, например: pymysql.connect("localhost","user","passwd"). Затем создаем объект cursor который будет обеспечивать связь с базой и выполняем запрос CREATE DATABASE db1; с помощью cursor.execute. После выполнения всех запросов подключение необходимо закрыть: db.close().

Заключение

Как видите написание скриптов на Python дело вовсе не сложное, но иногда это бывает очень полезно. Используя полученную в статье информацию можно установить и настроить любую программу, или набор программ, например LAMP или LEMP. Если остались какие-либо вопросы - пишите в комментариях.

Читайте также:

Оставить комментарий