Linux — основы и командная строка

Продолжительность: 20 уроков · Уровень: с нуля

Linux — операционная система, на которой работают почти все серверы в мире. DevOps-инженер, администратор и разработчик ежедневно работают с ней через командную строку. Освоив её, ты поймёшь Docker, Kubernetes и Ansible.

1. Что такое Linux

Linux — это ядро, вокруг которого собираются операционные системы. Такая система называется дистрибутивом.

ДистрибутивГде используется
Ubuntu / Debianсерверы, десктоп, обучение
CentOS / Rockyсерверы, корпоративная среда
Fedoraсовременный десктоп и новинки ядра
Alpineкрошечные контейнеры
Сейчас ты можешь попробовать Linux прямо в браузере или в Docker: docker run -it ubuntu bash.

2. Оболочка (shell)

Команды вводятся в оболочку bash. Основные клавиши:

Помощь по команде:

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   # добавить в группу docker

7. Процессы

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 git
Перед установкой всегда обновляй список пакетов: apt 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                   # вернуться

14. Планировщик cron

cron выполняет команды по расписанию. Таблица каждого пользователя правится через crontab -e — пять полей времени и команда:

# минута  час  день.мес  месяц  день.нед  команда
30 2 * * *        /usr/local/bin/backup.sh
*/15 * * * *      tail -n 1 /var/log/app.log >> /tmp/tail.txt
ПолеДиапазонПример
минута0–5930
час0–232
день месяца1–31*/15
месяц1–12*
день недели0–7 (0 и 7 — вс)*
В cron почти пустой PATH: команду и пути пиши абсолютными, а вывод перенаправляй в файл, иначе письмо ошибок улетит в системный ящик.

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.txt

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: $?"
Всегда кавычки вокруг переменных: "$NAME" защищает от расщепления слов при пробелах в имени.

17. Виртуальные машины: пробы и изоляция

Перед тем как тестировать скрипты и сервисы на реальном сервере, полезно поднять изолированное окружение. В этом помогают виртуальные машины, а ещё проще — контейнеры:

ssh -l user 192.168.56.10        # подключение к гостю
scp script.sh user@192.168.56.10:~/  # копирование скрипта
Держи под рукой готовый снапшот и сценарий cloud-init: машину можно пересоздать за минуты, а пробы и поломки не трогают рабочий сервер.

18. SSH-ключи и безопасный вход

Пароль у сервера — самый слабый способ входа: его подбирают ботнеты за минуты. Ключи делают доступ и безопаснее, и удобнее:

ssh-keygen -t ed25519              # генерация пары ключей
ssh-copy-id user@server            # установка публичного ключа
ssh -i ~/.ssh/mykey user@server     # вход по ключу
Ключи без пароля-фразы при утечке файла — открытые двери. Храни ~/.ssh с правами 700, а ключ — 600. Дополнительно лови перебор fail2ban: три неудачные попытки — блокировка IP.

19. alias и .bashrc: настройка окружения

Частые команды надоедает печатать целиком, а любимые флаги забываются. Решение — персональные сокращения в профиле оболочки:

alias ll='ls -lah'
alias gst='git status'
alias ..='cd ..'
export EDITOR=vim
Используй complete и автодополнение Git для команд с флагами — это быстрее, чем 30 сек на уточнение синтаксиса. Держи настройки в версионированном dotfiles-репозитории.

20. Диски и файловые системы

Рано или поздно у сервера кончается место или появляется новый диск. Разметка, формат и монтирование — база работы с хранилищами:

lsblk                    # дерево дисков и разделов
sudo mkfs.ext4 /dev/sdb1  # создание файловой системы
sudo mount /dev/sdb1 /mnt/data
Ошибка в fstab может оставить систему не в сборе: nofail и правильные UUID вместо путей спасают при отсутствии диска при загрузке. Резервные копии — не на том же самом диске!

21. Диагностика нагруженного сервера

Когда сайт «тормозит», первым делом спрашивают нагрузку. Точный ответ дают утилиты мониторинга, а не догадки.

top -o %CPU        # тяжёлые процессы
vmstat 1 5         # CPU, swap, IO
iostat -x 1        # дисковая нагрузка
ss -tulpn          # открытые порты и соединения
dmesg | tail       # OOM и системные ошибки
Swap-шторм иногда выглядит как «всё замерло»: проверьте колонку 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.target
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
Промах времени «oncalendar» не пропадает: systemd догонит задачу при возврате сервера, тогда как cron молча пропустит.

23. Как устроены контейнеры

Docker — не виртуализация, а изоляция процессов ядра. Поняв chroot, namespaces и cgroups, вы поймёте и поведение образов.

docker inspect --format='{{.HostConfig.CpuShares}}' myapp
docker stats
Ядро одно на всех: уязвимость ядра бьёт по всем контейнерам хоста — обновляйте хост и ограничивайте права.
Для отладки пригодится docker exec -it myapp ps aux: процессы внутри контейнера видны, а не «волшебная коробка».

24. Резервное копирование

Бэкап — это не «скопировал файлы», а «смог восстановить». Инкрементальные копии и правильные инструменты делают процедуру реальной.

rsync -a --delete /var/www/ /backup/www/
restic backup /var/www --repo /backup/restic
Копия на том же диске не считается бэкапом: умрёт диск — пропадёт всё. Минимум один бэкап на другом хосте.
Автоматизируйте по расписанию и следите за алертами: заброшенный бэкап хуже, чем отсутствующий план.

Что дальше

Закрепи навыки в Vim для правки файлов, затем переходи к Docker, Kubernetes и Ansible. Все курсы — на главной странице.

← Вернуться к курсам