uk
Feedback
LinuxSkill - Сводки с прода и Шпаргалки

LinuxSkill - Сводки с прода и Шпаргалки

Відкрити в Telegram

Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам. Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале. 📩 По всем вопросам: @chorapov Зеркало в MAX: https://max.ru/LinuxSkill РКН https://vk.cc/cMUwm4

Показати більше

📈 Аналітичний огляд Telegram-каналу LinuxSkill - Сводки с прода и Шпаргалки

Канал LinuxSkill - Сводки с прода и Шпаргалки (@linuxskill) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 10 743 підписників, посідаючи 11 101 місце в категорії Технології та додатки та 59 272 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 10 743 підписників.

За останніми даними від 31 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -51, а за останні 24 години на -5, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 11.78%. Протягом перших 24 годин після публікації контент зазвичай збирає 4.80% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 1 265 переглядів. Протягом першої доби публікація в середньому набирає 516 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 4.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як docker, linux, bash, devops, скрипт.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам. Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале. 📩 По всем вопросам: @chorapov Зеркало в MAX: https://max.ru/LinuxSkill РКН https://vk.cc/cMUwm4

Завдяки високій частоті оновлень (останні дані отримано 01 вересня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

10 743
Підписники
-524 години
-177 днів
-5130 день
Архів дописів
🎥 Вебинар: Восстанавливаем RAID5 в Linux Практическое руководство по обнаружению неисправностей и грамотному восстановлению
🎥 Вебинар: Восстанавливаем RAID5 в Linux Практическое руководство по обнаружению неисправностей и грамотному восстановлению RAID5-массивов при отказе накопителя 🧠 На вебинаре вы узнаете: - Принципы работы RAID5 и сценарии поведения системы при выходе одного диска из строя - Набор ключевых команд и инструментов для мониторинга, анализа и «лечения» массива - Подходы к грамотному проектированию RAID-массива с учётом отказоустойчивости - Типичные ловушки при восстановлении и способы обойти их без фатальных последствий 💪 В результате вебинара вы: - Приобретёте навык оценки состояния RAID5-массива и выявления причин сбоя - Освоите безопасное отключение и подключение дисков без лишнего риска - Выполните полноценное пошаговое восстановление массива через утилиту mdadm - Поймёте, как снизить вероятность потери данных в аварийной ситуации и действовать без паники ⭐️ Открытый урок проходит в преддверии старта курса «Инфраструктура высоконагруженных систем». 👉 Для участия зарегистрируйтесь: https://otus.pw/DWub/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

🎯 Забудь про дублирование путей! Профессиональная навигация в Bash При создании директории под проект ты постоянно вводишь две команды: сначала mkdir, затем cd с тем же длинным путём. Показываю, как схлопнуть это через встроенную переменную оболочки. Классический подход (трата времени)
# ПЛОХО: ручной повтор пути отнимает время и провоцирует опечатки
mkdir /var/www/my_new_hardcore_project
cd /var/www/my_new_hardcore_project
Оптимизация на лету (переменная $_)
# ХОРОШО: объединяем через && и подставляем последний аргумент через $_.
# Кавычки обязательны — иначе путь с пробелом сломает cd (too many arguments).
mkdir -p /var/www/my_new_hardcore_project && cd "$_"
Оператор && гарантирует, что переход выполнится только при успешном создании каталога. Переменная $_ разворачивается в последний аргумент предыдущей команды. Кавычки вокруг "$_" не опциональны: без них путь с пробелом разобьётся на несколько аргументов, и cd упадёт. Глобальное решение (функция в конфиге)
# ИДЕАЛЬНО: чтобы не вспоминать про && cd "$_", зашей функцию в ~/.bashrc
mkcd() {
  mkdir -p -- "$1" && cd -- "$1"
}
# После source ~/.bashrc создание и переход — одна команда:
mkcd /var/www/my_new_hardcore_project
Крошечный трюк, который экономит тысячи нажатий на дистанции. Привыкай использовать механизмы Bash на полную. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Bash #CLI #Lifehack #SysAdmin

🔍Тестовое собеседование с Head of DevOps уже завтра 28 июля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседов
🔍Тестовое собеседование с Head of DevOps уже завтра 28 июля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle DevOps-разработчика. Как это будет: 📂 Александр Хренников, Head of DevOps в KTS с опытом 14+ лет, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Александр будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Александру Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для DevOps-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_devops_bot Реклама. О рекламодателе.

🎥 Вебинар: Восстанавливаем RAID5 в Linux Практическое руководство по обнаружению неисправностей и грамотному восстановлению
🎥 Вебинар: Восстанавливаем RAID5 в Linux Практическое руководство по обнаружению неисправностей и грамотному восстановлению RAID5-массивов при отказе накопителя 🧠 На вебинаре вы узнаете: - Принципы работы RAID5 и сценарии поведения системы при выходе одного диска из строя - Набор ключевых команд и инструментов для мониторинга, анализа и «лечения» массива - Подходы к грамотному проектированию RAID-массива с учётом отказоустойчивости - Типичные ловушки при восстановлении и способы обойти их без фатальных последствий 💪 В результате вебинара вы: - Приобретёте навык оценки состояния RAID5-массива и выявления причин сбоя - Освоите безопасное отключение и подключение дисков без лишнего риска - Выполните полноценное пошаговое восстановление массива через утилиту mdadm - Поймёте, как снизить вероятность потери данных в аварийной ситуации и действовать без паники ⭐️ Открытый урок проходит в преддверии старта курса «Инфраструктура высоконагруженных систем». 👉 Для участия зарегистрируйтесь: https://otus.pw/DWub/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

☠️ Твой ControlMaster не работает? Исправляем ошибки и ускоряем SSH Тратишь время на авторизацию ради одной команды, а скрипты гоняешь через кривые конструкции? Многие мануалы содержат ошибки: передача команд через cat ломает кавычки, а ControlMaster=no убивает мультиплексирование. Держи 6 безопасных хаков для ускорения работы с SSH. Выполнение команд без сессии
# Выполнить одну команду и сразу отключиться (удобно для скриптов).
ssh user@host df -h

# Безопасное выполнение списка команд из локального файла.
# Вместо ломающего кавычки cat — кормим скрипт прямо в удалённый bash:
ssh user@host "bash -s" < commands.txt
Редактирование без входа на сервер
# Открыть удалённый файл в ЛОКАЛЬНОМ vim по scp. Требует плагина netrw (в комплекте vim).
# Обрати внимание на ДВА слеша: // = абсолютный путь от корня.
vim scp://user@host//etc/nginx/nginx.conf
Сравнение удалённого и локального конфига
# Сравниваем без скачивания. Дефис '-' заставляет diff читать ВТОРОЙ операнд
# из stdin (это вывод ssh). Порядок: слева локальный, справа удалённый.
ssh user@host cat /etc/nginx/nginx.conf | diff ./local_nginx.conf -
Проброс вывода в буфер обмена
# Выполняем команду на сервере и забираем результат в локальный буфер.
ssh user@host uname -a | xclip -selection clipboard
Монтирование сервера как флешки
# Ставим FUSE-драйвер файловой системы.
sudo apt-get install sshfs

# Монтируем удалённый каталог — работаем через обычные ls/cp.
# reconnect спасает сессию при обрыве связи.
sshfs user@host:/home/user ~/remote_files/ -o reconnect
Рабочее мультиплексирование (постоянное соединение) Если постоянно ходишь на одну машину, перестань тратить время на криптографическое рукопожатие при каждом коннекте.
# Добавь в ~/.ssh/config. Каталог для сокетов создай заранее:
#   mkdir -p ~/.ssh/sockets
# ВАЖНО: ControlMaster именно 'auto', иначе переиспользование не сработает.
Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%C
    ControlPersist 10m
Первое соединение откроет TCP-канал, а все последующие ssh, scp и sftp полетят через него мгновенно. Проверь свой ~/.ssh/config прямо сейчас на предмет вредных настроек! ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #SSH #DevOps #SysAdmin #Security

🎥 Вебинар по Kubernetes: K8S + Vault — как получать секреты? Как безопасно управлять чувствительными данными в Kubernetes-кл
🎥 Вебинар по Kubernetes: K8S + Vault — как получать секреты? Как безопасно управлять чувствительными данными в Kubernetes-кластере? На этом открытом уроке вы узнаете, как организовать надёжное и масштабируемое взаимодействие между Kubernetes и HashiCorp Vault — популярным инструментом для управления секретами. Мы разберёмся, почему стандартные Kubernetes-секреты не всегда комфортны для использования, какие риски существуют и как их можно минимизировать с помощью подхода dynamic secrets. Основное внимание будет уделено External Secrets Operator — инструменту, который позволяет безопасно забирать секреты из Vault (и других хранилищ) и интегрировать их в кластер. 📌 На уроке вы узнаете: - Как Kubernetes работает с секретами по умолчанию, и в чём его ограничения; - Какие существуют способы интеграции Kubernetes и Vault; - Что такое External Secrets Operator и почему его всё чаще выбирают для production-сред; - Пошаговая схема подключения Vault к K8s; - Практические примеры и best practices для безопасной и автоматизированной работы с секретами. 🎯 После вебинара вы: - Поймёте, какие уязвимости есть в стандартном механизме Kubernetes-секретов; - Сможете настроить интеграцию Vault с Kubernetes; - Узнаете, как использовать External Secrets Operator для безопасного управления секретами; - Получите шаблоны и примеры манифестов, которые можно адаптировать под свои проекты. ⚠️ Открытый урок проходит в преддверии старта курса «Инфраструктурная платформа на основе Kubernetes». 👉 Для участия зарегистрируйтесь: https://otus.pw/Glz8/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

☠️ Реплики плодятся и умирают? Траблшутинг Docker-кластера для мидлов Распределённые сервисы падают незаметно. Вчера работало три реплики, а сегодня нода отвалилась из-за нехватки памяти, и кластер бьётся в агонии. Показываю, как жёстко протестировать self-healing и дебажить мульти-нодовые сервисы прямо из терминала. Всё ниже — про Docker Swarm (не про обычный docker run). Срез состояния распределённого сервиса
# На каких нодах (NODE) запущены реплики сервиса web.
# Столбцы DESIRED STATE и CURRENT STATE сразу покажут зависшую или упавшую задачу.
docker service ps web
Имитация аппаратного сбоя (Failover)
# Мягко выводим ноду из балансировки — задачи переедут на живые узлы.
docker node update --availability drain worker-1

# Возвращаем ноду в строй (реплики сами обратно НЕ переедут — нужен ребаланс).
docker node update --availability active worker-1
Глобальная агрегация логов
# Логи со всех реплик на всех нодах в один поток.
# --raw убирает служебные префиксы Swarm, если нужен чистый вывод приложения.
docker service logs --follow --details web
Детальный дебаг умирающих реплик
# Надёжнее текстового grep — встроенный фильтр по состоянию задачи.
# Показывает именно завершённые/упавшие задачи, а колонка ERROR даёт причину.
docker service ps web --no-trunc --filter "desired-state=shutdown"

# Альтернатива через grep (работает, но чувствительна к регистру и формату):
docker service ps web --no-trunc | grep -i "failed"
Инспекция здоровья менеджеров
# Не рассинхронизировался ли Raft: доступность конкретного менеджера.
docker node inspect manager-1 --format '{{.ManagerStatus.Reachability}}'

# Кто сейчас лидер кластера (true = этот узел лидер).
docker node inspect manager-1 --format '{{.ManagerStatus.Leader}}'
> Подводные камни: > Если кворум менеджеров (Raft) потерян, воркеры продолжат обслуживать трафик, но управлять кластером ты не сможешь. Держи нечётное число менеджеров: 3 переживают падение 1, 5 — падение 2, 7 — падение 3. > docker logs работает только для локального контейнера на конкретной ноде. В кластере используй docker service logs. > Не тестируй отказоустойчивость убийством одного контейнера — Swarm просто перезапустит его на той же ноде. Имитируй падение узла целиком через drain. Держи кластер под жёстким контролем и тестируй failover раньше, чем это сделает боевой трафик. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Docker #DevOps #Swarm #SysAdmin

🎯 Настоящий хардкор. Автоматизация рутины в vim без плагинов Правишь сотни строк логов и конфигов руками? Использование vim как «блокнота» — преступление против твоего времени. Показываю встроенные механизмы: макросы, фильтры, внешние команды — чтобы редактор делал рутину за тебя. Макросы (запись и воспроизведение рутины) Vim умеет записать последовательность нажатий в именованный регистр и многократно её повторить.
# Начать запись макроса в регистр 'a'
qa
# ... выполняем любые действия редактирования ...
# Остановить запись
q
# Воспроизвести макрос из 'a' 50 раз подряд
50@a
# Повторить макрос до конца файла (не считая строки вручную):
:%normal @a
Глобальная замена с контекстом Команда :g находит строки по шаблону и выполняет в них замену или другую команду.
# В строках с "FIXME" заменить "timeout" на "resolved"
:g/FIXME/s/timeout/resolved/g
Интеграция с внешними bash-утилитами Текст из буфера можно прогнать через внешнюю команду, а вывод вставить на место старого.
# Отсортировать строки от текущей до конца файла через sort
:.,$!sort
# Заменить весь буфер выводом awk (печатаем вторую колонку)
:%!awk '{print $2}'
Чтение вывода консоли прямо в текст
# Вставить список файлов на строку НИЖЕ курсора
:r !ls -l
# Вставить текущую дату и время
:r !date
Собственные сокращения (аббревиатуры) Разворачиваются в режиме вставки, когда вводишь их как отдельное слово.
# "imrc" + пробел/Enter развернётся в полную фразу.
# Лучше iabbrev — срабатывает ТОЛЬКО в режиме вставки (ab цепляет и командную строку):
:iabbrev imrc International Materials Research Center
Переназначение клавиш (шорткаты) Для частых действий вешаем свою комбинацию. Используем nnoremap (нерекурсивный маппинг только для Normal-режима) и свободную клавишу — не затирай встроенные.
# Безопасно: пробел-лидер под "удалить слово под курсором и вставить из регистра".
# <leader> по умолчанию '\'. daw — delete-a-word, "0p — вставить из нулевого регистра.
:nnoremap <leader>d daw"0p
Добавь нужные аббревиатуры и маппинги в ~/.vimrc, чтобы они подхватывались при каждом запуске. Перестань делать рутину руками. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Vim #DevOps #SysAdmin #Automation

☠️ Твой скрипт не переживёт пробел в имени файла. 15 сниппетов для сеньоров Замечал, как рабочий скрипт внезапно затирает данные из-за пустой переменной или ломается от кривого переноса строки? Чтобы не краснеть за код перед коллегами, перестань использовать устаревшие конструкции. Держи 15 жёстких приёмов для неубиваемых скриптов. Защита от фатальных сбоев
# 1. Неофициальный строгий режим. Падение при первой ошибке,
# обращении к пустой переменной и ошибке внутри конвейера.
set -euo pipefail

# 2. Безопасная очистка мусора. Сработает даже при Ctrl+C (SIGINT).
TMP_DIR=$(mktemp -d)
trap 'rm -rf "$TMP_DIR"' EXIT

# 3. Статусы в конвейере. Обычный $? покажет только последнюю команду.
# PIPESTATUS хранит массив — обращайся ПО ИНДЕКСУ: [0], [1]...
cat /etc/passwd | grep -q missing_user
echo "Статус cat: ${PIPESTATUS[0]}, статус grep: ${PIPESTATUS[1]}"
Работа с переменными без sed и awk
# 4. Значение по умолчанию. Защищает от rm по пустому пути.
# ВАЖНО: при set -u скрипт и так упадёт на пустой TARGET — двойная защита.
rm -rf "${TARGET:-/tmp/fallback}/"*

# 5. Глобальная замена подстроки в памяти.
LOG="error db, error net"
echo "${LOG//error/warning}"

# 6. Косвенная адресация: чтение переменной по имени из другой переменной.
REAL_VAR="SecretKey"
POINTER="REAL_VAR"
echo "${!POINTER}"

# 7. Нативная замена basename и dirname (без вызова внешних утилит).
FILE="/var/log/syslog.gz"
echo "${FILE##*/}" # syslog.gz (срезано всё до последнего слеша)
echo "${FILE%/*}"  # /var/log  (срезано всё после последнего слеша)
Логика без костылей
# 8. Регулярки нативно (только в [[ ]], регулярку справа НЕ кавычим).
if [[ $1 =~ ^[0-9]+$ ]]; then
    echo "Передано число"
fi

# 9. Группа команд в текущем процессе (без subshell) — переменные сохраняются.
[[ -d /app ]] || { echo "Директории нет"; exit 1; }

# 10. Арифметика в стиле C. expr мёртв.
# ОСТОРОЖНО: под set -e постфиксный (( COUNT++ )) возвращает код 1, когда старое
# значение было 0, и убивает скрипт. Используй префиксную форму ++COUNT.
COUNT=5
(( ++COUNT ))
(( REMAINING = 100 - COUNT ))
Работа с файлами и потоками
# 11. Подстановка процессов: вывод команд туда, где ждут файлы.
diff -u <(ls -l /dir1) <(ls -l /dir2)

# 12. Here String: строка на stdin без лишнего echo | grep.
grep "critical" <<< "$LOG_DATA"

# 13. Эталонное построчное чтение: -r не трогает бэкслеши, IFS= хранит пробелы.
while IFS= read -r line; do
    echo "Строка: $line"
done < config.txt

# 14. Разбивка строки на переменные с локальной подменой разделителя.
USER_DATA="admin:x:1000"
IFS=":" read -r user pass uid <<< "$USER_DATA"

# 15. Совместное перенаправление stdout и stderr одним оператором.
/opt/scripts/deploy.sh &> /var/log/deploy.log
❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Bash #DevOps #Scripting #SysAdmin

☠️ Забыл флаг -a в usermod и сломал доступ? Учимся управлять группами Создание учёток кажется банальщиной, пока кто-то не затрёт списки групп кривым ключом или не оставит доступ уволенному подрядчику. Держи 15 команд для тотального контроля пользователей на проде. Создание и системные учётки

# 1. Эталонное создание пользователя (папка, оболочка, доп. группы).
# ВАЖНО: 'wheel' есть в RHEL/Fedora/Arch; в Debian/Ubuntu для sudo используй группу 'sudo'.
# Группа 'docker' появляется только после установки Docker — иначе useradd упадёт.
sudo useradd -m -s /bin/bash -G docker,sudo ivanov

# 2. Системный демон (без входа; -r не создаёт каталог, home лучше задать явно).
sudo useradd -r -s /usr/sbin/nologin -d /nonexistent nginx_worker

# 3. Дефолтные скелеты: содержимое /etc/skel копируется в /home новичку при -m.
ls -la /etc/skel/
Опасные игры с группами

# 4. Безопасное добавление в группу (-a обязательно, иначе -G затрёт все старые группы!)
sudo usermod -aG developers petrov

# 5. Исключение пользователя из одной конкретной группы (порядок: сначала USER, потом GROUP)
sudo gpasswd -d petrov developers

# 6. Запустить НОВЫЙ шелл с другой основной группой (выход — exit). Группу указывать обязательно.
newgrp developers

# 7. Создание системной группы с кастомным GID
sudo groupadd -r -g 555 appgroup
Пароли и жёсткие блокировки

# 8. Заставить сменить пароль при первом входе (last change = 0 => пароль просрочен).
sudo chage -d 0 ivanov

# 9. Жёсткая блокировка учётки (ставит ! перед хешем в /etc/shadow).
sudo usermod -L ivanov

# 10. Быстрая разблокировка (убирает ! из /etc/shadow).
sudo usermod -U ivanov

# 11. Отключение учётки по дате YYYY-MM-DD (идеально для внешних подрядчиков).
sudo usermod -e 2026-12-31 contract_user
Аудит и чистое удаление

# 12. Проверка passwd/shadow на синтаксис. Флаг -r = только чтение (ничего не меняет).
sudo pwck -r

# 13. Проверка файла групп на целостность (тоже -r для безопасного аудита).
sudo grpck -r

# 14. Чтение учёток через NSS (видит и локальных, и LDAP/AD пользователей).
getent passwd petrov

# 15. Полное удаление юзера вместе с домашней директорией и почтовым спулом.
sudo userdel -r ivanov
Никогда не забывай -a в связке с -G и прогоняй pwck после ручной правки системных файлов. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Security #SysAdmin #DevOps #Bash

📹Вебинар: Выбор между Serverless и Kubernetes для AI-ворклоадов: как определить оптимальную платформу под задачу На открытом
📹Вебинар: Выбор между Serverless и Kubernetes для AI-ворклоадов: как определить оптимальную платформу под задачу На открытом уроке рассмотрим: - В чем различаются Serverless-подходы и Kubernetes при работе с AI-ворклоадами; - Какие преимущества и ограничения есть у каждого подхода с точки зрения масштабируемости, стоимости и сложности эксплуатации; - Какие трейдоффы нужно учитывать при выборе платформы: холодный старт, управление состоянием, поддержка GPU; - Как обосновывать выбор архитектуры для разных AI-сценариев на практическом воркшопе. После занятия вы будете знать: - Как сравнивать Serverless и Kubernetes для различных AI-задач; - Как выбирать платформу оркестрации в зависимости от требований к нагрузке, бюджету и архитектуре решения; - Как учитывать ключевые технические ограничения при проектировании AI-инфраструктуры; - Как аргументированно обосновывать выбор платформы для задач масштабирования, потоковой обработки данных и построения гибридных сред. ⚠ Открытый урок проходит в преддверии старта курса «ИИ-архитектор». 👉 Для участия зарегистрируйтесь: https://vk.cc/cZyYcZ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

💣 Контейнер остался без сети? Дебажим трафик прямо с хоста Старый ifconfig давно устарел, а Docker строит сети поверх абстракций ядра, скрывая интерфейсы контейнеров. Понимание iproute2 и неймспейсов netns — граница между джуном и профи. Держи шпаргалку по управлению скрытыми сетями оркестраторов. Базовое управление интерфейсами хоста Пакет iproute2 заменяет зоопарк старых сетевых утилит.

# Показать все IP-адреса и интерфейсы (сокращение от 'ip address show').
# Флаг -c включает цветной вывод для удобного чтения.
ip -c a

# Погасить или поднять интерфейс (замена 'ifconfig eth0 down/up').
sudo ip link set dev eth0 down
sudo ip link set dev eth0 up

# Добавить дополнительный IP (алиас) на интерфейс на лету.
sudo ip addr add 10.0.0.5/24 dev eth0

# Удалить IP с интерфейса.
sudo ip addr del 10.0.0.5/24 dev eth0
Маршрутизация и таблица соседей

# Таблица маршрутизации ядра (замена 'route -n').
ip r

# Прописать шлюз по умолчанию.
sudo ip route add default via 192.168.1.1 dev eth0

# Таблица соседей: ARP для IPv4 и NDP для IPv6 (замена 'arp -n').
ip neigh show
Инспекция сетей Docker На дефолтном bridge контейнеры получают адреса из подсети docker0. Достаём IP без входа внутрь.

# ВАЖНО: .NetworkSettings.IPAddress пуст для user-defined сетей (docker-compose и т.п.).
# Надёжный способ — итерировать по .Networks (работает для ЛЮБОГО типа сети):
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container

# IP всех работающих контейнеров с именами и именем сети:
docker ps -q | while read id; do
  name=$(docker inspect -f '{{.Name}}' "$id" | tr -d '/')
  ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' "$id")
  echo "$name: $ip"
done
Дебаг неймспейсов: команды ip внутри контейнера с хоста Docker создаёт netns для каждого контейнера, но не кладёт симлинк в /var/run/netns, откуда его читает ip netns. Восстанавливаем симлинк вручную, чтобы дебажить сеть контейнера прямо с хоста.

# 1. Достаём главный PID контейнера.
export CPID=$(docker inspect -f '{{.State.Pid}}' my_container)

# 2. Создаём стандартный каталог для неймспейсов, если его нет.
sudo mkdir -p /var/run/netns

# 3. Пробрасываем netns контейнера туда, где его найдёт 'ip netns'.
sudo ln -s /proc/$CPID/ns/net /var/run/netns/my_container_ns

# 4. Теперь любые ip-команды выполняются В КОНТЕКСТЕ сети контейнера.
sudo ip netns exec my_container_ns ip a      # интерфейсы внутри контейнера
sudo ip netns exec my_container_ns ip r      # маршруты внутри контейнера

# 5. Убираем симлинк после отладки (rm, НЕ 'ip netns del' — иначе снесёт сам netns!).
sudo rm /var/run/netns/my_container_ns
Используй iproute2 в связке с сетевыми неймспейсами, чтобы траблшутить аномалии на самом низком уровне. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Docker #Networking #DevOps #SysAdmin

🔧 Хватит писать как джун. 15 хардкорных идиом Bash для профи Bash-скрипты кажутся простыми, пока не начинают молча ломать серверы из-за неэкранированных пробелов или проигнорированных ошибок в конвейерах. Держи 15 идиом, которые выведут твои скрипты на уровень Senior. Жёсткая защита и отладка

# 1. Неофициальный строгий режим bash.
# Падение при первой ошибке (-e), при обращении к необъявленной переменной (-u), и ошибка внутри конвейера не проглатывается (pipefail).
set -euo pipefail

# 2. Массив PIPESTATUS.
# В конвейере обычный $? покажет статус только ПОСЛЕДНЕЙ команды.
# PIPESTATUS хранит коды всех команд — ОБРАЩАЙСЯ ПО ИНДЕКСУ: ${PIPESTATUS[0]}, [1]...
cat /etc/passwd | grep -q root
echo "Статус cat: ${PIPESTATUS[0]}, статус grep: ${PIPESTATUS[1]}"

# 3. Безопасная очистка через trap.
# Временные файлы удалятся при любом выходе, включая Ctrl+C.
TMP_FILE=$(mktemp)
trap 'rm -f "$TMP_FILE"' EXIT
Подстановки переменных (без sed и awk)

# 4. Значение по умолчанию, если TARGET не задана или пуста.
cd "${TARGET:-/tmp}"

# 5. Глобальная замена подстрок в памяти (все вхождения).
LOG="system error, network error"
echo "${LOG//error/warning}"

# 6. Косвенные ссылки: читаем переменную, имя которой лежит в другой переменной.
REAL_VAR="SecretData"
POINTER="REAL_VAR"
echo "${!POINTER}"

# 7. Обрезка префикса/суффикса (замена basename и dirname).
FILEPATH="/var/log/syslog.tar.gz"
echo "${FILEPATH##*/}" # всё до последнего слеша срезано: syslog.tar.gz
echo "${FILEPATH%/*}"  # всё после последнего слеша срезано: /var/log
Логика и структуры

# 8. Регулярки прямо в условии (только в [[ ... ]], регулярку справа НЕ кавычим).
if [[ $1 =~ ^[0-9]+$ ]]; then
    echo "Аргумент состоит только из цифр"
fi

# 9. Группировка команд в ТЕКУЩЕМ процессе через { ... } (переменные сохраняются).
[[ -d /tmp/app ]] || { echo "Каталог не найден"; exit 1; }

# 10. Встроенная арифметика вместо мёртвого expr.
# ОСТОРОЖНО: под 'set -e' выражение (( x++ )) возвращает код 1, когда старое значение 0, и убивает скрипт. Используй префиксную форму ++COUNT или добавляй '|| true'.
COUNT=5
(( ++COUNT ))
(( REMAINING = 100 - COUNT ))
Потоки и дескрипторы

# 11. Подстановка процессов: вывод команд туда, где ждут ИМЕНА файлов.
diff -u <(ls -l /dir1) <(ls -l /dir2)

# 12. Here String: строка на stdin без лишнего процесса echo.
grep "critical" <<< "$LOG_DATA"

# 13. Правильное построчное чтение.
# -r запрещает трактовать бэкслеши, пустой IFS= сохраняет ведущие пробелы.
while IFS= read -r line; do
    echo "Прочитана строка: $line"
done < config.txt

# 14. Парсинг строки с локальной подменой IFS (только для этой команды read).
USER_INFO="root:x:0:0:root:/root:/bin/bash"
IFS=":" read -r user pass uid gid desc home shell <<< "$USER_INFO"

# 15. Совместное перенаправление stdout и stderr одним оператором.
/opt/scripts/backup.sh &> /var/log/backup.log
Внедряй эти идиомы, чтобы скрипты не зависели от внешних утилит и не падали на пустом месте. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Bash #DevOps #Scripting #SysAdmin

🔪 Режем права контейнеров: 10 неочевидных команд безопасности Docker Дефолтные настройки Docker оставляют большую поверхность атаки. Взлом приложения внутри контейнера без ограничений легко ведёт к компрометации хоста. Держи 10 параметров, которые жёстко изолируют продакшен. Контроль привилегий и эскалации
# 1. Тотальный сброс привилегий ядра (Capabilities).
# Сбрасываем все и выдаём только нужную для bind на порты <1024.
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE -d nginx

# 2. Блокировка эскалации через SUID/SGID бинарники (в Dockerfile).
# ВАЖНО: синтаксис '-perm /6000', а НЕ '+6000' (последний давно не работает в GNU find).
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true

# 3. Использование gosu вместо sudo в ENTRYPOINT.
# sudo плодит процессы и криво обрабатывает сигналы PID 1. gosu самоустраняется (exec).
exec gosu appuser "$@"
Изоляция файловой системы и ядра
# 4. Корневая ФС только для чтения; для записи монтируем именованный том.
# Атакующий не сможет скачать малварь или переписать скрипты в контейнере.
docker run --read-only --tmpfs /tmp -v /host/data:/app/data:rw -d myapp

# 5. Изоляция тома через SELinux (метка :Z).
# :Z = приватная метка ТОЛЬКО для этого контейнера (:z, строчная — общая для нескольких).
docker run -v /host/secret:/data:Z -d db_service

# 6. Кастомный профиль AppArmor (синтаксис через '=', а не ':').
# Профиль ДО этого нужно загрузить: sudo apparmor_parser -r -W /etc/apparmor.d/custom-nginx
docker run --security-opt apparmor=custom-nginx-profile -d nginx
Защита от отказа в обслуживании (DoS)
# 7. Лимит файловых дескрипторов (по дефолту на systemd-хостах ~1048576).
# Режет атаки, открывающие тысячи соединений/файлов.
docker run --ulimit nofile=1024:2048 -d backend_app

# 8. Жёсткий лимит RAM + запрет свопа.
# memory-swap = memory (256m=256m) означает СВОП ОТКЛЮЧЁН: утечка не выжрет своп хоста.
docker run -m 256m --memory-swap 256m -d heavy_service
Сеть и аутентичность образов
# 9. Отключение межконтейнерного обмена (ICC) — через daemon.json, НЕ /etc/default/docker.
# Файл /etc/docker/daemon.json:
#   { "icc": false, "iptables": true }
# Затем: sudo systemctl restart docker
# (старый DOCKER_OPTS в /etc/default/docker на systemd-хостах игнорируется)

# 10. Принудительная проверка подписей образов (Content Trust).
# Блокирует pull/run образов без валидной криптоподписи.
export DOCKER_CONTENT_TRUST=1
docker pull myorg/backend:latest
Интегрируй эти параметры в свои Compose-манифесты и пайплайны. Безопасность начинается с принципа наименьших привилегий. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Docker #Security #DevOps #SysAdmin

💀 Твой сервер светит реальным IP? Закрываем дыру через VPS и WAF Оставлять реальный IP сервера открытым — верный путь к взлому. Держи два хардкорных и бесплатных способа спрятать бэкенд и отбить атаки. Вариант 1: Туннель Netbird + Nginx на дешёвой VPS Покупаем самую слабую внешнюю VPS, поднимаем на ней Netbird и Nginx. Реальный сервер прячется хоть за 1000 NAT в домашнем Proxmox. Внешняя VPS принимает трафик и прокидывает его в защищённый туннель.
# /etc/nginx/sites-available/backend  (проверено парсером nginx)
upstream backend {
    server 100.64.0.5:8080;   # IP Proxmox-контейнера внутри сети Netbird
    keepalive 32;
}

server {
    listen 80;
    server_name myapp.ru;

    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;

        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # поддержка WebSocket
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_connect_timeout 60s;
        proxy_read_timeout    60s;
    }
}
Активация и проверка конфига перед перезапуском:
sudo ln -s /etc/nginx/sites-available/backend /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx   # nginx -t = обязательная проверка синтаксиса
Вариант 2: Внешняя VPS + Safeline WAF Перед приложением ставится комбайн Safeline: фильтрует трафик, режет ботов, спасает от SQLi, XSS, Command injection, Path traversal и RCE. Работает как reverse-proxy на движке Tengine с семантическим анализом. Быстрый старт Safeline одной командой (актуальный официальный установщик):
# manager.sh сам поставит Docker, скачает образы и поднимет весь стек
bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en
Ручной деплой (официальный способ — compose скачивается, а не пишется руками): Стек состоит из 6 контейнеров (postgres, fvm, detector, mgt, mario, tengine), поэтому compose берём готовый и настраиваем через .env:
# 1. Директория (нужно ≥5 ГБ)
sudo mkdir -p /data/safeline && cd /data/safeline

# 2. Официальный docker-compose (руками его собрать нельзя — сервисов много и они связаны)
sudo wget https://waf.chaitin.com/release/latest/compose.yaml

# 3. Файл окружения (пароль обязателен, иначе postgres не стартует)
sudo tee .env > /dev/null << 'EOF'
SAFELINE_DIR=/data/safeline
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD=CHANGE_ME_strong_password
SUBNET_PREFIX=172.22.222
IMAGE_PREFIX=chaitin
ARCH_SUFFIX=
RELEASE=
REGION=-g
EOF

# 4. Запуск
sudo docker compose up -d

# 5. Получить логин/пароль админа
sudo docker exec safeline-mgt resetadmin
Панель управления: https://<IP-твоей-VPS>:9443 ⚠️ На ARM-серверах меняй ARCH_SUFFIX=-arm; Personal Edition на ARM не работает — нужна Pro-лицензия. Внедряй эти подходы, чтобы не только анализировать трафик, но и на 100% скрывать IP своих приложений. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Security #WAF #Docker #DevOps

🎥 Вебинар: «Gitlab CI как конструктор workflow» Научитесь создавать эффективные и надежные пайплайны с помощью Gitlab CI О ч
🎥 Вебинар: «Gitlab CI как конструктор workflow» Научитесь создавать эффективные и надежные пайплайны с помощью Gitlab CI О чём поговорим: - Быстрый обзор Gitlab CI в сравнении с другими решениями. - Как использовать особенности Gitlab для улучшения работы команды. - Антипаттерны CI: обилие ручек, сабмодули и другие. - Идеальный пайплайн деплоя инфраструктуры по мнению автора. Что вы получите: - Вы получите понимание ключевых преимуществ Gitlab CI по сравнению с другими решениями. - Научитесь использовать возможности Gitlab для повышения производительности команды. - Избежите распространенных ошибок и антипаттернов в CI/CD. - Сможете создать идеальный пайплайн деплоя инфраструктуры, соответствующий лучшим практикам. 🧠 Вебинар проходит в преддверие старта курса «DevOps практики и инструменты». Зарегистрируйтесь сейчас и получите скидку на обучение. 👉 Для участия зарегистрируйтесь: https://otus.pw/Gb17/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

🔧 Укрощаем bash: 15 железобетонных функций для профи Самописные функции в конфигурации оболочки экономят часы рутины, но часто пишутся "на коленке" и падают с синтаксическими ошибками, если забыть передать им аргумент. Я собрал 15 убойных функций для твоего конфига и добавил в них жесткие проверки и значения по умолчанию. Забирай в продакшен. Навигация и управление файлами

# 1. Создать директорию и сразу в нее перейти
mkcd() {
  mkdir -p "$1" && cd "$1"
}

# 2. Подняться на N уровней вверх. Если аргумент не передан, поднимаемся на 1 (защита от syntax error)
up() {
  local d=""
  local limit="${1:-1}"
  for ((i=1; i<=limit; i++)); do d+="../"; done
  cd "$d"
}

# 3. Быстрый поиск файла по имени в текущей директории
ff() {
  find . -type f -iname "*$1*"
}

# 4. Быстрый поиск директории по имени
fd() {
  find . -type d -iname "*$1*"
}

# 5. Узнать размер директории. Если путь не передан, считаем текущую (.)
dirsize() {
  du -sh "${1:-.}"
}
Работа с процессами и историей

# 6. Найти процесс, отсекая из вывода сам grep
psg() {
  ps aux | grep -i "$1" | grep -v grep
}

# 7. Посмотреть N последних введенных команд (по умолчанию 10)
h() {
  history | tail -n "${1:-10}"
}

# 8. Быстрый поиск по истории команд
hg() {
  history | grep "$1"
}
Сеть и порты

# 9. Поднять HTTP-сервер в текущей папке (по умолчанию порт 8000)
serve() {
  python3 -m http.server "${1:-8000}"
}

# 10. Узнать свой внешний IP-адрес
myip() {
  curl -s ifconfig.me
}

# 11. Узнать IP-адрес нужного домена
ipinfo() {
  dig +short "$1"
}

# 12. Показать все открытые слушающие порты
ports() {
  ss -tuln
}
Система и безопасность

# 13. Полная очистка терминала вместе с буфером прокрутки
cls() {
  clear && printf '\e[3J'
}

# 14. Универсальная распаковка архива с проверкой существования файла
extract() {
  if [ -f "$1" ]; then
    case "$1" in
      *.tar.bz2|*.tbz2) tar xjf "$1" ;;
      *.tar.gz|*.tgz)   tar xzf "$1" ;;
      *.bz2)            bunzip2 "$1" ;;
      *.rar)            unrar x "$1" ;;
      *.gz)             gunzip "$1" ;;
      *.tar)            tar xf "$1" ;;
      *.zip)            unzip "$1" ;;
      *.7z)             7z x "$1" ;;
      *)                echo "Неизвестный архив" ;;
    esac
  else
    echo "Файл '$1' не найден"
  fi
}

# 15. Безопасный rm: защита от пустого вызова и регистронезависимое подтверждение (Y/y)
rm() {
  if [ -z "$1" ]; then
    command rm
    return
  fi
  ls -FCsd -- "$@"
  read -p 'Удалить безвозвратно? [y/N] ' ans
  if [[ "$ans" =~ ^[Yy]$ ]]; then
    command rm -rf -- "$@"
  fi
}
Все конструкции используют конструкцию ${1:-значение}, которая спасает bash от падения при пустых переменных. Добавь нужные блоки в свой файл конфигурации и выполни команду source ~/.bashrc для применения изменений. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Bash #CLI #DevOps #Bashrc

💀 Твой демон падает из-за изоляции? Учим AppArmor работать правильно Использование aa-disable или teardown для неработающего демона полностью снимает MAC-изоляцию на продакшене. Вместо выгрузки защиты мы переведем профиль в режим обучения, соберем реальные пути и вернем жесткий контроль. Помни: AppArmor привязывает правила к абсолютному пути бинарника, а не к меткам типов, как это делает SELinux. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #AppArmor #Security #Ubuntu #DevOps