# Linux и shell

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Уверенно работать в **Linux CLI**: навигация, файлы, процессы, права, pipes, SSH — enough для серверов, контейнеров и debug pipeline.

## Предварительно

- [03 — DevOps-основа](README.md)

## Время

**8–12 часов** (с ежедневной практикой)

---

## Почему Linux

- Большинство **серверов** и **контейнеров** — Linux
- CI runners часто Linux
- Kubernetes nodes — Linux (в основном)
- Security tools (nmap, tcpdump, audit) — CLI под Linux

---

## Shell — командная оболочка

**Shell** (bash, zsh) — программа, где вы вводите команды.

```bash
whoami          # текущий пользователь
hostname        # имя машины
pwd             # текущая директория
ls -la          # список файлов (включая скрытые)
cd /var/log     # перейти
```

**Tab** — автодополнение. **Ctrl+R** — поиск в истории команд.

---

## Файлы и текст

| Команда | Действие |
|---------|----------|
| `cat file` | Вывести файл |
| `less file` | Постраничный просмотр |
| `head -n 20 f` | Первые 20 строк |
| `tail -f app.log` | «Хвост» лога в реальном времени |
| `grep "error" app.log` | Поиск строки |
| `find . -name "*.yml"` | Найти файлы |

**Pipes** — передать вывод одной команды другой:

```bash
cat access.log | grep " 500 " | wc -l
```

---

## Права доступа (permissions)

```bash
ls -l /etc/shadow
# -rw-r----- 1 root shadow ...
```

| Сегмент | Значение |
|---------|----------|
| `-rw-r-----` | owner read/write, group read, other none |
| root | суперпользователь — осторожно |

**chmod / chown** — меняют права. В prod — через IaC/Ansible, не руками.

**SecOps:** world-writable `/tmp` scripts, `.ssh` с `644` вместо `600` — типичные findings.

---

## Процессы

```bash
ps aux | grep nginx
top              # или htop
kill -15 PID     # мягкая остановка
kill -9 PID      # жёсткая (last resort)
systemctl status docker
journalctl -u nginx -n 50
```

---

## SSH — удалённый доступ

```bash
ssh user@10.0.0.5
ssh -i ~/.ssh/lab_key user@host
```

| Практика | Зачем |
|----------|-------|
| Key-based auth | Не brute-force пароль |
| Disable root login | Снижение риска |
| Bastion / jump host | Единая точка входа |
| MFA | Для человеческого доступа |

**Никогда** не коммитьте private key (`id_rsa`) в Git.

---

## Переменные окружения

```bash
export APP_ENV=staging
echo $APP_ENV
env | grep APP
```

Приложения читают **config + secrets** из env. В K8s — ConfigMap / Secret.

---

## Пакеты и сервисы (Ubuntu)

```bash
sudo apt update
sudo apt install -y curl jq
which curl
curl --version
```

**jq** — парсинг JSON в shell (удобно для API debug).

---

## Hardening basics (обзор)

| Мера | Описание |
|------|----------|
| Updates | `unattended-upgrades` / patch policy |
| Firewall | ufw, iptables, cloud SG |
| Fail2ban | Блокировка brute SSH |
| auditd | Audit критичных syscalls |
| CIS Benchmark | Чеклист hardening |

---

## Практика

1. Создайте VM Ubuntu, подключитесь по SSH.
2. Найдите в `/var/log` файлы с `error` через grep.
3. Создайте файл `notes.txt`, измените права на `600`.
4. Запустите `docker ps` (после установки Docker).

---

## Самопроверка

1. Чем `grep` отличается от `find`?
2. Что означает `rwx` для owner?
3. Почему SSH по ключу лучше пароля?
4. Как смотреть логи systemd-сервиса?

---

## Дальше

→ [Docker и образы](docker-i-obrazy.md)
