cheatsheet_systemd_timer.png
1 MB
🕰 Твои скрипты падают в systemd? Идеальный конфиг .timer
Демоны systemd работают с сильно урезанным окружением $PATH. Из-за этого вызовы обычных утилит внутри сервисов часто падают без видимых причин. Показываю, как написать железобетонный конфиг таймера, защититься от шторма нагрузки и отловить синтаксические ошибки еще до деплоя.
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Systemd #DevOps #Timers #SysAdmin
Демоны systemd работают с сильно урезанным окружением $PATH. Из-за этого вызовы обычных утилит внутри сервисов часто падают без видимых причин. Показываю, как написать железобетонный конфиг таймера, защититься от шторма нагрузки и отловить синтаксические ошибки еще до деплоя.
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Systemd #DevOps #Timers #SysAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
cheatsheet_unshare.png
1 MB
📦 Ломаются зависимости при unshare? Настраиваем изоляцию как профи
Ошибки libc.so возникают, когда ты меняешь корень через chroot в пустую файловую систему без библиотек. Оставим ФС хоста на месте и изолируем только namespaces: все бинарники останутся доступны, а процессы и сеть будут в глухой песочнице.
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Namespaces #Containers #DevOps #SysAdmin
Ошибки libc.so возникают, когда ты меняешь корень через chroot в пустую файловую систему без библиотек. Оставим ФС хоста на месте и изолируем только namespaces: все бинарники останутся доступны, а процессы и сеть будут в глухой песочнице.
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Namespaces #Containers #DevOps #SysAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
cheatsheet_nftables.png
1.1 MB
🎯 Твой DROP пропускает пакеты? Исправляем фатальную ошибку лимитов nftables
Stateless-фаерволы сверяют каждый пакет со всем списком правил, сжигая ресурсы. Stateful-фаервол с conntrack помнит сессии и пропускает 99% трафика первым же правилом. Показываю, как написать эталонный конфиг и не попасть в ловушку лимитирования, из-за которой часть мусорного трафика пробивает твою защиту.
Перед применением policy drop без разрешающего правила SSH ты заблокируешь сам себя — сначала всегда прописывай свой доступ. Всегда держи второй открытый сеанс для отката и не забудь сделать
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Security #nftables #Firewall #DevOps
Stateless-фаерволы сверяют каждый пакет со всем списком правил, сжигая ресурсы. Stateful-фаервол с conntrack помнит сессии и пропускает 99% трафика первым же правилом. Показываю, как написать эталонный конфиг и не попасть в ловушку лимитирования, из-за которой часть мусорного трафика пробивает твою защиту.
Перед применением policy drop без разрешающего правила SSH ты заблокируешь сам себя — сначала всегда прописывай свой доступ. Всегда держи второй открытый сеанс для отката и не забудь сделать
systemctl enable nftables, чтобы защита пережила перезагрузку.👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Security #nftables #Firewall #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
cheatsheet_tar_incremental.png
1 MB
🎯 Инкрементные бэкапы без костылей: хардкорная шпаргалка по tar -g
Ежедневное создание полных архивов убивает дисковое пространство и перегружает подсистему ввода-вывода. Показываю, как собирать только измененные файлы и правильно отслеживать удаления, не копируя терабайты лишних данных.
Настрой инкрементное копирование, чтобы радикально снизить нагрузку на дисковую подсистему серверов.
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #Backup #Tar #DevOps #SysAdmin
Ежедневное создание полных архивов убивает дисковое пространство и перегружает подсистему ввода-вывода. Показываю, как собирать только измененные файлы и правильно отслеживать удаления, не копируя терабайты лишних данных.
Настрой инкрементное копирование, чтобы радикально снизить нагрузку на дисковую подсистему серверов.
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #Backup #Tar #DevOps #SysAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
cheatsheet_apparmor.png
1.1 MB
💀 Твой демон падает из-за изоляции? Учим AppArmor работать правильно
Использование aa-disable или teardown для неработающего демона полностью снимает MAC-изоляцию на продакшене. Вместо выгрузки защиты мы переведем профиль в режим обучения, соберем реальные пути и вернем жесткий контроль. Помни: AppArmor привязывает правила к абсолютному пути бинарника, а не к меткам типов, как это делает SELinux.
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #AppArmor #Security #Ubuntu #DevOps
Использование aa-disable или teardown для неработающего демона полностью снимает MAC-изоляцию на продакшене. Вместо выгрузки защиты мы переведем профиль в режим обучения, соберем реальные пути и вернем жесткий контроль. Помни: AppArmor привязывает правила к абсолютному пути бинарника, а не к меткам типов, как это делает SELinux.
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #AppArmor #Security #Ubuntu #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
🔧 Укрощаем bash: 15 железобетонных функций для профи
Самописные функции в конфигурации оболочки экономят часы рутины, но часто пишутся "на коленке" и падают с синтаксическими ошибками, если забыть передать им аргумент. Я собрал 15 убойных функций для твоего конфига и добавил в них жесткие проверки и значения по умолчанию. Забирай в продакшен.
Навигация и управление файлами
Работа с процессами и историей
Сеть и порты
Система и безопасность
Все конструкции используют конструкцию
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #CLI #DevOps #Bashrc
Самописные функции в конфигурации оболочки экономят часы рутины, но часто пишутся "на коленке" и падают с синтаксическими ошибками, если забыть передать им аргумент. Я собрал 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
💀 Твой сервер светит реальным IP? Закрываем дыру через VPS и WAF
Оставлять реальный IP сервера открытым — верный путь к взлому. Держи два хардкорных и бесплатных способа спрятать бэкенд и отбить атаки.
Вариант 1: Туннель Netbird + Nginx на дешёвой VPS
Покупаем самую слабую внешнюю VPS, поднимаем на ней Netbird и Nginx. Реальный сервер прячется хоть за 1000 NAT в домашнем Proxmox. Внешняя VPS принимает трафик и прокидывает его в защищённый туннель.
Активация и проверка конфига перед перезапуском:
Вариант 2: Внешняя VPS + Safeline WAF
Перед приложением ставится комбайн Safeline: фильтрует трафик, режет ботов, спасает от SQLi, XSS, Command injection, Path traversal и RCE. Работает как reverse-proxy на движке Tengine с семантическим анализом.
Быстрый старт Safeline одной командой (актуальный официальный установщик):
Ручной деплой (официальный способ — compose скачивается, а не пишется руками):
Стек состоит из 6 контейнеров (postgres, fvm, detector, mgt, mario, tengine), поэтому compose берём готовый и настраиваем через
Панель управления:
⚠️ На ARM-серверах меняй
Внедряй эти подходы, чтобы не только анализировать трафик, но и на 100% скрывать IP своих приложений.
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Security #WAF #Docker #DevOps
Оставлять реальный 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🔪 Режем права контейнеров: 10 неочевидных команд безопасности Docker
Дефолтные настройки Docker оставляют большую поверхность атаки. Взлом приложения внутри контейнера без ограничений легко ведёт к компрометации хоста. Держи 10 параметров, которые жёстко изолируют продакшен.
Контроль привилегий и эскалации
Изоляция файловой системы и ядра
Защита от отказа в обслуживании (DoS)
Сеть и аутентичность образов
Интегрируй эти параметры в свои Compose-манифесты и пайплайны. Безопасность начинается с принципа наименьших привилегий.
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Docker #Security #DevOps #SysAdmin
Дефолтные настройки 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🔧 Хватит писать как джун. 15 хардкорных идиом Bash для профи
Bash-скрипты кажутся простыми, пока не начинают молча ломать серверы из-за неэкранированных пробелов или проигнорированных ошибок в конвейерах. Держи 15 идиом, которые выведут твои скрипты на уровень Senior.
Жёсткая защита и отладка
Подстановки переменных (без sed и awk)
Логика и структуры
Потоки и дескрипторы
Внедряй эти идиомы, чтобы скрипты не зависели от внешних утилит и не падали на пустом месте.
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #DevOps #Scripting #SysAdmin
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
💣 Контейнер остался без сети? Дебажим трафик прямо с хоста
Старый
Базовое управление интерфейсами хоста
Пакет
Маршрутизация и таблица соседей
Инспекция сетей Docker
На дефолтном bridge контейнеры получают адреса из подсети
Дебаг неймспейсов: команды ip внутри контейнера с хоста
Docker создаёт netns для каждого контейнера, но не кладёт симлинк в
Используй
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Docker #Networking #DevOps #SysAdmin
Старый
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
📹Вебинар: Выбор между Serverless и Kubernetes для AI-ворклоадов: как определить оптимальную платформу под задачу
На открытом уроке рассмотрим:
- В чем различаются Serverless-подходы и Kubernetes при работе с AI-ворклоадами;
- Какие преимущества и ограничения есть у каждого подхода с точки зрения масштабируемости, стоимости и сложности эксплуатации;
- Какие трейдоффы нужно учитывать при выборе платформы: холодный старт, управление состоянием, поддержка GPU;
- Как обосновывать выбор архитектуры для разных AI-сценариев на практическом воркшопе.
После занятия вы будете знать:
- Как сравнивать Serverless и Kubernetes для различных AI-задач;
- Как выбирать платформу оркестрации в зависимости от требований к нагрузке, бюджету и архитектуре решения;
- Как учитывать ключевые технические ограничения при проектировании AI-инфраструктуры;
- Как аргументированно обосновывать выбор платформы для задач масштабирования, потоковой обработки данных и построения гибридных сред.
⚠ Открытый урок проходит в преддверии старта курса «ИИ-архитектор».
👉 Для участия зарегистрируйтесь: https://vk.cc/cZyYcZ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
На открытом уроке рассмотрим:
- В чем различаются Serverless-подходы и Kubernetes при работе с AI-ворклоадами;
- Какие преимущества и ограничения есть у каждого подхода с точки зрения масштабируемости, стоимости и сложности эксплуатации;
- Какие трейдоффы нужно учитывать при выборе платформы: холодный старт, управление состоянием, поддержка GPU;
- Как обосновывать выбор архитектуры для разных AI-сценариев на практическом воркшопе.
После занятия вы будете знать:
- Как сравнивать Serverless и Kubernetes для различных AI-задач;
- Как выбирать платформу оркестрации в зависимости от требований к нагрузке, бюджету и архитектуре решения;
- Как учитывать ключевые технические ограничения при проектировании AI-инфраструктуры;
- Как аргументированно обосновывать выбор платформы для задач масштабирования, потоковой обработки данных и построения гибридных сред.
⚠ Открытый урок проходит в преддверии старта курса «ИИ-архитектор».
👉 Для участия зарегистрируйтесь: https://vk.cc/cZyYcZ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
☠️ Забыл флаг -a в usermod и сломал доступ? Учимся управлять группами
Создание учёток кажется банальщиной, пока кто-то не затрёт списки групп кривым ключом или не оставит доступ уволенному подрядчику. Держи 15 команд для тотального контроля пользователей на проде.
Создание и системные учётки
Опасные игры с группами
Пароли и жёсткие блокировки
Аудит и чистое удаление
Никогда не забывай
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Security #SysAdmin #DevOps #Bash
Создание учёток кажется банальщиной, пока кто-то не затрёт списки групп кривым ключом или не оставит доступ уволенному подрядчику. Держи 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
☠️ Твой скрипт не переживёт пробел в имени файла. 15 сниппетов для сеньоров
Замечал, как рабочий скрипт внезапно затирает данные из-за пустой переменной или ломается от кривого переноса строки? Чтобы не краснеть за код перед коллегами, перестань использовать устаревшие конструкции. Держи 15 жёстких приёмов для неубиваемых скриптов.
Защита от фатальных сбоев
Работа с переменными без sed и awk
Логика без костылей
Работа с файлами и потоками
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #DevOps #Scripting #SysAdmin
Замечал, как рабочий скрипт внезапно затирает данные из-за пустой переменной или ломается от кривого переноса строки? Чтобы не краснеть за код перед коллегами, перестань использовать устаревшие конструкции. Держи 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🎯 Настоящий хардкор. Автоматизация рутины в vim без плагинов
Правишь сотни строк логов и конфигов руками? Использование vim как «блокнота» — преступление против твоего времени. Показываю встроенные механизмы: макросы, фильтры, внешние команды — чтобы редактор делал рутину за тебя.
Макросы (запись и воспроизведение рутины)
Vim умеет записать последовательность нажатий в именованный регистр и многократно её повторить.
Глобальная замена с контекстом
Команда
Интеграция с внешними bash-утилитами
Текст из буфера можно прогнать через внешнюю команду, а вывод вставить на место старого.
Чтение вывода консоли прямо в текст
Собственные сокращения (аббревиатуры)
Разворачиваются в режиме вставки, когда вводишь их как отдельное слово.
Переназначение клавиш (шорткаты)
Для частых действий вешаем свою комбинацию. Используем
Добавь нужные аббревиатуры и маппинги в
❗️ ❗️ ❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Vim #DevOps #SysAdmin #Automation
Правишь сотни строк логов и конфигов руками? Использование 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2