Перейти к содержанию

Лаборатория сопровождения и командная строка

Оглавление серии

Веб-приложение не заканчивается исходными файлами. После запуска появляются процессы, журналы, открытые порты, временные файлы и задания по расписанию. Когда пользователь сообщает, что форма больше не работает, разработчику приходится связать эти части. В этой серии создадим отдельную лабораторию DeskQueue Ops и научимся получать сведения о состоянии системы, прежде чем менять её настройки.

Приложение DeskQueue развивается в курсе Node.js и PostgreSQL. Для первых глав оно не требуется: работаем с файлами и подготовленным учебным журналом. Позже будем рассматривать службу deskqueue.service и адрес 127.0.0.1:3000. Их отсутствие в вашей лаборатории является отдельным состоянием, а не доказательством поломки сервера. Полное приложение и его зависимости подключаются только по инструкции серверного курса.

Границы рабочего места

Для повторения используйте отдельную виртуальную машину с Ubuntu Server 24.04 LTS и Bash 5.x. Это выбранный профиль примеров, поэтому названия пакетов и поведение системных служб будем обсуждать применительно к нему. Терминал macOS с оболочкой zsh не заменяет такую машину: похожие названия команд не означают одинаковые возможности и настройки. Контейнер тоже может отличаться от машины отсутствием обычного системного менеджера служб.

Распакуйте архив лаборатории в каталог deskqueue-ops своего пользователя. Внутри находится ops-lab: учебные данные в fixtures, конфигурации в config, сценарии в scripts, место для диагностических файлов в evidence и для копий в backups. Каталог stages объясняет, какие файлы появляются на каждом шаге. Ничего из архива не устанавливается автоматически в системные каталоги.

Откройте терминал внутри своей Linux-машины и перейдите в распакованный каталог. Сначала прочитайте путь, затем список файлов. Команды ниже являются действиями читателя; при подготовке материала они не выполнялись.

cd ~/deskqueue-ops/ops-lab
pwd
ls -la
printf '%s\n' "$BASH_VERSION"

Ожидаем увидеть выбранный путь, основные папки лаборатории и номер Bash. Конкретное имя пользователя и полный номер версии отличаются между машинами. Если переход завершился ошибкой, следующие команды всё равно могут выполниться в старом каталоге. Поэтому не продолжайте автоматически: сначала убедитесь, что pwd показывает нужное место. Этот небольшой шаг предотвращает работу с чужими файлами.

Оболочка и запускаемая программа

Терминал показывает ввод и вывод. Оболочка разбирает строку и решает, что запустить. Программа выполняет свою задачу и возвращает результат. Например, cd меняет рабочий каталог самой оболочки, а ls читает содержимое указанной папки. Такое различие объясняет, почему отдельная программа не может обычным завершением изменить каталог уже работающего родительского терминала.

Проверьте происхождение нескольких команд. Здесь нам нужен не красивый список установленных инструментов, а понимание того, какое действие будет выбрано по конкретному имени.

type cd
type ls
command -v bash
command -v node
printf '%s\n' "$PATH"

type может сообщить о встроенной команде, функции, псевдониме или исполняемом файле. command -v помогает узнать, доступно ли имя в текущем окружении. Для node пустой результат допустим: эта серия не устанавливает серверный проект. Запишите именно отсутствие инструмента, вместо того чтобы подставлять путь из чужого примера. В последующих главах абсолютный путь к программе станет частью конфигурации службы.

PATH содержит каталоги поиска команд. Порядок имеет значение: одинаковое имя может существовать в нескольких местах. Если в интерактивном терминале программа найдена, это ещё не гарантирует её доступность для задания по расписанию. Там набор каталогов может быть другим. По этой причине мы будем различать удобство ручного ввода и воспроизводимое описание автоматической операции.

Справка отвечает на конкретный вопрос

Откройте man ls. В профиле Ubuntu справочная страница описывает установленный инструмент; публичная версия страницы ls удобна для чтения в браузере. Найдите объяснение -a, затем -l. Не требуется запоминать все параметры: важно научиться находить тот, который влияет на результат нашей задачи.

Страница справки обычно открывается в просмотрщике. Для выхода используйте q, для поиска — /, после чего введите слово. Если man не установлен в минимальном образе, это тоже свойство окружения. На первом шаге достаточно браузерной справки; расширение набора программ следует планировать отдельно. Нельзя считать ошибку «команда не найдена» неправильным синтаксисом её параметров.

Раздел справки уточняет предмет описания. Запись printf(1) обычно относится к программе, а printf(3) — к библиотечной функции. Bash дополнительно имеет собственную встроенную команду printf. Увидев пример из другого раздела, сначала сравните контекст. Иначе можно пытаться применить интерфейс языка C к командной строке и долго искать несуществующий параметр.

Первый файл наблюдения

В evidence/environment.md уже есть шаблон: система, оболочка, рабочий каталог, доступные инструменты и дата наблюдения. Заполните его своими значениями. Для номера системы можно прочитать /etc/os-release, а для имени ядра — использовать uname -sr. Это разные сведения: версия дистрибутива и версия ядра не обязаны иметь одинаковое число.

Каждую строку сопровождайте указанием, откуда она получена. Например, «Bash 5.2, значение BASH_VERSION в интерактивной оболочке» полезнее просто «Linux установлен». Коллега сможет понять, что именно вы наблюдали и в каком контексте. Если программа отсутствует, напишите это прямо; незаполненное поле неоднозначно и позже может быть принято за забытый шаг.

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

Почему начинаем с наблюдения

Представим сообщение «команда сбора журнала не запускается». До изменения прав полезно установить три факта: мы на нужной машине, находимся в нужном каталоге и запускаем нужную программу. Возможно, файл вообще остался на рабочем компьютере, а терминал открыт внутри контейнера. Исправление разрешений в таком случае только добавит вторую проблему и не устранит первую.

Другой пример — одинаковые команды в двух терминалах дают разный результат. Сравните оболочку, текущий каталог и происхождение программы. Уже этих сведений часто достаточно, чтобы увидеть различие. Затем можно исследовать конкретные параметры. Последовательное сужение вопроса полезнее случайного перебора команд из найденных инструкций, потому что каждый шаг изменяет наше понимание причины.

Результат первого урока — распакованная лаборатория и короткое описание собственного окружения. Мы ещё не запускаем веб-службу, не меняем системные настройки и не называем учебные данные настоящим журналом. На следующем шаге разберём сами файлы: их имена, типы, метаданные и ссылки. Именно из этих объектов затем составится окружение приложения.