Когда мы говорили про автоматизацию в компьютере, то основная идея была такая: мы один раз учим компьютер делать что-то важное для нас, а дальше компьютер делает это сам в нужный момент.
Сегодня поговорим про первую часть — как с помощью встроенных скриптов научить компьютер делать то, что нам нужно.
Принципиальное решение
Мы попробуем заставить компьютер выполнять полезную работу без непосредственного участия пользователя: чтобы не нужно было двигать мышкой и нажимать на экранные кнопки.
Сделать это можно двумя принципиальными способами:
- Использовать программу, которая будет за нас двигать мышкой и нажимать клавиши — такие программы есть, но они не слишком стабильные
- Использовать служебные программы и скриптование — мы пойдём по этому пути
Что за служебные программы?
Мы привыкли, что программа в компьютере — это что-то, у чего есть окно, кнопки, пункты меню и т. д. И это имеет смысл, например, в графических или текстовых редакторах, когда экран необходим.
Но многие программы могут работать без графического интерфейса. Например, если вам нужно скопировать файл из одного места в другое, вам не обязательно смотреть в экран с папочками. Можно написать «откуда» и «куда», и программа должна всё выполнить. Или если мы написали программу на Python, которая обрабатывает большие данные, ей не обязательно выводить данные на экран. Из файла взяла — обработала — в файл положила.
Программы, которые могут работать без графического интерфейса, мы будем называть служебными. В чём их свойства:
- Они запускаются из командной строки или из терминала.
- У них может не быть графического интерфейса.
- Чтобы объяснить им, что от программ нужно, используют параметры.
- Параметры пишутся текстом при запуске программы.
- Программа однажды получает параметры, исполняется и выходит. То есть можно один раз сказать, что программе делать, нажать энтер и уйти пить кофе — дальше программа справится сама.
Недавно мы разбирали программу rsync, которая позволяет сделать бэкап важных данных, скопировав их на флешку или другой диск. С помощью параметров можно настроить миллион нюансов работы: что копировать, куда, на какой скорости, что делать с конфликтующими файлами, как сравнивать файлы и т. д. И всё это можно сделать в командной строке, без графического интерфейса.
Другой пример — программа chkdsk для Windows, которая может проверять флешки и жёсткие диски и исправлять ошибки на них. Эту программу можно запустить из консоли, указав параметры — что проверить и как:
chkdsk d: /f
Когда нужны служебные программы
На вашем компьютере большая часть служебных программ отвечает за обслуживание самого компьютера — ремонт файлов, запуск скрытых служб и подобные вещи. Всё потому, что персональные компьютеры заточены на взаимодействие с пользователем и решение визуальных и бытовых дел. На домашних компьютерах чаще открыт Word, чем сервер баз данных.
А вот на серверах ситуация обратная: там не используют пользовательские приложения, но зато там всё напичкано служебными программами — веб-серверами, серверами баз данных, сетевыми службами, средствами защиты и балансировки нагрузки, менеджерами памяти и виртуализации. У них нет графического интерфейса, они все запускаются из командной строки.
Поэтому серверами можно спокойно управлять из командной строки, подключившись к терминалу: чтобы запустить на Linux-сервере базу данных, тебе достаточно сказать команду sudo /etc/init.d/mysqld start
— и где-то в глубинах сервера зашуршат нужные файлы. Не нужно заходить в меню «Программы», искать там приложение MySQL, запускать его и что-то с ним делать. Одна текстовая команда делает то, что на домашнем компьютере мы бы делали двадцатью кликами мышки.
Когда-то давно мы рассказывали про приложение MAMP — это пакет для разработки сайтов на собственном компьютере. Так вот, MAMP — это лишь простая графическая обёртка для нескольких служебных программ: веб-серверов и баз данных. Когда вы нажимаете кнопку «Запустить сервер», где-то на фоне запускаются служебные программы серверов и баз данных: вы их не видите, но они висят в памяти и делают свою полезную работу. А MAMP просто даёт вам кнопку «Вкл».
Автоматизируем служебные программы через скрипт
Итак, что мы знаем:
- У компьютера есть большой набор служебных программ.
- Их можно вызвать одной строкой, и они сделают нам свою полезную работу по нажатии клавиши Enter.
- Возить мышкой и вступать с компьютером в диалог при этом не нужно.
- Одна команда в командной строке запустит одну программу, которая сделает своё дело и закроется, снова вернув нас в командную строку.
Логичный следующий шаг — автоматизировать исполнение этих команд и программ с помощью скрипта.
Скрипт — это набор команд для компьютера, которые записали и сохранили в один файл. Можно представить, что это сценарий фильма или пьеса, по которой актёры играют на сцене. Чтобы компьютер понял, что перед ним именно скрипт, используют специальные расширения. В Windows это будут расширения .bat или .ps1.
Например, нам нужно раз в неделю копировать три разные папки в одну с текущей датой. Можно написать такой скрипт и сохранить его как backup.bat
:
set sFolderName=%date% (%time:~0,-3%)
md "%sFolderName::=-%"
md f:\"%sFolderName::=-%"\Documents
md f:\"%sFolderName::=-%"\Music
md f:\"%sFolderName::=-%"\Images
copy C:\Users\Mike\Documents F:\"%sFolderName::=-%"\Documents
copy C:\Users\Mike\Work F:\"%sFolderName::=-%"\Work
copy C:\Users\Mike\Projects F:\"%sFolderName::=-%"\Projects
Тут используются программы Windows: md
— «создание каталога» и copy
— «копирование файла». Также используется команда set
, которая задаёт переменную для выполнения скрипта. В переменной лежит текущая дата и время.
Теперь достаточно дважды щёлкнуть в проводнике по файлу скрипта или запустить скрипт из командной строки. Компьютер поймёт, что ему нужно исполнить инструкции из скрипта, и всё сделает.
В MacOS и Linux скрипты работают точно так же, только возможностей у скриптов в этих системах намного больше. Дело в том, что Windows изначально была заточена под окна и работу с мышкой, чтобы пользователю не пришлось разбираться со скриптами. А в Linux всё наоборот — там проще всё сделать парой скриптов, чем ставить много программ и долго всё настраивать мышкой.
В следующей статье напишем настоящие скрипты для автоматизации и разберёмся, как они работают. Подпишитесь, чтобы не пропустить.