От основ архитектуры до анализа логов
QA Engineer
Привет! Я занимаюсь обеспечением качества программного обеспечения. Я убежден, что умение работать с системой напрямую через командную строку — это ключ к обнаружению самых сложных и нетривиальных багов. Linux предоставляет для этого невероятно мощные инструменты.
Мы совершим полное погружение в мир Linux с точки зрения тестировщика: начнем с фундаментальных теоретических концепций и закончим практическими навыками, необходимыми для эффективной ежедневной работы.
Разберемся, что такое Linux, чем он отличается от Windows, какова его архитектура и какие бывают дистрибутивы.
Освоим командную строку для навигации, работы с файлами, управления процессами и правами доступа.
Сфокусируемся на главном: научимся анализировать логи, работать с сетью и использовать утилиты, которые упростят поиск багов.
Вы получите прочный фундамент для работы с серверными приложениями и тестовыми стендами на Linux.
Сможете систематизировать знания и открыть для себя новые, более эффективные инструменты и подходы.
Вы перестанете бояться черного экрана консоли и начнете использовать его как мощный рабочий инструмент.
Вы научитесь самостоятельно подключаться к удаленным серверам, находить нужные файлы, анализировать логи, проверять статусы сервисов и собирать всю необходимую информацию для локализации и документирования дефектов.
Linux — это семейство операционных систем, основанных на ядре Linux. Это свободное программное обеспечение с открытым исходным кодом, что является его ключевой особенностью.
Любой желающий может посмотреть, изменить и распространять исходный код. Это способствует быстрому развитию и поиску уязвимостей.
Система спроектирована для одновременного выполнения множества задач и работы многих пользователей.
Linux славится своей стабильностью и является стандартом де-факто для серверного оборудования по всему миру.
От суперкомпьютеров и МКС до вашего смартфона (Android) и роутера — Linux работает везде.
Понимание этих различий — ключ к эффективной работе.
| Аспект | Linux | Windows |
|---|---|---|
| Файловая система | Единая иерархия, корень /. Нет дисков C: или D:. | Логические диски с буквами (C:, D:). |
| Установка ПО | Централизованно через пакетный менеджер (apt, yum). | Скачивание и запуск .exe/.msi файлов. |
| Настройки | Текстовые файлы в директории /etc и домашних папках. | Централизованный Реестр (Registry). |
| Права доступа | Четкое разделение. Обычный пользователь не может навредить системе. | Пользователи часто работают с правами администратора. |
| Командная строка | Основной и самый мощный инструмент для управления. | Вспомогательный инструмент (хотя PowerShell очень мощный). |
Так как ядро Linux свободно, разные компании и сообщества создают на его основе свои операционные системы — дистрибутивы. Дистрибутив — это ядро Linux + набор программ и утилит + графическая оболочка.
Выбор дистрибутива зависит от ваших задач. Для тестирования серверного ПО чаще всего используются дистрибутивы, основанные на Debian (например, Ubuntu) или Red Hat (CentOS, Fedora).
Эти дистрибутивы отлично подходят для первого знакомства и установки на домашний компьютер.
Самый популярный и дружелюбный дистрибутив. Огромное сообщество, простая установка и хорошая поддержка оборудования "из коробки".
Основан на Ubuntu. Его интерфейс Cinnamon очень похож на Windows, что облегчает переход. Считается очень стабильным и нетребовательным к ресурсам.
Более продвинутый вариант, основанный на Arch Linux, но с простым установщиком. Предоставляет доступ к самому свежему ПО.
На тестовых и продуктовых серверах вы, скорее всего, встретите один из этих дистрибутивов. Главный критерий для них — стабильность.
Один из старейших дистрибутивов. Эталон стабильности и надежности. Новые версии программ появляются в нем не так быстро, зато они проходят тщательное тестирование.
Серверная версия самого популярного дистрибутива. Сочетает стабильность с доступом к более новому ПО и коммерческой поддержкой от Canonical.
Бесплатные аналоги коммерческого Red Hat Enterprise Linux (RHEL). Стандарт для многих корпоративных сред, где важна совместимость с RHEL.
Windows Subsystem for Linux — это официальный инструмент от Microsoft, который позволяет запускать полноценную командную строку Linux прямо в Windows без виртуальных машин.
Это идеальный способ практиковаться в командах Linux, писать и отлаживать скрипты на своем рабочем Windows-компьютере, не устанавливая вторую ОС. Вы можете установить Ubuntu из Microsoft Store и сразу начать работать.
Ключевое отличие от Windows: в Linux всё является файлом. Жесткие диски, клавиатура, принтеры — для системы все это файлы, расположенные в единой древовидной структуре.
/Вся файловая система начинается с корневого каталога /. Все пути к файлам и папкам отсчитываются от него. Например: /home/grigory/documents/report.txt.
Файлы в Linux организованы по назначению. Вот самые важные каталоги, которые нужно знать:
| Каталог | Назначение |
|---|---|
/bin | Основные команды и утилиты системы. |
/etc | Файлы конфигурации всех программ и системы. |
/home | Домашние директории пользователей (/home/grigory). |
/var/log | Самая важная папка для QA! Здесь хранятся лог-файлы. |
/tmp | Временные файлы. |
/root | Домашняя директория суперпользователя (администратора). |
Runlevel (уровень выполнения) определяет, какие службы и процессы запущены в системе в данный момент. Это похоже на "Режимы загрузки" в Windows (обычный, безопасный).
| Уровень | Назначение | Когда используется? |
|---|---|---|
0 | Выключение | Команда shutdown. |
1 | Однопользовательский | Для восстановления системы, когда что-то сломалось. |
3 | Многопользовательский, консоль | Стандартный режим для серверов. |
5 | Многопользовательский, графика | Стандартный режим для настольных ПК. |
6 | Перезагрузка | Команда reboot. |
Любая запущенная программа в Linux — это процесс. У каждого процесса есть уникальный номер (PID).
Это особенные процессы, которые работают в фоновом режиме и выполняют системные задачи. Например, веб-сервер (httpd, nginx) или служба удаленного доступа (sshd). Именно их работу мы чаще всего и тестируем.
В Linux множество маленьких, но очень мощных программ (утилит). Наша цель — не выучить их все, а научиться комбинировать их для решения конкретных задач. Мы будем рассматривать каждую команду в связке "теория + практический пример".
Первый шаг — научиться перемещаться по файловой системе и управлять её структурой.
Создание, копирование, перемещение и удаление файлов — базовые операции для подготовки тестовых данных.
Читать логи и конфигурационные файлы — ежедневная задача. Для этого есть несколько удобных инструментов.
Ссылки позволяют одному файлу или директории быть доступными по разным путям. Это аналог "ярлыков" в Windows.
ln -s /путь/к/файлу /путь/к/ссылке. Это просто указатель. Если удалить оригинал, ссылка "сломается".ln /путь/к/файлу /путь/к/ссылке. Это второе имя для того же файла. Файл будет удален с диска, только когда будет удалена последняя жесткая ссылка на него.По умолчанию, команды выводят результат в консоль. Но мы можем "перенаправить" этот вывод в файл.
> и >>> (Перезаписать): ls -l > file_list.txt. Сохранит список файлов в file_list.txt, полностью **перезаписав** его содержимое.>> (Добавить): echo "Test completed" >> report.log. **Добавит** строку в конец файла report.log, не удаляя старое содержимое.Конвейер (|, "пайп") — это сердце философии Linux. Он передает вывод одной команды напрямую на ввод другой, создавая мощные цепочки обработки данных.
|команда1 | команда2 | команда3
Эти операторы позволяют объединять несколько команд в одну строку, управляя логикой их выполнения.
&&, ||, ;&& (И): команда1 && команда2. Вторая команда выполнится **только если** первая завершилась успешно.|| (ИЛИ): команда1 || команда2. Вторая команда выполнится **только если** первая завершилась с ошибкой.; (Точка с запятой): команда1 ; команда2. Вторая команда выполнится **в любом случае**, независимо от результата первой.Каждый файл и директория в Linux имеют владельца, группу и набор прав для трёх категорий пользователей.
-rwx-r--r--- (файл), d (директория), l (ссылка).Команда chmod (change mode) изменяет права доступа. Часто для теста нужно сделать скрипт исполняемым.
Числовой: r=4, w=2, x=1. Суммируем для каждой категории.
chmod 755 script.sh: 7(rwx) для владельца, 5(r-x) для группы и остальных. Стандарт для скриптов.chmod 644 config.txt: 6(rw-) для владельца, 4(r--) для остальных. Стандарт для текстовых файлов.Символьный: u, g, o, a (user, group, others, all) и +, -, =.
chmod u+x script.sh: Добавить (+) право на выполнение (x) для пользователя (u).Иногда нужно изменить владельца файла или директории. Например, чтобы веб-сервер мог читать загруженные вами файлы.
chown user file.txt: Сменить владельца файла.chown user:group file.txt: Сменить и владельца, и группу.chown -R user:group /path/to/dir: Рекурсивно сменить владельца для всей директории и ее содержимого.Для установки, обновления и удаления программ в Debian/Ubuntu используется пакетный менеджер APT. Он автоматически скачивает программы из надежных источников (репозиториев).
sudo apt update: Обновить список доступных пакетов. **Всегда выполняйте перед установкой!**sudo apt install <пакет>: Установить программу (например, htop).sudo apt upgrade: Обновить все установленные программы.sudo apt remove <пакет>: Удалить программу.apt search <название>: Поиск пакета.Нужно понять, что сейчас работает на сервере и какие ресурсы потребляет.
sudo apt install htop).Приложение зависло или работает некорректно? Его нужно остановить.
Использует PID процесса из вывода `ps`.
Для управления фоновыми службами (демонами) используется команда `systemctl`.
Требуют `sudo`.
Логи — это "черный ящик" любого приложения и системы. Без умения их анализировать QA-специалист работает вслепую. Это ваш главный источник информации для воспроизведения и документирования дефектов.
Явные сообщения об ошибках: ERROR, Exception, FATAL, panic.
Неожиданное поведение, резкое увеличение количества сообщений, таймауты.
Восстановление шагов, которые привели к сбою. Что делал пользователь перед ошибкой?
Убедиться, что действие (например, сохранение данных) действительно было выполнено и залогировано.
Вам не нужно читать гигабайты текста. Используйте правильные инструменты для быстрого поиска.
| Инструмент | Назначение |
|---|---|
grep | Основной инструмент. Ищет строки по шаблону. |
less | Удобный просмотр больших файлов с поиском. |
tail -f | Мониторинг логов в реальном времени. |
journalctl | Просмотр системных логов в дистрибутивах с `systemd`. |
zgrep, zcat | Работа с архивированными логами (.gz). |
Соединение `tail -f` и `grep` через пайп — один из самых мощных приемов для QA. Вы можете следить за логом в реальном времени, отфильтровывая только нужные вам события.
grep -i "error".grep -C 5 "Exception" покажет 5 строк до и 5 после ошибки.grep -v "DEBUG" покажет все строки, КРОМЕ отладочных.grep -c "SUCCESS" просто посчитает количество успешных операций.Для сложных поисковых задач можно объединять `grep` в цепочки или использовать регулярные выражения.
Простые утилиты для быстрой проверки сетевой доступности.
ifconfig: Показывает IP-адреса сетевых интерфейсов сервера.curl -I покажет только заголовки.Тестовые стенды почти всегда находятся на удаленных серверах. `SSH` и `SCP` — ваши главные инструменты для работы с ними.
Bash-скрипт — это просто текстовый файл с последовательностью команд. Он позволяет автоматизировать рутинные задачи.
touch my_script.sh.nano my_script.sh.#!/bin/bash (шебанг). Не обязательна, но крайне рекомендуется, чтобы система знала, каким интерпретатором выполнять скрипт.chmod +x my_script.sh../my_script.sh.Несколько команд, которые сильно облегчают жизнь.
| Утилита | Назначение |
|---|---|
df -h | Показывает свободное место на дисках в удобном формате. |
du -sh * | Показывает размер каждого файла и папки в текущей директории. |
free -h | Показывает использование оперативной памяти. |
history | Показывает историю введенных вами команд. |
mc | Midnight Commander. Двухпанельный файловый менеджер в стиле Norton Commander. Очень удобен для новичков. |
Командная строка Linux — это не страшно, а невероятно эффективно. Мы рассмотрели ключевые концепции и команды, которых достаточно для решения 90% повседневных задач QA-инженера на сервере.
Не бойтесь экспериментировать на тестовых стендах. Чем чаще вы будете использовать эти команды, тем быстрее они войдут в привычку и станут вашим надежным инструментом.