Иногда на диске копятся одинаковые файлы — архивы, фото, бэкапы. rdfind помогает находить такие дубликаты по содержимому, а не только по имени.
Как работает:
1.Сначала сортирует файлы по размеру.
2. Сверяет первые и последние байты.
3. Проверяет контрольные суммы.
4. Находит клоны и решает, какой оставить «оригиналом».
Примеры:
# Поиск дубликатов в папке ~/Documents
# Ничего не удаляет — только отчёт
rdfind -dryrun true ~/Documents
# Ищет дубликаты в ~/Pictures и заменяет их на hardlink-и
rdfind -makehardlinks true ~/Pictures
Удаление дублей:
rdfind -deleteduplicates true ~/Downloads
Лучшее применение: чистка фотоархивов, бэкапов, NAS-хранилищ. Сначала тестируйте в dry-run, а потом смело освобождайте гигабайты.
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
💻 Docker теперь запускает целые ОС
Обычно для тестов разных ОС нужны виртуалки, отдельные сервера или dual-boot. Но есть трюк: через Docker можно поднять полноценную систему буквально одной командой.
Контейнер запускается в
Пример для Windows:
Через пару минут вы получаете рабочий десктоп.
🐸 Библиотека devops'a
#root@prompt
Обычно для тестов разных ОС нужны виртуалки, отдельные сервера или dual-boot. Но есть трюк: через Docker можно поднять полноценную систему буквально одной командой.
Контейнер запускается в
--privileged режиме и внутри поднимает виртуалку. Подключение к системе идёт через VNC или прямо из браузера.Пример для Windows:
docker run --privileged -d -p 5999:5999 --name my-win-vm dockur/windows
Через пару минут вы получаете рабочий десктоп.
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🚑 Как проверить, жив ли сервис в Kubernetes за одну команду
Обычно, чтобы понять, доступен ли сервис внутри кластера, приходится делать port-forward или искать под с установленным curl. Но есть более короткий путь:
👉 А вы чаще используете для диагностики kubectl exec, port-forward или держите отдельный debug-pod?
🐸 Библиотека devops'a
#root@prompt
Обычно, чтобы понять, доступен ли сервис внутри кластера, приходится делать port-forward или искать под с установленным curl. Но есть более короткий путь:
kubectl run curl --rm -it --image=alpine/curl -- -sS myservice.default:8443
👉 А вы чаще используете для диагностики kubectl exec, port-forward или держите отдельный debug-pod?
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
☸️ Kubernetes Cleanup — когда кластер захламился
Иногда после тестов или экспериментов проще всё удалить и обнулить кластер, чем вычищать ресурсы по одному.
Удалить все ресурсы в namespace:
Удалить все ресурсы во всех namespace’ах:
Очистить хвосты — ConfigMap, Secrets, PVC, Jobs и т.п:
Удалить все namespace’ы кроме системных:
🐸 Библиотека devops'a
#root@prompt
Иногда после тестов или экспериментов проще всё удалить и обнулить кластер, чем вычищать ресурсы по одному.
Удалить все ресурсы в namespace:
kubectl delete all --all -n <namespace>
Удалить все ресурсы во всех namespace’ах:
kubectl delete all --all --all-namespaces
Очистить хвосты — ConfigMap, Secrets, PVC, Jobs и т.п:
kubectl delete configmap,secret,pvc,pv,job,cronjob --all --all-namespaces
Удалить все namespace’ы кроме системных:
for ns in $(kubectl get ns --no-headers | awk '!/kube-system|kube-public|kube-node-lease|default/ {print $1}'); do
kubectl delete ns $ns
done#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Разбор изменений скриптов и быстрая интеграция pull request-ов — часть ежедневной рутины. Классические diff-утилиты путаются в кавычках, списках и многострочных изменениях, а ручное разрешение конфликтов чаще раздражает, чем помогает.
Difftastic — это инструмент для сравнения файлов, созданный специально для разработчиков, которым важны не просто различия на уровне строк, а осмысленные изменения в коде.
Он построен на базе tree-sitter — парсера, поддерживающего десятки языков программирования, и анализирует файлы на уровне синтаксиса.
Пример использования:
difft simple_1.js simple_2.js
или для git:
difft git main feature-branch
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Kubernetes делает обновления приложений безопасными благодаря механизму непрерывных обновлений (rolling updates). Это значит, что ваш сервис продолжает работать во время обновления — новые версии запускаются постепенно, а старые останавливаются только после успешного запуска новых.
Как обновить приложение
Обновите образ контейнера командой:
kubectl set image deployment/my-deployment nginx=nginx:1.21
Проверьте, как идёт обновление:
kubectl rollout status deployment my-deployment
Kubernetes хранит историю развёртываний. Откатиться к предыдущей версии очень просто:
kubectl rollout undo deployment my-deployment
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🌐 Балансировка нагрузки в Nginx
Nginx предоставляет несколько алгоритмов распределения трафика между серверами. Каждый метод решает конкретные задачи и подходит для разных сценариев.
• Round Robin
Запросы поступают на серверы по очереди. Это стандартный метод, который не требует дополнительных директив.
• Least Connections
Новый запрос направляется на сервер с наименьшим количеством активных подключений. Nginx автоматически отслеживает нагрузку.
• IP Hash
Запросы от одного IP-адреса всегда попадают на один и тот же backend-сервер. Обеспечивает сохранение сессий без дополнительной синхронизации.
• Weight
Более производительные серверы получают больше запросов пропорционально указанному весу.
Совет: методы можно комбинировать с параметрами
🐸 Библиотека devops'a
#root@prompt
Nginx предоставляет несколько алгоритмов распределения трафика между серверами. Каждый метод решает конкретные задачи и подходит для разных сценариев.
• Round Robin
Запросы поступают на серверы по очереди. Это стандартный метод, который не требует дополнительных директив.
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}• Least Connections
Новый запрос направляется на сервер с наименьшим количеством активных подключений. Nginx автоматически отслеживает нагрузку.
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}• IP Hash
Запросы от одного IP-адреса всегда попадают на один и тот же backend-сервер. Обеспечивает сохранение сессий без дополнительной синхронизации.
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}• Weight
Более производительные серверы получают больше запросов пропорционально указанному весу.
upstream backend {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=1;
}Совет: методы можно комбинировать с параметрами
max_fails и fail_timeout для автоматического исключения недоступных серверов из балансировки.#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1
На проде что-то сломалось. Первое что нужно — посмотреть свежие ошибки.
journalctl --since "1 hour ago" | grep -i error
Вытаскивает все записи с ошибками за нужный промежуток. Можно изменить период: «10 minutes ago», «2 hours ago», «today».
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Правило №1: Никогда не хардкодьте секреты. Инфраструктурный код — это тоже код, и к нему применяются те же правила безопасности.
Плохой пример:
resource "aws_db_instance" "database" {
password = "notasecurepassword"
}Правильный подход:
1. Объявляем переменную в variables.tf:
variable "db_password" {
type = string
}2. Создаем secrets.tfvars:
db_password = "insecurepassword"
3. Используем переменную:
resource "aws_db_instance" "database" {
password = var.db_password
}Не забудьте добавить
secrets.tfvars в .gitignoreНо это только первый шаг. Хранить секреты в файлах — всё ещё не лучшее решение.
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2