Linux Skill - Освой Linux c нуля до DevOps – Telegram
Linux Skill - Освой Linux c нуля до DevOps
11.1K subscribers
50 photos
103 videos
483 links
Освой Linux c нуля до DevOps
Подробный гайд по Linux и море других уроков для системных администраторов

📩 По всем вопросам: @chorapov

РКН https://vk.cc/cMUwm4
Download Telegram
🔥 DevOps-стек: Запусти 3 контейнера одной командой (YAML)

Привет, цифровой архитектор!

Тратить время на ручное развертывание тестовых сервисов.
Docker Compose позволяет тебе развернуть весь DevOps-стек (приложение, БД, мониторинг) одной командой.

# docker-compose.yml (версия 3.8)
version: '3.8'
services:
app:
# Пример: веб-приложение Flask
image: custom/app:1.0
ports: ["8080:8080"]
# Переменные среды для подключения к БД (The Twelve-Factor App)
environment:
DB_HOST: db
db:
# Официальный образ БД
image: postgres:15
# Сохраняем данные на томе (volume)
volumes:
- db_data:/var/lib/postgresql/data
monitor:
# Пример дашборда
image: grafana/grafana:latest
ports: ["3000:3000"]
volumes:
db_data: # Объявление тома


Вывод: Запусти стек командой docker-compose up -d.

#Docker #DevOps #Мониторинг #YAML
👎1
⚠️ Никогда не используй [ ] в Bash, пока не прочитаешь это

Привет, инженер! 👋

Сколько раз ты ловил binary operator expected или забывал экранировать > в условии? В Bash скобки — это не просто стиль, это разные инструменты с разной логикой.

Давай разложим всё по полочкам, чтобы твои скрипты работали предсказуемо.

📌 1. Одинарные квадратные [ ... ] — Классика (test)
Это синоним команды test. Она старая, POSIX-совместимая, но капризная.

Нюанс: Переменные нужно брать в кавычки "$var", иначе при пустом значении скрипт упадет.
Минус: Знаки > и < нужно экранировать (\>), иначе Bash решит, что это перенаправление ввода/вывода.

if [ "$a" = "root" ]; then echo "Hi root"; fi


📌 2. Двойные квадратные [[ ... ]] — Расширенная проверка
Это ключевое слово самого Bash. Оно мощнее и безопаснее.

Плюс: Не нужно экранировать > и <.
Поддерживает логические && и || прямо внутри скобок.
Киллер-фича: Поддерживает регулярные выражения через оператор =~.

# Проверка регуляркой (без кавычек!)
if [[ "$ver" =~ ^3\. ]]; then echo "Version 3.x"; fi


📌 3. Одинарные круглые ( ... ) — Подоболочка (Subshell)
Команды внутри запускаются в отдельном процессе.

Суть: Переменные, измененные внутри (), не меняются в основном скрипте.
Пример: (cd /tmp; rm *.log) — вы перейдете в папку только внутри скобок, основной скрипт останется в текущей директории.

📌 4. Двойные круглые (( ... )) — Арифметика
Специальная конструкция для математики в стиле Си.

Плюс: Можно не писать $ перед переменными.
Поддерживает инкременты var++ и тернарные операторы.

(( a++ ))       # Увеличить a на 1
b=$(( a + 5 )) # Записать результат в b


💡 Итог:
Пишешь на Bash? Всегда используй [[ ]] для условий и (( )) для математики. Оставь [ ] для совместимости со старым sh.

#Linux #Bash #DevOps #Scripting #Shell
👍16
🏎️ Почему твой Linux грузится вечность? Находим и обезвреживаем

Эй, линуксоид! 👋

Знакома ситуация: отправил сервер в reboot, и можно идти варить кофе, потому что он поднимается мучительно долго? 😤 Часто виноват один-единственный «зависший» сервис, который тянет время всей системы.

В systemd есть встроенный инструмент-детектив, который покажет, кто именно крадет твои секунды.

📌 1. Оцениваем общий масштаб бедствия
Сначала посмотрим, сколько времени ушло на загрузку в целом (ядро + userspace).

$ systemd-analyze
Startup finished in 253ms (kernel) + 933ms (initrd) + 6.873s (userspace) = 8.060s

Это дает общее понимание: если userspace занимает слишком много времени, значит, проблема в службах.

📌 2. Ищем виновника (команда blame)
Эта команда выводит список всех запущенных юнитов, отсортированных по времени инициализации — от самых медленных к самым быстрым.

$ systemd-analyze blame
3.811s NetworkManager-wait-online.service
806ms tuned.service
680ms postfix.service
490ms lvm2-monitor.service
...

В данном примере видно, что NetworkManager-wait-online.service задерживает запуск почти на 4 секунды.

📌 3. Анализируем критический путь
Иногда сервис запускается долго, но не тормозит остальных. Чтобы увидеть дерево зависимостей и понять, какой процесс реально блокирует финиш загрузки, используйте:

$ systemd-analyze critical-chain
graphical.target @9.663s
└─multi-user.target @9.661s
└─snapd.seeded.service @9.062s +62ms
└─basic.target @6.336s
└─sockets.target @6.334s
└─snapd.socket @6.316s +16ms
└─sysinit.target @6.281s
└─cloud-init.service @5.361s +905ms
└─systemd-networkd-wait-online.service @3.498s +1.860s

Здесь видно, что systemd-networkd-wait-online.service является узким местом в цепочке,.

💡 Совет:
Если вы нашли «тормоза», которые вам не нужны (например, postfix на рабочей станции или ожидание сети там, где это не критично), их можно отключить (systemctl disable) или оптимизировать.

#Linux #Systemd #DevOps #SysAdmin #Performance
👍10🔥3
🔥 Компактный IP: Смотрим сеть без боли в глазах

EHLO, коллега! 👋

Признайся, сколько раз ты вводил ip addr и тонул в потоке информации о MTU, qdisc и broadcast-адресах, пытаясь найти заветные цифры IP? 😵 Или по старой привычке ставил net-tools, чтобы вернуть любимый, но устаревший ifconfig,?

В современном пакете iproute2 есть скрытая жемчужина — флаг -br (brief), который превращает вывод в аккуратную таблицу. Больше не нужно писать длинные пайплайны с grep и awk.

📌 Команда для читаемого вывода:

ip -br a


Что она делает:
-br (brief) — включает режим краткого вывода.
a (addr) — показывает адреса.

Результат будет выглядеть примерно так:

lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0 UP 192.168.1.10/24 fe80::a00:27ff:fe0d:d90c/64


💡 Почему это круто:
1. Ты сразу видишь статус (UP/DOWN), имя интерфейса и IP.
2. Это работает «из коробки» в большинстве современных дистрибутивов (CentOS 8+, Ubuntu 18.04+ и др.).
3. Идеально для твоих скриптов и беглого просмотра состояния сети.

#Linux #Networking #CLI #SysAdmin #DevOps
👍22
🛡 Твой новый стандарт: Генерируем SSH Ed25519

С возвращением! 👋

Всё еще генерируешь ключи через rsa -b 4096? Это надежно, но ключи получаются длинными, а генерация — медленной. В современном мире стандартом де-факто становится Ed25519. Это алгоритм на эллиптических кривых: он безопаснее, быстрее и создает очень компактные ключи, которые удобно копировать.

Давай обновим твои доступы за одну минуту.

📌 Команда для генерации:

ssh-keygen -t ed25519 -C "admin@myserver"


Разбор флагов:
-t ed25519 — указываем тип ключа. Он обеспечивает превосходную безопасность и высокую производительность.
-C "комментарий" — метка (обычно email), чтобы ты не запутался в authorized_keys, когда ключей станет много.

💡 Что делать дальше?

1. Закинь ключ на сервер:
Используй утилиту ssh-copy-id, она сама разложит всё по полочкам:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote-host

Если ssh-copy-id нет под рукой, можно сделать это вручную (но это дольше):

cat ~/.ssh/id_ed25519.pub | ssh user@remote-host "cat >> ~/.ssh/authorized_keys"

2. Проверь права (на локальной машине):
Приватный ключ должен быть доступен только тебе (права 600), иначе SSH-клиент может отказаться работать или это создаст дыру в безопасности.

chmod 600 ~/.ssh/id_ed25519

Переходи на Ed25519 — это быстрее, короче и безопаснее. Сохрани шпаргалку, чтобы не гуглить флаги! 🔥

#SSH #Linux #Security #DevOps #CLI
👍11🔥1
Как выполнить арифметическую операцию 5 + 3 в Bash?
Anonymous Quiz
37%
val = 5 + 3
28%
(( val = 5 + 3 ))
6%
let "val = 5 + 3
29%
варианты B и C верны
💾 UUID или /dev/sda? Почему твой сервер не грузится

Привет, суперпользователь! 👋

Знакомая ситуация: подключил новый диск, перезагрузил сервер, а он «встал»? Скорее всего, имена устройств сместились (например, sda стал sdb), и система не нашла корневой раздел по старому пути,.

Чтобы спать спокойно, используй в /etc/fstab не имена устройств, а UUID (универсальный уникальный идентификатор). Он остается неизменным, даже если ты переставишь диски местами,.

📌 Как узнать UUID всех разделов?
Используй команду blkid (Block ID). Она покажет атрибуты всех блочных устройств.

# blkid
/dev/sdf2: UUID="b600fe63-d2e9-461c-a5cd-d3b373a5e1d2" TYPE="ext4"
/dev/sda1: UUID="17f12d53-c3d7-4ab3-943e-a0a72366c9fa" TYPE="ext4" PARTUUID="c9a5ebb0-01"
/dev/sda5: UUID="b600fe63-d2e9-461c-a5cd-d3b373a5e1d2" TYPE="swap" PARTUUID="c9a5ebb0-05"
/dev/sde1: UUID="4859-EFEA" TYPE="vfat"


Что мы видим:
UUID="..." — тот самый идентификатор, который нужно копировать в fstab.
TYPE="..." — тип файловой системы (ext4, swap, vfat).

💡 Лайфхак:
Если нужно узнать данные только для конкретного диска, просто укажи его имя: blkid /dev/sda1.

#Linux #SysAdmin #Storage #CLI #Fstab
👍15
📉 Ubuntu весит 100МБ, а Alpine — 5МБ. Почувствуй разницу

Привет, $(whoami)! 👋

Твои Docker-образы занимают сотни мегабайт, а деплой длится вечность? Часто проблема в том, что ты используешь «тяжелые» базовые образы, в которых куча ненужного софта (6 разных оболочек, 3 пакетных менеджера и т.д.).

Для продакшена и микросервисов идеально подходит Alpine Linux. Это минималистичный дистрибутив, который весит всего около 5 МБ. Меньше размер — быстрее скачивание, меньше уязвимостей и выше скорость запуска.

📌 Пример минимального Dockerfile:

FROM alpine:latest
# copy all of the files in this project into the Docker image
RUN mkdir public-app/
ADD . public-app/
WORKDIR public-app


Что здесь происходит:
FROM alpine:latest — берем легкую базу.
Создаем папку и копируем туда проект.
Назначаем рабочую директорию.

💡 Совет:
Используй Alpine, когда тебе нужно запустить одно конкретное приложение или сервис. Если в образе нет лишних утилит, их не смогут использовать злоумышленники, что уменьшает поверхность атаки.

#Docker #DevOps #Alpine #Containers #Optimization
👍8👎2
🔥 Забудь про UptimeRobot: Свой мониторинг на коленке

printf "Hello\n"

Иногда разворачивать тяжелые комбайны мониторинга ради проверки пары узлов — это как стрелять из пушки по воробьям. Ты же знаешь силу командной строки: зачем тебе веб-интерфейс, если есть старый добрый Bash?

Можно написать простой скрипт, который будет проверять доступность хоста и сообщать статус. Это база, которая работает на любом утюге с Linux.

📌 Скрипт проверки доступности узла:

HNAME=news-15.net  # Пресловутый спамер.
# HNAME=$HOST # Отладка: проверка локальной сети.
count=2 # Отсылаются только два пинга.

if [[ `ping -c $count "$HNAME"` ]]
then
echo ""$HNAME" все еще работает и рассылает спам."
else
echo ""$HNAME" Кажется выключен. Жаль."
fi


Разбор полетов:
Переменная HNAME хранит адрес цели.
ping -c 2 отправляет ровно два пакета (чтобы не ждать вечно).
Конструкция if [[ ... ]] проверяет код возврата команды ping. Если 0 (успех) — узел жив.

💡 Почему это круто:

Ты не зависишь от стороннего софта.
Работает даже на встраиваемых системах и роутерах.
Легко добавить отправку уведомления на почту или в Telegram прямо в блок else.

#Linux #Bash #DevOps #Scripting #Monitoring
👍5
🔥 Забудь про vim: Добавляем источники apt в одну строку

root@localhost:~#

Часто нужно добавить новый репозиторий в систему (например, при начальной настройке сервера), но открывать текстовый редактор долго и неудобно для скриптов. Обычное перенаправление вывода через sudo может вызвать ошибку «Permission denied».

Есть элегантный способ добавлять строки текста в файл, например, имя репозитория ПО в файл источников, не открывая его для редактирования. Используй синтаксис с командой tee.

📌 Команда для добавления репозитория (на примере Nginx):

echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list


Разбор полетов:
echo — передает строку текста в канал (pipe).
lsb_release -cs — автоматически подставляет кодовое имя твоего дистрибутива.
sudo tee — принимает вывод и записывает его в файл с правами суперпользователя, обходя ограничения оболочки.

💡 Совет:
Используй флаг -a с командой tee (например, sudo tee -a), если хочешь добавить строку в конец файла, а не перезаписать его полностью.

#Linux #CLI #SysAdmin #DevOps #Apt
👍6
🔥 Забудь про 500 ошибку: Тест конфига Nginx перед запуском

echo "Привет, инженер!"

Знакомая ситуация: поправил конфиг, перезапустил службу, а сервер «лежит» из-за пропущенной точки с запятой? Чтобы избежать страданий и простоя продакшна, всегда проверяй исправность конфигурационных файлов перед перезапуском.

У многих популярных программ есть встроенные средства для такой проверки.

📌 Команда для проверки конфигурации Nginx:

nginx -t


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

💡 Совет:
Используй systemctl reload вместо restart, когда это возможно. Reload (перезагрузка конфигурации) обычно безопаснее, так как процесс перезапускается только после успешной проверки конфигурации,.

Проверяй конфиг до того, как это сделают пользователи! 😉

#Nginx #Linux #SysAdmin #DevOps #CLI
👍12👀3👎1
Какая специальная переменная содержит количество аргументов, переданных скрипту?
Anonymous Quiz
23%
$@
21%
$*
17%
$0
39%
$#
👀7👍5🔥1
Какой оператор используется для проверки, существует ли файл и является ли он обычным файлом (не каталогом)?
Anonymous Quiz
14%
-e
15%
-d
65%
-f
6%
-s
🔒 Вот что hackers проверяют в первую очередь на твоём сервере

Каждый день на серверы идут тысячи автоматических сканирований на поиск слабых мест.

Проблема: ты даже не знаешь, какие уязвимости уже есть в твоей системе. SSH настроена правильно? Firewall включён? Сервисы обновлены?

Решение: два инструмента, которые за минуты покажут тебе всё, что видит хакер.

🔹 vps-audit
https://github.com/vernu/vps-audit

Легковесный bash-скрипт для быстрого аудита VPS:
• Проверяет SSH-конфигурацию (root login, слабые пароли)
• Статус firewall, fail2ban и открытых портов
• Запущенные сервисы и SUID файлы
• Генерирует цветной отчёт (🟢 PASS / 🟡 WARN / 🔴 FAIL)
• Нет зависимостей, работает везде

🔹 Lynis

https://github.com/CISOfy/lynis
Профессиональный инструмент аудита (15+ лет на рынке):
• Сканирует 200+ параметров безопасности
• Проверяет compliance (PCI DSS, HIPAA, ISO27001)
• Поиск уязвимостей в ПО и конфигурации
• Детальный hardening index — оценка безопасности
• Работает на Linux, macOS, BSD (14.5k звёзд на GitHub)

Запусти прямо сейчас — узнаешь, что hackers видят на твоём сервере первым делом.

#Linux #Monitoring #Disk #DevOps #Bash #CLI
👍10🔥3
📊 Вот как настоящие админы видят, что происходит на сервере

Сервер зависает, CPU зашкаливает, память утекает — а ты не знаешь, в чём проблема.

Проблема: top, htop, df разбросаны по разным окнам. Решение: один bash-скрипт, который покажет всё сразу.

🔹 System Monitor
https://github.com/elliotsecops/System-Monitor

Bash-скрипт для мониторинга Linux:
• Отображает CPU, память и диск в реальном времени (обновляется каждые 5 сек)
• Поддерживает несколько точек монтирования диска
• Настраивается через конфиг или аргументы командной строки
• Graceful shutdown (Ctrl+C) без зависания

Запусти на своём сервере — увидишь, что там реально происходит.

#linux #мониторинг #bash #sysadmin #devops
👍5
🗄️ Твоя база данных молит о помощи — вот как её спасти

БД тормозит, backup'и создаёшь вручную, конфиги MySQL/PostgreSQL — загадка?

Вот два скрипта, которые спасают админам жизнь каждый день.

🔹 MySQLTuner-perl
https://github.com/major/MySQLTuner-perl

Анализирует MySQL/MariaDB/Percona:
• 300+ проверок производительности и безопасности
• Даёт конкретные рекомендации по оптимизации
• Поддерживает Galera, InnoDB, MyISAM, Aria
• JSON и HTML отчёты, CVE проверки
• 9.4k звёзд на GitHub

🔹 postgresql-db-dump
https://github.com/richbl/postgresql-db-dump

Удалённый backup PostgreSQL:
• Автоматический dump с датой-временем
• Сжатие файла (gzip)
• Удобная интеграция в cron
• Ошибки обработаны, скрипт стабилен

Запусти сейчас — спаси свои базы.

#linux #mysql #postgresql #database #devops #backup
👍3
💾 Данные пропадут завтра — два скрипта спасут их сегодня

Диск упадёт когда угодно. У тебя есть backup?

Два скрипта, которые админы используют для автоматического резервного копирования.

🔹 rsync-backup (Python)
https://github.com/hkbakke/rsync-backup

Умный backup через rsync:
• Жёсткие ссылки — неизменённые файлы не дублируются
• Автоматическая проверка MD5
• Снимки: daily, weekly, monthly, yearly
• Email отчёты о статусе
• Централизованный backup с серверов

🔹 RSync Backup Script v1 (Bash)
https://github.com/Aman7123/RSync-Backup-Script-v1

Простой backup в cron:
• Автоматические weekly и monthly папки
• Удаление старых backup'ов
• Логирование каждого backup'а
• Настраивается через config-файл
• Идеален для daily cron

Запусти один из них сегодня — спаси свои данные.

#linux #backup #rsync #devops #sysadmin #безопасность
👍4
🛡️ Боты из 100 стран уже стучатся — заблокируй их за минуту

Логи забиты, сервер под атакой, CPU на 100% от ботов.

Два скрипта защитят твой сервер от brute-force и спама.

🔹 iptables-ipset-blacklists
https://github.com/dannysheehan/iptables-ipset-blacklists

Автоматическая блокировка по чёрным спискам:
• Загружает авторитетные blacklists
• Whitelist для своих IP
• Логирование атак (HTTP/HTTPS/DNS)
• Cron для обновления раз в день

🔹 ipset-country
https://github.com/mkorthof/ipset-country

Блокировка целых стран:
• iptables/nftables/firewalld
• IPv4 + IPv6 (ipdeny.com)
• Reject или drop режим
• Whitelist/blacklist

Запусти сейчас — очисти логи от мусора.

#linux #безопасность #iptables #ipset #firewall #devops
👍2