Linux — основы и командная строка
Linux — операционная система, на которой работают почти все серверы в мире. DevOps-инженер, администратор и разработчик ежедневно работают с ней через командную строку. Освоив её, ты поймёшь Docker, Kubernetes и Ansible.
1. Что такое Linux
Linux — это ядро, вокруг которого собираются операционные системы. Такая система называется дистрибутивом.
| Дистрибутив | Где используется |
|---|---|
| Ubuntu / Debian | серверы, десктоп, обучение |
| CentOS / Rocky | серверы, корпоративная среда |
| Fedora | современный десктоп и новинки ядра |
| Alpine | крошечные контейнеры |
docker run -it ubuntu bash.2. Оболочка (shell)
Команды вводятся в оболочку bash. Основные клавиши:
Tab— автодополнение команды и пути;↑ / ↓— история команд;Ctrl+C— остановить текущий процесс;Ctrl+L— очистить экран.
Помощь по команде:
man ls # документация
ls --help # краткая справка
which python3 # где лежит исполняемый файл3. Навигация по файловой системе
pwd # текущий каталог
ls # список файлов
ls -la # подробно, включая скрытые
cd /etc # перейти в каталог
cd .. # на уровень выше
cd ~ # в домашний каталог
find . -name "*.log" # поиск файловКлючевые каталоги
| Каталог | Содержимое |
|---|---|
| / | корень файловой системы |
| /etc | конфигурационные файлы |
| /var/log | логи системы и приложений |
| /home | домашние каталоги пользователей |
| /tmp | временные файлы |
| /opt | дополнительное ПО |
4. Работа с файлами
touch file.txt # создать пустой файл
mkdir -p a/b/c # создать каталоги
cp file.txt backup.txt # копировать
mv old.txt new.txt # переместить / переименовать
rm file.txt # удалить
rm -rf dir/ # удалить каталог с содержимым (осторожно!)
cat file.txt # вывести файл
less file.txt # просмотр больших файлов
head -n 20 file.txt # первые строки
tail -f /var/log/app.log # следить за логом в реальном времениrm -rf не спрашивает и не имеет «корзины». Проверяй путь прежде, чем жать Enter: rm -rf / сотрёт систему.5. Права доступа
У каждого файла есть владелец, группа и права для трёх категорий: user / group / others.
ls -l script.sh
# -rwxr-xr-- означает: владелец читает/пишет/исполняет,
# группа - читает/исполняет, остальные - только читают
chmod +x script.sh # сделать исполняемым
chmod 644 file.txt # rw-r--r--
chmod 755 script.sh # rwxr-xr-x
chown user:group file # сменить владельца| Цифра | Права |
|---|---|
| 4 | чтение (r) |
| 2 | запись (w) |
| 1 | исполнение (x) |
| 6 = 4+2, 7 = 4+2+1 | комбинации |
6. Пользователи и группы
whoami # кто я
sudo whoami # выполнить с правами root
su - user # переключиться на пользователя
sudo useradd -m dev # создать пользователя
sudo passwd dev # задать пароль
sudo usermod -aG docker dev # добавить в группу docker7. Процессы
ps aux | head -20 # список процессов
top # мониторинг в реальном времени
htop # удобный top (установи отдельно)
kill PID # завершить процесс
kill -9 PID # принудительно
pgrep -f nginx # найти PID по имени
nohup python app.py & # запуск в фоне
jobs; fg; bg # фоновые задачи8. Сеть
ip addr # сетевые интерфейсы и адреса
ping -c 4 google.com # проверка доступности
curl -I example.com # заголовки HTTP
curl -o file.zip URL # скачать файл
ssh user@server # подключение по SSH
ss -tlnp # открытые порты
traceroute google.com # маршрут до хостаcurl — твой главный друг при отладке: curl -X POST -H "Content-Type: application/json" -d '{"a":1}' http://localhost:8080/api.9. Установка программ
# Debian / Ubuntu (apt)
sudo apt update
sudo apt install htop git curl
# CentOS / Rocky (dnf)
sudo dnf install htop git
# Alpine (apk)
apk add htop gitapt update / dnf check-update.10. Поиск, фильтры и перенаправление
grep -r "ERROR" /var/log/app/ # поиск в файлах
ls -la | grep "\.log" # фильтрация вывода
cat log.txt | sort | uniq -c | sort -rn # топ повторений
echo "text" > file.txt # записать (перезапишет)
echo "text" >> file.txt # дописать
command 2>&1 # stderr в stdout (ошибки в общий поток)| (пайп) — передача вывода одной команды в другую. Из этого «кирпичика» собираются мощнейшие однострочники.11. Сервисы systemd и логи
sudo systemctl start nginx
sudo systemctl enable nginx # автозапуск при загрузке
sudo systemctl status nginx
sudo systemctl restart app.service
journalctl -u app.service -f # логи сервиса в реальном времени
journalctl --since "1 hour ago"12. Архивация и работа с процессами
tar czf backup.tar.gz /etc/app # сжать каталог
tar xzf backup.tar.gz # распаковать
zip -r app.zip app/ # zip-архив
# быстрое исследование ресурсов
df -h # место на дисках
free -h # память
uptime # нагрузка13. Фоновые задачи и сессии
Долгие команды уходят в фон с &, а выжить после разрыва SSH им помогает nohup или терминальный мультиплексор tmux:
long-task.py & # сразу в фон
nohup long-task.py > log.txt 2>&1 & # переживёт выход
tmux new -s job # новая сессия
tmux detach # Ctrl+B D — отцепиться
tmux attach -t job # вернуться- Переменная
$!хранит PID последнего фонового процесса. jobsпоказывает фоновые задачи текущей оболочки.- tmux держит процесс даже при закрытии окна и разделяет сессию на панели.
14. Планировщик cron
cron выполняет команды по расписанию. Таблица каждого пользователя правится через crontab -e — пять полей времени и команда:
# минута час день.мес месяц день.нед команда
30 2 * * * /usr/local/bin/backup.sh
*/15 * * * * tail -n 1 /var/log/app.log >> /tmp/tail.txt| Поле | Диапазон | Пример |
|---|---|---|
| минута | 0–59 | 30 |
| час | 0–23 | 2 |
| день месяца | 1–31 | */15 |
| месяц | 1–12 | * |
| день недели | 0–7 (0 и 7 — вс) | * |
15. Обработка текста: sed и awk
Без редактора заменяют и анализируют текст прямо в конвейере:
sed -i 's/old/new/g' config.ini # замена по файлу
sed -n '10,20p' log.txt # строки 10–20
awk '{print $1, $3}' access.log # первое и третье поле
awk '/ERROR/ {count++} END {print count}' log.txtsed— потоковый редактор: подстановки, удаление и печать диапазонов.awk— разбор по полям и агрегация в стиле мини-языка.- Обе команды читают стандартный ввод — компонуются через
|.
16. Bash-скрипты
Скрипт — последовательность команд с переменными, условиями и кодами возврата:
#!/bin/bash
set -euo pipefail
NAME=${1:-guest}
if [ -f "$NAME.txt" ]; then
echo "Файл уже существует"
else
echo "Создаю $NAME.txt"
touch "$NAME.txt"
fi
echo "exit code: $?"set -euo pipefail— падать на ошибках и незаданных переменных.${1:-guest}— значение по умолчанию для аргумента.$?— код возврата последней команды, ноль — успех.
"$NAME" защищает от расщепления слов при пробелах в имени.17. Виртуальные машины: пробы и изоляция
Перед тем как тестировать скрипты и сервисы на реальном сервере, полезно поднять изолированное окружение. В этом помогают виртуальные машины, а ещё проще — контейнеры:
ssh -l user 192.168.56.10 # подключение к гостю
scp script.sh user@192.168.56.10:~/ # копирование скрипта- Снапшот VM позволяет откатиться на чистую систему одним кликом.
- Для автоматизации ВМ ставят cloud-init: настройки сети, пакетов и юзеров описываются в YAML.
- Полноценная оркестрация контейнеров — продолжение в Docker и Kubernetes.
18. SSH-ключи и безопасный вход
Пароль у сервера — самый слабый способ входа: его подбирают ботнеты за минуты. Ключи делают доступ и безопаснее, и удобнее:
ssh-keygen -t ed25519 # генерация пары ключей
ssh-copy-id user@server # установка публичного ключа
ssh -i ~/.ssh/mykey user@server # вход по ключу- Закрытый ключ никуда не копируется; открытый свободно живёт на серверах.
- После проверки ключей отключи пароли:
PasswordAuthentication no. - Для доступа через GUI пара с паролем-фразой защищает ключ при краже.
~/.ssh с правами 700, а ключ — 600. Дополнительно лови перебор fail2ban: три неудачные попытки — блокировка IP.19. alias и .bashrc: настройка окружения
Частые команды надоедает печатать целиком, а любимые флаги забываются. Решение — персональные сокращения в профиле оболочки:
alias ll='ls -lah'alias gst='git status'
alias ..='cd ..'
export EDITOR=vim.bashrcчитается для каждой интерактивной сессии,.bash_profile— при входе.- Изменения вступают в силу после
source ~/.bashrcили перезапуска терминала. - Глобальные настройки храни в
/etc/profile.d/— их получают все пользователи.
complete и автодополнение Git для команд с флагами — это быстрее, чем 30 сек на уточнение синтаксиса. Держи настройки в версионированном dotfiles-репозитории.20. Диски и файловые системы
Рано или поздно у сервера кончается место или появляется новый диск. Разметка, формат и монтирование — база работы с хранилищами:
lsblk # дерево дисков и разделов
sudo mkfs.ext4 /dev/sdb1 # создание файловой системы
sudo mount /dev/sdb1 /mnt/datalsblkпоказывает всё: диски, разделы, точки монтирования и размеры.- Монтирование «навсегда» прописывается в
/etc/fstab, иначе после перезагрузки диск не подключится. - Скрипт проверки места:
df -hиdu -sh /var/lib/*— кто съел диск.
nofail и правильные UUID вместо путей спасают при отсутствии диска при загрузке. Резервные копии — не на том же самом диске!21. Диагностика нагруженного сервера
Когда сайт «тормозит», первым делом спрашивают нагрузку. Точный ответ дают утилиты мониторинга, а не догадки.
top -o %CPU # тяжёлые процессы
vmstat 1 5 # CPU, swap, IO
iostat -x 1 # дисковая нагрузка
ss -tulpn # открытые порты и соединения
dmesg | tail # OOM и системные ошибки- Load average объясняйте через ядровые очереди, а не через «сколько процессов».
- Высокое
%wa— узким местом стал диск или IO-подсистема. - OOM-killer виден в dmesg: не добавляйте ресурсы вслепую, сначала разберитесь в потреблении.
si/so в vmstat — возможно, нужно отключить своп или добавить RAM.22. Свои systemd-юниты и таймеры
Сервис, который «сам запускается через cron», не всегда доживает до конца. systemd отвечает за запуск, рестарт и логирование.
[Unit]
Description=My app
After=network.target
[Service]
ExecStart=/usr/local/bin/app
Restart=on-failure
User=app
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now myappRestart=on-failureподнимет упавший процесс автоматически.- Таймеры systemd заменяют cron и учитывают пропущенные запуски.
- Защищённые юниты:
ProtectSystem=strict,NoNewPrivileges=true.
23. Как устроены контейнеры
Docker — не виртуализация, а изоляция процессов ядра. Поняв chroot, namespaces и cgroups, вы поймёте и поведение образов.
chrootменяет корень файловой системы процесса.- Namespaces изолируют PID, сеть и пользователей — процессы «не видят» соседей.
- cgroups ограничивают CPU, память и IO для группы процессов.
docker inspect --format='{{.HostConfig.CpuShares}}' myapp
docker statsdocker exec -it myapp ps aux: процессы внутри контейнера видны, а не «волшебная коробка».24. Резервное копирование
Бэкап — это не «скопировал файлы», а «смог восстановить». Инкрементальные копии и правильные инструменты делают процедуру реальной.
rsync -a --delete /var/www/ /backup/www/
restic backup /var/www --repo /backup/resticrsyncсинхронизирует с инкрементностью и работает по SSH.- restic/tarsnap хранят дедуплицированные снапшоты с шифрованием.
- Тест восстановления — обязательная часть: раз в месяц поднимите данные из бэкапа.
Что дальше
Закрепи навыки в Vim для правки файлов, затем переходи к Docker, Kubernetes и Ansible. Все курсы — на главной странице.