$ cat post.md
practiceЧто нужно понять в Linux, если входишь в DevOps
Не курс по командам, а честная карта того, что в Linux действительно нужно новичку для работы с серверами, логами, сервисами и правами доступа.
Когда человек только начинает смотреть в сторону DevOps, Linux почти сразу становится источником тревоги. Вокруг него много лишнего пафоса: кто-то говорит, что без десятков команд и shell-трюков туда вообще не стоит идти, а кто-то, наоборот, сводит всё к набору простых copy-paste рецептов.
Обе крайности мешают. Для старта в DevOps тебе не нужно превращаться в “человека, который знает все ключи grep наизусть”. Но и без уверенной базы в Linux ты очень быстро упрёшься в потолок: не сможешь нормально читать логи, понимать процессы, работать с сервисами и разбирать, что происходит на сервере.
Почему Linux вообще так важен
Потому что почти вся дальнейшая практика в DevOps происходит либо прямо в Linux-среде, либо очень близко к ней:
- серверы и VPS;
- контейнеры;
- Nginx и reverse proxy;
- systemd и сервисы;
- логи;
- shell-скрипты;
- CI-джобы и automation.
Даже если часть инфраструктуры прячется за managed-сервисами, инженерная логика всё равно остаётся той же. Нужно понимать, где лежат файлы, кто что запускает, какие процессы живы, почему сервис не стартует и где смотреть симптомы.
Что новичку не нужно делать в начале
Очень важно убрать несколько ложных целей.
Тебе не нужно:
- учить Linux как энциклопедию;
- запоминать сотни команд без контекста;
- сразу углубляться в тонкости ядра;
- строить образ “я теперь настоящий терминальный маг”.
Это почти не помогает на старте. Гораздо полезнее понять, как устроен сервер как рабочая система и какие действия ты на нём делаешь постоянно.
Что действительно нужно понять сначала
Файловая система и структура каталогов
Новичок должен не просто знать, что в Linux “есть папки”, а понимать, где обычно живут разные вещи:
/etc— конфиги;/var/log— логи;/home— домашние каталоги пользователей;/opt— удобное место для приложений и репозиториев;/usr/binи похожие каталоги — исполняемые файлы;/tmp— временные данные.
Без этого сервер выглядит как хаос из директорий. С этим — уже как система, где можно искать причину проблем осмысленно.
На практике это выглядит очень приземлённо. Если сервис не поднимается, ты обычно идёшь проверять:
- конфиг в
/etc; - логи в
/var/log; - рабочие файлы приложения в
/optили/srv; - домашний каталог пользователя, если проблема связана с SSH или ключами.
Минимум команд, с которыми стоит подружиться здесь:
pwd
ls -la
cd /etc
cd /var/log
cd /opt
Почему это важно: если ты не понимаешь, где находишься и где лежит нужный файл, то дальше все остальные команды становятся просто угадыванием.
Права доступа и владельцы
Очень много проблем в Linux сводится не к “сломался сервер”, а к тому, что процессу не хватает прав на файл, каталог, сокет или ключ.
Нужно понимать:
- что такое владелец и группа;
- зачем нужны
rwx; - почему у приватного SSH-ключа должны быть строгие права;
- почему сервис может не видеть файл, хотя он “точно есть”.
Самая частая реальная ситуация для новичка выглядит так: “файл есть, но сервис его не читает” или “SSH игнорирует ключ”. И почти всегда там проблема в владельце или правах.
Минимальный набор команд:
ls -l /path/to/file
ls -ld /path/to/directory
chown user:group /path/to/file
chmod 600 /path/to/file
chmod 700 /path/to/directory
Например, почему SSH иногда не принимает ключ:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Почему именно так: SSH специально игнорирует слишком “широкие” права, потому что иначе любой другой пользователь на системе мог бы читать или подменять твои ключи.
Процессы и сервисы
В Linux почти всё сводится к процессам. А в реальной эксплуатации тебе постоянно нужно отвечать на вопросы:
- жив ли сервис;
- стартовал ли он после перезагрузки;
- перезапускается ли он;
- кто именно ест CPU или память;
- почему процесс не поднялся.
Поэтому важно понимать разницу между:
- просто процессом;
- сервисом под
systemd; - контейнером как отдельным runtime-слоем.
На маленьком сервере тебе постоянно приходится отвечать на вопросы вроде:
- сервис вообще запущен или нет;
- он упал один раз или уходит в restart loop;
- он стартует после reboot;
- проблема в самом процессе или в systemd-юните вокруг него.
Базовые команды:
ps aux | grep nginx
sudo systemctl status nginx
sudo systemctl restart nginx
sudo systemctl enable nginx
Почему это важно: ps показывает процесс, а systemctl показывает жизненный цикл сервиса как части системы. Очень много новичков смотрят только в одну из этих сторон и поэтому видят только половину картины.
Логи как основной источник правды
Новички часто ждут, что сервер сам скажет, где проблема, понятной фразой. На практике почти всегда приходится идти в логи.
Нужно уметь:
- искать логи сервиса;
- читать последние строки;
- видеть разницу между симптомом и причиной;
- не бояться больших лог-файлов.
Это один из самых важных навыков для входа в профессию.
Хороший стартовый набор:
sudo journalctl -u nginx -n 50 --no-pager
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log
Что здесь важно понять:
journalctlполезен для сервисов подsystemd;tail -nпоказывает последние строки файла;tail -fпозволяет смотреть лог вживую, когда ты, например, отправляешь запросы к приложению.
Очень часто новичок смотрит на первую попавшуюся ошибку и считает её причиной. Но логи надо читать как историю событий: что произошло раньше, что было симптомом, а что выглядело уже как следствие.
Пользователи, sudo и root
Сервер — это не ноутбук. На нём очень важно понимать, под кем ты работаешь:
- что можно делать под обычным пользователем;
- что требует
sudo; - почему не стоит жить под
root; - зачем нужны отдельные системные пользователи под сервисы.
После любой реальной эксплуатации это перестаёт быть “теорией про безопасность” и становится повседневной гигиеной.
Минимум, который стоит понять руками:
whoami
id
sudo -l
sudo ls /root
Почему не стоит жить под root: потому что под ним слишком легко случайно менять системное состояние, удалять не то, писать конфиги не туда и путать “временный фикс” с постоянной практикой.
Рабочая модель обычно такая:
- входишь под обычным пользователем;
- повышаешь права через
sudoтолько для конкретного действия; - возвращаешься обратно к обычной сессии.
Какие базовые действия должны стать привычными
Я бы не мерил старт в Linux количеством выученных команд. Я бы мерил его тем, насколько спокойно ты делаешь типовые задачи.
Например, новичок в DevOps должен уметь без паники:
- зайти на сервер по SSH;
- понять, где он находится в файловой системе;
- посмотреть конфиг;
- найти лог;
- проверить статус сервиса;
- перезапустить сервис;
- посмотреть, что слушает порт;
- понять, кто владеет файлом и какие у него права.
Если это уже не вызывает ступора, база начинает складываться.
Вот минимальный список команд, который реально закрывает эти действия:
ssh user@server
pwd
cat /etc/nginx/nginx.conf
sudo journalctl -u nginx -n 50 --no-pager
sudo systemctl status nginx
sudo systemctl restart nginx
sudo ss -tulpn
ls -l /etc/nginx/nginx.conf
Это не “все важные команды Linux”. Это просто первый рабочий набор, который помогает не проваливаться в ступор при базовой серверной задаче.
Что Linux даёт именно в DevOps-контексте
Linux важен не сам по себе, а потому что через него становится понятнее вся остальная инженерная система.
Когда ты понимаешь Linux, тебе легче понимать:
- как работает Docker;
- почему Nginx не может достучаться до upstream;
- почему SSH-ключ игнорируется;
- почему fail2ban банит IP;
- почему сервис после deploy поднялся, но не отвечает;
- почему приложение пишет логи в одно место, а systemd показывает другое.
То есть Linux здесь не отдельная тема сбоку, а общий язык всей дальнейшей эксплуатации.
На чём стоит сосредоточиться в начале
Если делать из этого реальный план, а не список желаний, я бы выделил такой порядок:
- файловая система и навигация;
- права, владельцы и пользователи;
- процессы и сервисы;
- логи;
- SSH и работа с сервером;
- базовые сетевые проверки.
Не нужно изучать всё сразу на глубину. Гораздо полезнее наработать уверенность в этих опорных областях.
Для шестого пункта достаточно начать с очень простых проверок:
ping 8.8.8.8
curl -I http://localhost
curl -I https://example.com
ss -tulpn
Почему это полезно:
pingбыстро показывает, есть ли базовая сетевая связность;curlпомогает понять, отвечает ли сервис и что именно он отдаёт;ssпоказывает, какие порты реально слушаются на сервере.
Это уже даёт тебе первые ответы на вопросы “сервис не работает” или “порт вроде открыт, но ответа нет”.
Что будет хорошим признаком прогресса
Ты начинаешь реально понимать Linux не в тот момент, когда можешь красиво перечислить команды, а когда:
- перестаёшь бояться терминала;
- можешь сам локализовать простую проблему;
- понимаешь, куда смотреть первым делом;
- не путаешься в базовой структуре сервера;
- можешь объяснить, почему сервис не стартует или почему у файла “не те права”.
Это уже хорошая база для дальнейшего DevOps-роста.
Если хочется очень практичный self-check, то вот хороший тест:
Что изучать после этого
Когда Linux перестаёт быть пугающей чёрной коробкой, дальше уже логично идти к следующему уровню:
- как устроен маленький production;
- как связаны Docker, Nginx, CI/CD и monitoring;
- как мыслить о deploy и rollback;
- как поднимать первый VPS без хаоса.
Главный вывод
Linux для новичка в DevOps — это не предмет для зубрёжки и не культ терминала. Это основа повседневной инженерной работы. Если ты понимаешь структуру сервера, права, сервисы, логи и базовую операционную механику, то дальше Docker, Nginx, monitoring и production-практики перестают выглядеть как хаос из несвязанных тем.
Именно поэтому Linux — один из первых слоёв, который действительно стоит освоить руками.