Курс Git для Linux-администратора

Часть 1: Установка и настройка

1. Установка Git на Linux

bash

# Для Ubuntu/Debian
sudo apt update
sudo apt install git -y

# Для CentOS/RHEL
sudo yum install git -y

# Проверка установки
git --version

2. Настройка Git (первая настройка)

bash

# Установка имени пользователя и email
git config --global user.name "Ваше Имя"
git config --global user.email "ваш.email@example.com"

# Настройка редактора по умолчанию (nano проще для новичка)
git config --global core.editor "nano"

# Просмотр всех настроек
git config --list

3. Создание SSH-ключа для GitHub

bash

# Генерация SSH-ключа
ssh-keygen -t ed25519 -C "ваш.email@example.com"
# Нажимайте Enter на всех вопросах (можно без пароля)

# Просмотр публичного ключа
cat ~/.ssh/id_ed25519.pub

4. Добавление ключа в GitHub

  1. Зайдите на GitHub → Settings → SSH and GPG keys
  2. Нажмите «New SSH key»
  3. Вставьте содержимое файла ~/.ssh/id_ed25519.pub
  4. Проверьте подключение:

bash

ssh -T git@github.com

Часть 2: Основы Git

5. Создание репозитория

bash

# Способ 1: Локальный репозиторий
mkdir my-notes
cd my-notes
git init

# Способ 2: Клонирование существующего
git clone https://github.com/username/repository.git
git clone git@github.com:username/repository.git  # через SSH

6. Базовый рабочий процесс

bash

# Создаем файл
echo "# Мои заметки по Linux" > README.md

# Проверяем статус
git status

# Добавляем файл в staging area
git add README.md
# Или все файлы
git add .

# Фиксируем изменения (коммит)
git commit -m "Добавлен README файл"

# Отправляем на GitHub
git push origin main

7. Полезные команды для ежедневного использования

bash

# Просмотр истории коммитов
git log --oneline
git log --graph --pretty=format:'%C(yellow)%h%Creset -%C(red)%d%Creset %s %C(green)(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

# Просмотр изменений до коммита
git diff

# Отмена изменений в файле (до git add)
git checkout -- имя_файла

# Удаление файла из отслеживания
git rm --cached имя_файла

Часть 3: Работа с Markdown файлами

Пример файла linux-commands.md:

markdown

# Заметки Linux-администратора

## Основные команды

### Мониторинг системы
```bash
# Просмотр загрузки CPU
top
htop

# Просмотр использования диска
df -h
du -sh *

# Мониторинг памяти
free -h

Сетевые команды

bash

# Проверка сети
ip a
ping -c 4 google.com

# Просмотр открытых портов
ss -tulpn

Полезные скрипты

Бэкап директории

bash

#!/bin/bash
# backup.sh
BACKUP_DIR="/backups"
SOURCE_DIR="/var/www"
DATE=$(date +%Y-%m-%d_%H-%M)

tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
echo "Бэкап создан: backup_$DATE.tar.gz"

text

---

## Часть 4: Сложные операции

### 8. Работа с ветками (branches)
```bash
# Создание ветки
git branch feature/new-script
git checkout feature/new-script
# Или одной командой
git checkout -b feature/new-script

# Переключение между ветками
git checkout main
git checkout feature/new-script

# Слияние веток
git checkout main
git merge feature/new-script

# Удаление ветки
git branch -d feature/new-script  # локально
git push origin --delete feature/new-script  # удаленно

9. Разрешение конфликтов слияния

bash

# Шаг 1: Попытка слияния
git merge feature/new-script

# Если конфликт, Git покажет:
# CONFLICT (content): Merge conflict in filename

# Шаг 2: Просмотр конфликтных файлов
git status

# Шаг 3: Редактирование файлов
# Git помечает конфликтные участки:
<<<<<<< HEAD
Текст из текущей ветки
=======
Текст из сливаемой ветки
>>>>>>> feature/new-script

# Шаг 4: После исправления
git add имя_файла
git commit -m "Разрешен конфликт слияния"

10. Пример сложного слияния

bash

# Ситуация: нужно добавить новый скрипт, но main изменился

# 1. Начинаем с чистой копии
git checkout main
git pull origin main

# 2. Создаем новую ветку
git checkout -b feature/backup-script

# 3. Добавляем скрипт backup.sh
cat > backup.sh << 'EOF'
#!/bin/bash
# Автоматический бэкап
BACKUP_SRC="/etc"
BACKUP_DEST="/backups"
tar -czf "$BACKUP_DEST/backup_$(date +%Y%m%d).tar.gz" "$BACKUP_SRC"
EOF

git add backup.sh
git commit -m "Добавлен скрипт бэкапа"

# 4. Тем временем кто-то обновил main
# Нужно обновить нашу ветку
git checkout main
git pull origin main
git checkout feature/backup-script
git merge main  # или git rebase main

# 5. Если конфликт - разрешаем, затем
git add .
git commit -m "Слияние с основной веткой"

# 6. Публикуем изменения
git push origin feature/backup-script

# 7. Создаем Pull Request на GitHub

11. Отмена изменений

bash

# Отмена последнего коммита (сохраняет изменения)
git reset --soft HEAD~1

# Полная отмена последнего коммита
git reset --hard HEAD~1

# Отмена изменений в конкретном файле
git checkout -- имя_файла

# Отмена уже отправленного коммита (осторожно!)
git revert HEAD
git push origin main

Часть 5: Продвинутые практики для DevOps/SRE

12. .gitignore файл для Linux-администратора

text

# Игнорировать временные файлы
*.tmp
*.log
*.swp

# Игнорировать логи
logs/
*.log

# Игнорировать конфиденциальные данные
*.pem
*.key
secrets/
.env

# Игнорировать бэкапы
*.bak
backup_*.tar.gz

# Игнорировать системные файлы
.DS_Store
Thumbs.db

13. Работа с тегами (версионирование)

bash

# Создание тега
git tag v1.0.0
git tag -a v1.1.0 -m "Версия с новыми скриптами"

# Публикация тегов
git push origin v1.0.0
git push origin --tags

# Просмотр тегов
git tag
git show v1.0.0

14. Полезные алиасы для .gitconfig

bash

# Добавьте в ~/.gitconfig
[alias]
    co = checkout
    ci = commit
    st = status
    br = branch
    hist = log --pretty=format:\"%C(yellow)%h%Creset %ad | %C(green)%s%Creset %C(red)[%an]%Creset %C(blue)%d%Creset\" --date=short --graph
    last = log -1 HEAD
    undo = reset HEAD~1
    diffc = diff --cached

Часть 6: Практический пример — Дневник администратора

Структура репозитория:

text

linux-admin-journal/
├── README.md
├── daily-notes/
│   ├── 2024-01-15.md
│   ├── 2024-01-16.md
│   └── template.md
├── scripts/
│   ├── backup/
│   ├── monitoring/
│   └── utils/
├── configs/
│   ├── nginx/
│   ├── ssh/
│   └── firewall/
└── knowledge-base/
    ├── troubleshooting.md
    ├── useful-commands.md
    └── best-practices.md

Пример ежедневной заметки:

markdown

# 2024-01-15 - Работа с серверами

## Выполненные задачи
- [x] Настройка автоматического бэкапа
- [x] Обновление пакетов на production серверах
- [ ] Мониторинг дискового пространства

## Проблемы и решения
**Проблема**: Сервер db01 перегружен
**Решение**: Добавил swap файл и оптимизировал запросы

```bash
# Создание swap
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Новые команды

bash

# Просмотр использования inodes
df -i

# Мониторинг в реальном времени
watch -n 1 'df -h'

Задачи на завтра

  • Настроить алерты дискового пространства
  • Протестировать новый скрипт бэкапа

text

---

## Часть 7: Промт для ИИ по DevOps/SRE росту

Мне нужен детальный план развития от Junior Linux Administrator до Senior DevOps/SRE Engineer. Учти следующее:

Текущий статус:

  • Базовые знания Linux (администрирование, Bash-скрипты)
  • Понимание Git/GitHub на уровне ежедневного использования
  • Опыт работы с серверами, мониторингом, бэкапами

Требуемый результат через 12-18 месяцев:

  • Уверенные навыки в CI/CD (GitLab CI, Jenkins, GitHub Actions)
  • Контейнеризация (Docker, Docker Compose)
  • Оркестрация (Kubernetes basics)
  • Инфраструктура как код (Terraform, Ansible)
  • Мониторинг и логирование (Prometheus, Grafana, ELK)
  • Основы облачных платформ (AWS/GCP/Azure)

Ограничения:

  • 10-15 часов в неделю на обучение
  • Доступ к домашней лаборатории (2-3 VPS)
  • Бюджет на курсы: средний
  • Предпочтение практическим проектам

Создай пошаговый план обучения с:

  1. Конкретными темами по месяцам
  2. Практическими проектами для каждого этапа
  3. Критериями проверки знаний
  4. Рекомендациями по сертификациям
  5. Ресурсами (бесплатные/платные курсы, книги, документация)
  6. Требованиями к домашней лаборатории на каждом этапе
  7. Метриками прогресса
  8. Советами по поиску ментора/комьюнити

Формат: Табличный план + детальное описание каждого этапа + чек-листы для самопроверки.

text

---

## Бонус: Быстрый чек-лист для ежедневной работы

```bash
# Ежедневный рабочий процесс
1. git pull origin main          # Обновить локальную копию
2. git checkout -b feature/name  # Создать ветку для задачи
3. # Работа с файлами...         # Вноси изменения
4. git add .                     # Добавить изменения
5. git commit -m "Описание"      # Закоммитить
6. git push origin feature/name  # Отправить на GitHub
7. # Создать Pull Request на GitHub
8. После слияния: git checkout main && git pull

Советы для новичков:

  1. Делайте маленькие коммиты — одна задача = один коммит
  2. Пишите понятные сообщения коммитов на русском/английском
  3. Чаще делайте push чтобы не потерять работу
  4. Используйте .gitignore для временных файлов
  5. Сначала pull, потом push — избегайте конфликтов
  6. Ветки — ваш друг — работайте в отдельных ветках

Начните с простого: ведите дневник в Markdown, храните полезные скрипты. По мере роста навыков добавляйте автоматизацию, CI/CD, инфраструктуру как код. Удачи в обучении! 🚀

Оставьте комментарий