1.19. Виды программ
Виды программ
Среди программ, которые в совокупности образуют систему, можно выделить:
- утилиты;
- модули;
- плагины и расширения;
- скрипты;
- службы.
Утилита
★ Утилита – небольшая программа для узкой задачи. Пример – архиватор, или программа для проверки сети. Часто ограничиваются узким набором функций, и могут даже не иметь графического интерфейса. Они используются системными администраторами и продвинутыми пользователями для обслуживания и оптимизации работы компьютера. Например, архиваторы помогают сжимать и разархивировать файлы, а сетевые утилиты позволяют диагностировать проблемы с подключением.
Многие утилиты работают через командную строку, что делает их быстрыми и эффективными, но требует определённых знаний. Утилиты редко имеют графический интерфейс, так как их основная задача - выполнять конкретные действия без лишних затрат ресурсов.
Утилиты — инструменты для технических пользователей и администраторов. Они ценятся за точность, скорость и минимальное потребление ресурсов.
| Категория | Примеры | Особенности |
|---|---|---|
| Работа с файлами | 7-Zip, WinRAR, rsync, dd | Архивация, копирование с проверкой контрольных сумм, клонирование дисков побайтово. |
| Сетевые утилиты | ping, traceroute/tracert, nslookup, curl, Wireshark | Диагностика подключения, анализ маршрутов, запрос DNS-записей, отправка HTTP-запросов, перехват трафика. |
| Системный анализ | Task Manager, Resource Monitor, htop, iostat, vmstat | Отслеживание загрузки CPU, памяти, диска, сети в реальном времени. |
| Управление дисками | diskpart, fdisk, gparted, CrystalDiskInfo | Создание/удаление разделов, проверка состояния SSD/HDD (S.M.A.R.T.), дефрагментация. |
| Безопасность | VeraCrypt, HashCheck, Process Explorer | Шифрование томов, проверка целостности файлов по хешу, детальный анализ запущенных процессов. |
Особенности утилит:
-
Минимализм интерфейса: большинство утилит работают через командную строку. Это позволяет:
- запускать их удалённо (по SSH),
- встраивать в скрипты автоматизации,
- комбинировать через конвейеры (
|) — результат одной утилиты становится входом для другой.
-
Модульность: утилиты редко зависят от больших фреймворков. Они самодостаточны — можно скопировать один
.exeили.elf-файл и запустить на другой машине. -
Стандартизация поведения: в Unix-подобных системах утилиты следуют принципу «делай одну вещь и делай её хорошо». Например,
grepищет строки по шаблону,sortсортирует,uniqубирает дубликаты — их комбинация даёт мощный инструмент обработки текста. -
Портативность: многие утилиты доступны для нескольких ОС.
curl,jq,ffmpegработают одинаково на Windows, Linux и macOS. -
Диагностическая ценность: при сбое системы администратор первым делом запускает утилиты —
ipconfig,dmesg,journalctl— чтобы «прослушать» состояние машины.
Утилиты — это «лупа и отвёртка» цифрового мира. Без них невозможно профессиональное обслуживание компьютеров и сетей.
Модуль
★ Модулем называют отдельную часть программы или системы, которую можно заменить или обновить – будь то дополнение или библиотека. Модуль - самостоятельная часть, которая может функционировать независимо или взаимодействовать с другими модулями.
Модульность позволяет разрабатывать сложные системы поэтапно, упрощая их поддержку и развитие. Например, текстовый редактор может состоять из модулей для работы с шрифтами, форматирования текста и проверки орфографии. Каждый модуль можно обновлять или заменять без изменения всей программы. Это особенно важно для больших проектов, таких как операционные системы или корпоративные приложения.
Модуль — независимая, логически завершённая часть программы, которую можно разрабатывать, тестировать, заменять и обновлять отдельно от остальной системы. Модульность — один из ключевых принципов проектирования сложного ПО.
Формы модулей
| Тип | Описание | Примеры |
|---|---|---|
| Файловый модуль | Один файл кода, экспортирующий функции/классы | math.py в Python, fs.js в Node.js |
| Библиотечный модуль | Скомпилированная библиотека (.dll, .so, .jar) | libssl.so, Newtonsoft.Json.dll |
| Плагин-модуль | Расширение, подключаемое динамически | Модули Apache (mod_rewrite), модули ядра Linux (nvidia.ko) |
| Микросервис | Отдельный процесс, общающийся по сети | Сервис авторизации, сервис оплаты — каждый как независимый модуль системы |
Примеры модулей в реальных системах
-
Веб-браузер:
- модуль рендеринга (Chromium — Blink),
- модуль JavaScript-движка (V8),
- модуль управления вкладками,
- модуль работы с куками и локальным хранилищем.
Каждый можно обновлять независимо (хотя на практике часто обновляют весь браузер целиком).
-
Операционная система:
- модуль файловой системы (ext4, NTFS),
- модуль драйвера видеокарты,
- модуль сетевого стека (TCP/IP),
- модуль безопасности (SELinux, AppArmor).
Ядро Linux загружает и выгружает модули динамически —insmod,rmmod.
-
Игровой движок (например, Unity):
- модуль физики (NVIDIA PhysX),
- модуль анимации (Mecanim),
- модуль звука (FMOD, Wwise),
- модуль редактора сцен.
Разработчик подключает только нужные модули, чтобы не тащить лишний код в финальную сборку.
Особенности модулей:
-
Чёткие границы интерфейса: модуль взаимодействует с внешним миром через строго определённый API — набор функций, событий, входных/выходных форматов. Всё остальное скрыто внутри (инкапсуляция).
-
Низкая связанность (loose coupling): замена одного модуля не требует переделки других — если интерфейс остался прежним. Например, можно заменить базу данных с SQLite на PostgreSQL, не трогая бизнес-логику.
-
Повторное использование: один и тот же модуль можно включить в несколько проектов. Например, модуль логирования (
log4j,Serilog) используется в десятках тысяч приложений. -
Изоляция сбоев: падение одного модуля (например, плагина) не обязательно приводит к падению всей программы — если система поддерживает изоляцию (как в Firefox с multi-process architecture).
-
Удобство командной разработки: разные команды могут работать над разными модулями параллельно, не мешая друг другу.
Модульность превращает гигантскую программу в конструктор — где каждая деталь имеет своё назначение, маркировку и способ крепления.
Расширение и плагин
★ Расширение / Плагин – дополнение к основной программе. Часто от сторонних разработчиков. Расширение добавляет (буквально – расширяя возможности) функции, а плагин подключается к API программы. Примеры плагинов – VST для Audacity, плагины WordPress. Примеры расширений – расширения для браузера Google Chrome. Плагины обычно интегрируются в программы через интерфейс программирования приложений (это и есть API), и становятся её частью, а расширения чаще всего встречаются в браузерах, и работают как дополнительные инструменты, которые можно включать и выключать по желанию пользователя. Оба типа дополнений позволяют адаптировать программы под свои нужды, не изменяя их исходный код.
Плагин — программный модуль, разработанный по специальному интерфейсу (API), который позволяет ему встраиваться внутрь хост-приложения и участвовать в его жизненном цикле.
Особенности плагинов:
- Требуют явной поддержки со стороны хост-программы: приложение должно предоставлять точки подключения (хуки), интерфейсы для регистрации, систему загрузки.
- Часто имеют доступ к внутренним структурам хоста: могут читать/изменять данные, перехватывать события, добавлять элементы интерфейса.
- Обычно компилируются в нативный код или байт-код, совместимый со средой хоста.
Примеры:
- VST-плагины в аудиоредакторах (Ableton Live, FL Studio):
- Генераторы звука (синтезаторы),
- Эффекты (реверберация, компрессия),
- Анализаторы спектра.
Каждый VST — отдельный .dll (Windows) или .vst3-пакет, загружаемый в среду по стандарту Steinberg.
- Плагины WordPress:
WooCommerce— добавляет интернет-магазин,Yoast SEO— оптимизирует контент под поисковики,Akismet— фильтрует спам в комментариях.
Подключаются через PHP-интерфейсы (add_action, add_filter), участвуют в обработке запросов на всех этапах.
- Плагины для IDE:
—SonarLint— проверка кода на качество,
—Database Tools— подключение к СУБД,
—Rainbow Brackets— цветовая индикация скобок.
Используют SDK среды (например, IntelliJ Platform Plugin SDK), получают доступ к AST-дереву кода, редактору, системе сборки.
Расширение — дополнение, чаще всего работающее в рамках ограничений, накладываемых хостом, но не требующее глубокого вмешательства в его ядро. Самый распространённый тип — веб-браузерные расширения.
Особенности расширений:
- Обычно пишутся на высокоуровневых языках (JavaScript, HTML, CSS),
- Упаковываются в архив с манифестом (например,
manifest.json), - Запускаются в изолированной среде (песочнице), что повышает безопасность,
- Взаимодействуют с хостом через строго ограниченные API (например,
chrome.tabs,browser.storage).
Примеры:
- Расширения для Chrome / Edge / Firefox:
uBlock Origin— блокировщик рекламы (анализирует DOM и сетевые запросы),Dark Reader— инвертирует цвета страниц,Grammarly— проверка орфографии и стиля в текстовых полях.
Каждое расширение состоит из:
-
фонового скрипта (фоновая логика),
-
контент-скрипта (взаимодействие со страницей),
-
popup-интерфейса (иконка в панели),
-
опционального options-страницы.
-
Расширения для VS Code:
Хотя технически они тоже называются «extensions», по архитектуре ближе к плагинам:Prettier— автоформатирование кода,Live Server— локальный веб-сервер для HTML-файлов,Remote - SSH— работа над проектами на удалённой машине.
Написаны на TypeScript/JavaScript, используют VS Code API, могут добавлять команды, панели, провайдеры файловых систем.
Скрипт
★ Скрипт – программа, которая выполняется построчно, это быстро написанный код, который нужен для небольшой задачи, допустим, для копирования или проверки сети. Можно на практике встретить в процессах резервного копирования. Это программа, которая пишется на языках программирования, и используется для автоматизации рутинных задач, как и утилита, но может быть ещё более узким. Вплоть до одного файла. Это менее производительно, чем скомпилированные программы, поэтому подходят для небольших задач. К примеру, скрипт, которые будет отправлять запросы, таким образом проверяя доступность сервера.
★ Скрипт — программа, написанная на интерпретируемом языке, предназначенная для автоматизации рутинных задач, быстрой проверки гипотез или связи между другими программами. Скрипты — «клей», соединяющий компоненты системы.
Особенности скриптов:
- Краткость и простота: скрипт редко превышает несколько сотен строк. Его цель — решить одну задачу «здесь и сейчас».
- Быстрый цикл разработки: редактируй → запусти → проверь → исправь — без этапа компиляции.
- Высокоуровневые операции: скрипты оперируют не байтами, а файлами, строками, HTTP-запросами, процессами.
- Зависимость от среды: для запуска нужен интерпретатор (
python,node,bash) и, возможно, пакеты (pip install requests). - Часто выполняются разово или по расписанию: cron-задачи, пакетные обработки, миграции.
Примеры скриптов по назначению:
| Категория | Пример | Описание |
|---|---|---|
| Файловые операции | backup.sh | Архивирует папку /home/user/docs, добавляет дату в имя (docs_20251227.zip), копирует в облако через rclone. |
| Сетевая диагностика | check-servers.py | Отправляет HTTP-запросы к 10 внутренним сервисам, записывает статус-коды и время ответа в CSV-файл. |
| API-взаимодействие | telegram-bot.js | Принимает команды через Telegram Bot API, возвращает курсы валют с ЦБ РФ (через их XML API). |
| Обработка данных | csv-cleaner.rb | Читает input.csv, удаляет пустые строки, приводит телефоны к формату +7 (XXX) XXX-XX-XX, сохраняет output.csv. |
| Развёртывание | deploy.ps1 | Останавливает службу, копирует новые файлы, запускает миграции БД, перезапускает службу — всё через PowerShell. |
Популярные языки для скриптов:
- Bash / PowerShell — управление ОС, запуск программ, работа с файлами и процессами.
- Python — универсальный выбор: богатая стандартная библиотека, удобный синтаксис, множество пакетов (
requests,pandas,paramiko). - JavaScript (Node.js) — работа с веб-API, обработка JSON, событийные задачи.
- Perl — классика для текстовой обработки (регулярные выражения «из коробки»).
- Ruby — часто используется в DevOps (Chef, Puppet DSL).
Скрипты могут быть «одноразовыми» — написаны для одной задачи и больше не используются. А могут стать основой для полноценного приложения: многие веб-фреймворки (Django, Express) начинались как набор скриптов для внутренних нужд.
Главное правило хорошего скрипта: он должен быть понятен через месяц — даже автору. Поэтому — комментарии, осмысленные имена, обработка ошибок (try/catch, проверка кода возврата).
Служба
★ Служба – программа, работающая в фоне без участия пользователя, к примеру служба печати или веб-сервер nginx. Они обеспечивают бесперебойную работу системы и часто являются её ключевыми компонентами. Например, служба печати управляет отправкой документов на принтер, а веб-сервер обрабатывает запросы пользователей к сайту. Службы могут запускаться автоматически при старте системы и продолжать работать даже тогда, когда пользователь неактивен. Они отличаются от утилит и скриптов своим фоновым и зачастую постоянным процессом.
Служба (в Windows) / демон (в Unix-подобных системах) — программа, которая работает в фоновом режиме, без графического интерфейса и без прямого участия пользователя. Службы обеспечивают непрерывную работу системных и прикладных функций.
Особенности служб:
- Автозапуск при старте системы: служба регистрируется в системе и запускается до входа пользователя (ранний старт) или после (пользовательские службы).
- Долгоживущесть: работает часами, днями, месяцами — пока система не будет перезагружена или служба не будет остановлена вручную.
- Изоляция от сессий пользователя: служба продолжает работать, даже если все пользователи вышли из системы.
- Собственный жизненный цикл: у службы есть методы
Start(),Stop(),Pause(),Resume()— управляются через системные утилиты (services.msc,systemctl). - Журналирование: пишет логи в системный журнал (Event Log в Windows,
journalctlв Linux).
Примеры системных служб:
| Служба | Назначение | Платформа |
|---|---|---|
sshd | Принимает входящие SSH-соединения | Linux/macOS |
winlogon | Управляет входом/выходом пользователей | Windows |
cron / systemd-timers | Запускает задачи по расписанию | Unix |
spooler | Управляет очередью печати | Windows |
dockerd | Ядро Docker — управляет контейнерами | Кроссплатформенная |
nginx / apache2 | Веб-серверы, обслуживающие HTTP-запросы | Кроссплатформенные |
Примеры прикладных служб:
- Базы данных:
postgresql,mysqld,mssql-server— слушают порт, принимают запросы, управляют транзакциями. - Мессенджеры в фоне: Telegram Desktop (служба
Telegram.exe --start-in-tray), Discord (фоновый процесс для уведомлений). - Антивирусы:
AvastSvc,Kaspersky Security Network Service— сканируют в реальном времени, обновляют базы. - Облачные синхронизаторы:
OneDrive.exe,rclone mount— фоновая синхронизация файлов.
Управление службами:
-
Windows:
— Графически:services.msc,
— Командная строка:net start Spooler,sc query wuauserv,
— PowerShell:Get-Service,Start-Service. -
Linux (systemd):
—systemctl start nginx,
—systemctl enable nginx(автозапуск),
—systemctl status docker,
—journalctl -u postgresql(логи конкретной службы).
Службы — «невидимые работники» цифровой инфраструктуры. Без них не было бы веба, почты, баз данных, обновлений и многого другого.
Исполняемый файл
★ Исполняемый файл – файл, который компьютер может запустить напрямую. Их мы разберём в отдельной главе. Это машинный код, понятный процессору компьютера, бинарные файлы.
Форматы исполняемых файлов:
| ОС | Формат | Расширение / Особенность |
|---|---|---|
| Windows | PE (Portable Executable) | .exe (приложения), .dll (библиотеки), .sys (драйверы) |
| Linux / Unix | ELF (Executable and Linkable Format) | Без расширения (обычно), или .out; разрешение +x обязательно |
| macOS | Mach-O | .app — на самом деле папка-контейнер, внутри Contents/MacOS/program |
| Java | JAR (Java ARchive) | .jar — содержит байт-код, запускается через java -jar file.jar |
| .NET | PE + CIL | .exe, .dll — содержат промежуточный код, выполняемый CLR |
Особенности исполняемых файлов:
- Заголовок и метаданные: содержат информацию для ОС: архитектура (x86, x64, ARM), точка входа (
main), требуемые библиотеки, права доступа. - Секции кода и данных:
—.text— инструкции процессора,
—.data— инициализированные глобальные переменные,
—.bss— неинициализированные переменные,
—.rodata— строки, константы (только для чтения). - Зависимости от ОС и архитектуры:
— Исполняемый файл, собранный под Windows x64, не запустится на Linux без эмуляции (Wine);
— Файл под ARM не запустится на x86-процессоре. - Подписи и проверка целостности:
— В Windows — цифровая подпись (Authenticode), проверяется в момент запуска;
— В macOS —Gatekeeperблокирует неподписанные приложения по умолчанию;
— В Linux — проверка черезsha256sum, хотя формально ОС не требует подписи.
Примеры исполняемых файлов в повседневности:
notepad.exe— стандартный текстовый редактор Windows./bin/ls— утилита просмотра файлов в Linux (ELF-файл).java— сам интерпретатор Java (исполняемый), который затем запускает.jar.chrome— браузер (в Linux — ELF, в Windows — PE). При запуске создаёт несколько процессов: браузер, рендерер, GPU-процесс.ffmpeg— консольная утилита для обработки видео. Принимает параметры (-i input.mp4 -c:v libx264 output.mp4) и работает без GUI.
Как создать исполняемый файл:
-
Компиляция:
gcc hello.c -o hello→hello(ELF)
csc Program.cs→Program.exe(PE) -
Упаковка:
—pyinstaller script.py→dist/script/script.exe(включает интерпретатор Python),
—pkg index.js→ автономный.exeиз Node.js-кода. -
Сборка из байт-кода:
javac Main.java→Main.class→jar cfe app.jar Main *.class→java -jar app.jar.
Исполняемый файл — точка перехода от абстрактного кода к реальному действию. Это тот самый «черный ящик», который пользователь дважды щёлкает — и видит результат.