Настройка окружения
- Сравните ОС Windows и Linux
- Что такой
bash? - С помощью каких bash-команд посмотреть доступные ресурсы?
- Что такое Docker-контейнер?
- Как работает Ansible?
- Что такое виртуальная машина?
- В чём разница между виртуальной машиной и Docker-контейнером?
- Что такое переменные окружения?
- Как настроить переменные окружения в Linux?
- Что такое
.bashrcи.profile? В чём разница? - Что такое systemd?
- Как посмотреть логи в Linux?
- Что такое порт? Какие диапазоны портов существуют?
- Что такое SSH и как он работает?
- Что такое chmod и как он работает?
- Как установить Java в Linux?
- Что такое PATH?
Сравните ОС Windows и Linux
Linux — семейство Unix-подобных операционных систем на базе ядра Linux. Основные особенности:
- Открытый исходный код (Open Source)
- Бесплатное распространение
- Высокая безопасность и стабильность
- Гибкая система управления правами доступа
- Мощная система администрирования через командную строку (shell)
- Поддержка множества архитектур процессоров
- Система управления пакетами (apt, yum, dnf и др.)
Windows — проприетарная операционная система от Microsoft. Основные особенности:
- Закрытый исходный код
- Платная лицензия
- Графический интерфейс по умолчанию
- Широкая поддержка коммерческого ПО
- Удобство использования для обычных пользователей
- Система управления пакетами (Chocolatey, Winget)
Для разработки Java-приложений обе ОС подходят, однако Linux предпочтительнее для деплоя, так как большинство серверов работают именно на Linux.
Что такой bash?
Bash (Bourne Again SHell) — это командная оболочка (shell) и язык командного сценария, являющийся стандартной оболочкой для большинства Linux-дистрибутивов и macOS (до версии Catalina).
Основные возможности:
- Выполнение команд операционной системы
- Написание скриптов для автоматизации задач
- Переменные окружения и пользовательские переменные
- Циклы и условные операторы
- Перенаправление ввода/вывода (
>,>>,|) - Подстановка команд (
$(command)или`command`)
С помощью каких bash-команд посмотреть доступные ресурсы?
- top - список выполняемых процессов с использованием ресурсов (аналог
htop) - free - объем ОЗУ (используется
free -hдля читаемого формата) - df - объем постоянной памяти (используется
df -hдля читаемого формата) - du - использование дискового пространства (используется
du -sh *для текущей директории) - uname -a - информация о системе и ядре
- lscpu - информация о процессоре
- lsblk - список блочных устройств (дисков)
- nproc - количество доступных процессоров
Что такое Docker-контейнер?
Docker-контейнер — это лёгковесный, самостоятельный исполняемый образ, содержащий всё необходимое для запуска программного обеспечения: код, библиотеки, зависимости и настройки.
Преимущества Docker-контейнеров:
- Изоляция — каждый контейнер работает в изолированном окружении
- Портативность — контейнер работает одинаково на любой машине
- Лёгковесность — контейнеры используют общее ядро хост-системы, что делает их значительно легче виртуальных машин
- Быстрый запуск — контейнеры запускаются за секунды
- Масштабируемость — легко масштабировать количество экземпляров контейнеров
- Версионирование образов — можно версионировать и управлять образами
Основные понятия:
- Image (образ) — шаблон для создания контейнеров
- Container (контейнер) — запущенный экземпляр образа
- Dockerfile — файл с инструкциями для сборки образа
- Docker Hub — реестр Docker-образов
Как работает Ansible?
Ansible — это инструмент для управления конфигурациями и оркестрации, работающий по модели agentless (не требует установки агентов на управляемые узлы).
Принцип работы:
- Ansible подключается к управляемым узлам по SSH
- Отправляет Python-скрипты (модули) на узлы
- Выполняет их и получает результат
- После выполнения скрипты удаляются
Основные компоненты:
- Inventory — файл со списком управляемых узлов
- Modules (модули) — небольшие программы, выполняемые на узлах
- Playbooks — YAML-файлы с описаниями желаемого состояния инфраструктуры
- Tasks (задачи) — отдельные действия в плейбуке
Преимущества Ansible:
- Не требует установки агентов
- Простота обучения (YAML-синтаксис)
- Огромная библиотека готовых модулей
- Идиомпотентность — результат выполнения не зависит от количества запусков
Что такое виртуальная машина?
Виртуальная машина (VM) — это эмулированный компьютер, который работает на основе аппаратных ресурсов физического компьютера и ведёт себя как самостоятельная система.
Основные компоненты:
- Hypervisor (VMM) — программное обеспечение для создания и управления виртуальными машинами
- Type 1 (bare-metal) — работает напрямую на железе (VMware ESXi, Hyper-V, KVM)
- Type 2 (hosted) — работает поверх ОС (VirtualBox, VMware Workstation)
- Гостевая ОС — операционная система, установленная в виртуальную машину
- Виртуальные ресурсы — CPU, RAM, диск, сеть
Преимущества:
- Полная изоляция сред
- Возможность запуска разных ОС на одном физическом сервере
- Миграция и клонирование
Недостатки:
- Большие затраты ресурсов (каждая VM имеет свою ОС)
- Медленный запуск (минуты)
- Большой размер образов (гигабайты)
В чём разница между виртуальной машиной и Docker-контейнером?
| Характеристика | Виртуальная машина | Docker-контейнер |
|---|---|---|
| Размер | Гигабайты (полная ОС) | Мегабайты (только зависимости) |
| Запуск | Минуты | Секунды |
| Ресурсы | Тяжёлые (своя ОС) | Лёгкие (общее ядро) |
| Изоляция | Полная (аппаратная) | Процессная (namespaces, cgroups) |
| Производительность | Небольшой оверхед | Практически нативная |
| Количество на сервере | Единицы | Сотни |
| ОС | Каждая VM — своя ОС | Все контейнеры — одна ОС |
Что такое переменные окружения?
Переменные окружения (environment variables) — это именованные значения, которые влияют на поведение процессов и программ в операционной системе.
Типичные примеры:
PATH— пути поиска исполняемых файловJAVA_HOME— путь к установке JDKHOME— домашняя директория пользователяLANG— языковые настройкиUSER— имя текущего пользователяPWD— текущая рабочая директория
Использование в bash:
# Установка переменной
export MY_VAR="value"
# Чтение переменной
echo $MY_VAR
# Проверка существования
echo ${MY_VAR:-default}
Как настроить переменные окружения в Linux?
Способы настройки:
- Временная настройка (действует до закрытия сессии):
export JAVA_HOME=/usr/lib/jvm/java-11 - Для текущего пользователя (файл
~/.bashrcили~/.bash_profile):echo 'export JAVA_HOME=/usr/lib/jvm/java-11' >> ~/.bashrc source ~/.bashrc - Для всех пользователей (файл
/etc/environmentили/etc/profile.d/custom.sh):echo 'JAVA_HOME=/usr/lib/jvm/java-11' | sudo tee /etc/environment - Через systemd-сервис (файл
/etc/systemd/system/myapp.service):[Service] Environment=JAVA_HOME=/usr/lib/jvm/java-11
Что такое .bashrc и .profile? В чём разница?
.bashrc — конфигурационный файл bash для интерактивных non-login оболочек.
- Загружается при открытии нового терминала
- Содержит алиасы, настройки командной строки, функции
- Действует только для текущего пользователя
.profile (или ~/.bash_profile) — конфигурационный файл для login оболочек.
- Загружается при входе в систему (SSH, консоль)
- Содержит переменные окружения, PATH
- Действует только для текущего пользователя
Разница:
.bashrc— для интерактивных сессий в терминале.profile— для входа в систему
Рекомендуемая практика: в .profile загружать переменные окружения, а в .bashrc — алиасы и настройки. В .profile добавлять source ~/.bashrc для загрузки обоих файлов.
Что такое systemd?
systemd — это системный и сервис-менеджер для Linux, который запускается с самым первым PID (1) и управляет всеми остальными процессами.
Основные возможности:
- Управление службами (сервисами)
- Монтирование файловых систем
- Управление журналами (journalctl)
- Сетевая конфигурация
- Управление точками монтирования
Основные команды:
# Управление службами
sudo systemctl start nginx # запустить службу
sudo systemctl stop nginx # остановить службу
sudo systemctl restart nginx # перезапустить службу
sudo systemctl enable nginx # включить автозапуск
sudo systemctl status nginx # статус службы
# Просмотр логов
sudo journalctl -u nginx # логи службы
sudo journalctl -f # отслеживание логов в реальном времени
Файлы служб находятся в /etc/systemd/system/ или /lib/systemd/system/.
Как посмотреть логи в Linux?
Основные способы:
- journalctl (для systemd-систем):
sudo journalctl -u nginx # логи службы nginx sudo journalctl -f # отслеживание в реальном времени sudo journalctl --since today # логи за сегодня sudo journalctl -p err # только ошибки - Файлы в /var/log/
cat /var/log/syslog # системный журнал (Debian/Ubuntu) cat /var/log/messages # системный журнал (RHEL/CentOS) cat /var/log/auth.log # логи аутентификации tail -f /var/log/syslog # отслеживание в реальном времени - dmesg — сообщения ядра:
dmesg | tail # последние сообщения ядра dmesg -H # человекочитаемый формат - lsof — открытые файлы:
sudo lsof /var/log/syslog # кто использует файл лога
Что такое порт? Какие диапазоны портов существуют?
Порт — это числовой идентификатор, используемый для определения конкретного процесса или службы на хосте. Работает на транспортном уровне модели OSI.
Диапазоны портов:
- 0-1023 (Well-known ports) — системные порты, зарезервированы для стандартных служб (HTTP: 80, HTTPS: 443, SSH: 22, MySQL: 3306)
- 1024-49151 (Registered ports) — зарегистрированные порты для приложений (PostgreSQL: 5432, MongoDB: 27017, Redis: 6379)
- 49152-65535 (Dynamic/Ephemeral ports) — динамические порты для клиентских соединений
Просмотр портов:
sudo netstat -tlnp # прослушиваемые порты (старый)
sudo ss -tlnp # прослушиваемые порты (новый)
lsof -i :80 # процессы на порту 80
Что такое SSH и как он работает?
SSH (Secure Shell) — криптографический сетевой протокол для безопасного удалённого администрирования и передачи файлов.
Принцип работы:
- Клиент подключается к серверу (по умолчанию порт 22)
- Сервер отправляет свой публичный ключ
- Клиент проверяет отпечаток ключа (first-time connection)
- Устанавливается защищённое соединение с использованием симметричного шифрования
Методы аутентификации:
- По паролю — ввод логина и пароля
- По ключам — использование пары публичный/приватный ключ (более безопасно)
Основные команды:
ssh user@host # подключение к серверу
ssh -p 2222 user@host # подключение на нестандартный порт
ssh-keygen -t rsa -b 4096 # генерация SSH-ключа
scp file user@host:/path # копирование файлов
rsync -avz local/ user@host:/remote/ # синхронизация
Что такое chmod и как он работает?
chmod (change mode) — команда для изменения прав доступа к файлам и директориям в Linux.
Типы прав:
r(read) — чтениеw(write) — записьx(execute) — выполнение
Способы изменения прав:
- Символьный способ:
chmod u+x script.sh # добавить право выполнения для владельца chmod go-w file.txt # убрать право записи для группы и остальных chmod a+r file.txt # добавить чтение для всехГде:
u— владелец,g— группа,o— остальные,a— все - Числовой способ:
chmod 755 script.sh # владелец: rwx, группа: r-x, остальные: r-x chmod 644 file.txt # владелец: rw-, группа: r--, остальные: r-- chmod 600 .ssh/id_rsa # только владелец: rw-
Цифры: r=4, w=2, x=1. Сумма даёт нужный режим (7=rwx, 6=rw-, 5=r-x, 4=r–, 0=—).
Как установить Java в Linux?
Способы установки Java:
- Через пакетный менеджер (Ubuntu/Debian):
sudo apt update sudo apt install openjdk-17-jdk sudo apt install openjdk-17-jre - Через пакетный менеджер (RHEL/CentOS/Fedora):
sudo yum install java-17-openjdk-devel # или sudo dnf install java-17-openjdk-devel - Ручная установка:
# Скачивание JDK с сайта Oracle или Adoptium wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.8_7.tar.gz sudo tar -xzf jdk-*.tar.gz -C /opt/ export JAVA_HOME=/opt/jdk-17 export PATH=$JAVA_HOME/bin:$PATH - Через
update-alternatives(управление версиями):sudo update-alternatives --config java
Проверка установки:
java -version
javac -version
echo $JAVA_HOME
Что такое PATH?
PATH — это переменная окружения, которая содержит список директорий, в которых операционная система ищет исполняемые файлы при вводе команд в терминале.
Просмотр и использование:
echo $PATH # показать текущий PATH
which java # показать путь к исполняемому файлу
type -a java # показать все найденные версии
Пример содержимого PATH:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Добавление своего пути:
export PATH=$PATH:/opt/myapp/bin
# или для постоянной настройки:
echo 'export PATH=$PATH:/opt/myapp/bin' >> ~/.bashrc
При поиске исполняемого файла система перебирает директории из PATH слева направо и использует первую найденную.