mtr vs traceroute: анализ сетевых маршрутов
Когда нужно диагностировать сетевые проблемы, чаще всего используют
▪️ traceroute - классический анализ маршрута
traceroute показывает последовательность узлов, через которые проходит пакет до цели.
📌 Показывает только один запуск, без динамики.
▪️ mtr - интерактивный анализ сети
mtr комбинирует traceroute и ping, предоставляя динамическое обновление маршрута.
📌 Отличия от traceroute:
Постоянно обновляет данные (динамический анализ).
Показывает потерю пакетов (Loss%), среднее и максимальное время отклика (Avg, Wrst).
Удобно для выявления нестабильных узлов.
💡 Когда использовать?
traceroute - если нужен единоразовый снимок маршрута.
mtr - если важно видеть динамику и выявить нестабильные узлы.
BashTex📱 #linux #networks
Когда нужно диагностировать сетевые проблемы, чаще всего используют
traceroute или mtr. Оба инструмента помогают определить путь пакетов до целевого хоста, но mtr значительно превосходит traceroute по функциональности. Разберем различия.traceroute показывает последовательность узлов, через которые проходит пакет до цели.
traceroute bashtex.com
1 192.168.1.1 (192.168.1.1) 1.234 ms 1.567 ms 1.678 ms
2 10.0.0.1 (10.0.0.1) 2.345 ms 2.678 ms 2.789 ms
3 203.0.113.1 (203.0.113.1) 10.345 ms 11.456 ms 12.567 ms
mtr комбинирует traceroute и ping, предоставляя динамическое обновление маршрута.
mtr bashtex.com
HOST: myhost Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.1.1 0.0% 10 1.2 1.3 1.0 1.5 0.2
2.|-- 10.0.0.1 0.0% 10 2.4 2.5 2.2 3.0 0.3
3.|-- 203.0.113.1 10.0% 10 10.4 11.2 10.0 13.5 1.2
Постоянно обновляет данные (динамический анализ).
Показывает потерю пакетов (Loss%), среднее и максимальное время отклика (Avg, Wrst).
Удобно для выявления нестабильных узлов.
traceroute - если нужен единоразовый снимок маршрута.
mtr - если важно видеть динамику и выявить нестабильные узлы.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19🫡7👍1🔥1
Масштабируемое развертывание приложений с Bash и Docker
😎 Основная идея:
Проверять текущую загрузку CPU/памяти
Автоматически запускать дополнительные контейнеры при высокой нагрузке
Останавливать лишние контейнеры при снижении нагрузки
▪️ Bash-скрипт для масштабирования
⚙️ Как использовать?
1. Сохраните скрипт, например, как
2. Сделайте его исполняемым:
3. Настройте запуск через cron (например, каждые 5 минут):
Добавьте строку:
🏳️ Что получаем:
При нагрузке выше 70% добавляются контейнеры
При снижении нагрузки контейнеры удаляются
Управление происходит автоматически
BashTex📱 #bash
Проверять текущую загрузку CPU/памяти
Автоматически запускать дополнительные контейнеры при высокой нагрузке
Останавливать лишние контейнеры при снижении нагрузки
#!/bin/bash
APP_NAME="myapp"
IMAGE="myapp_image"
LIMIT=70 # Порог загрузки CPU в процентах
MAX_CONTAINERS=5
# Получаем текущую загрузку CPU
CPU_LOAD=$(awk '{print $1}' <(grep 'cpu ' /proc/stat | awk '{print ($2+$4)*100/($2+$4+$5)}'))
# Получаем текущее количество запущенных контейнеров
RUNNING_CONTAINERS=$(docker ps -q -f "name=$APP_NAME" | wc -l)
if (( $(echo "$CPU_LOAD > $LIMIT" | bc -l) )); then
if (( RUNNING_CONTAINERS < MAX_CONTAINERS )); then
echo "Высокая нагрузка ($CPU_LOAD%). Запускаем новый контейнер..."
docker run -d --name "$APP_NAME-$RUNNING_CONTAINERS" $IMAGE
else
echo "Достигнут лимит контейнеров ($MAX_CONTAINERS)."
fi
else
if (( RUNNING_CONTAINERS > 1 )); then
STOP_CONTAINER=$(docker ps -q -f "name=$APP_NAME" | tail -n 1)
echo "Нагрузка низкая ($CPU_LOAD%). Останавливаем контейнер $STOP_CONTAINER..."
docker stop $STOP_CONTAINER && docker rm $STOP_CONTAINER
fi
fi
1. Сохраните скрипт, например, как
autoscale.sh2. Сделайте его исполняемым:
chmod +x autoscale.sh
3. Настройте запуск через cron (например, каждые 5 минут):
crontab -e
Добавьте строку:
*/5 * * * * /path/to/autoscale.sh >> /var/log/autoscale.log 2>&1
При нагрузке выше 70% добавляются контейнеры
При снижении нагрузки контейнеры удаляются
Управление происходит автоматически
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🫡1
Автоматическое монтирование сетевых папок при загрузке системы
Если вам нужно подключать сетевые папки автоматически при старте системы, лучше всего использовать /etc/fstab или systemd automount. Разберем оба способа.
1️⃣ Использование /etc/fstab. Добавьте строку в
⚠️ После изменения /etc/fstab примените команду:
2️⃣ Автоматическое монтирование через systemd. Создайте юнит
Затем включите монтирование:
💡 Какой способ выбрать?
fstab - если подключение постоянно и предсказуемо
systemd - если нужна гибкость и управление через systemctl
BashTex📱 #linux #utils
Если вам нужно подключать сетевые папки автоматически при старте системы, лучше всего использовать /etc/fstab или systemd automount. Разберем оба способа.
/etc/fstab, чтобы система монтировала папку при загрузке:
//192.168.1.100/share /mnt/share cifs username=user,password=pass,iocharset=utf8,_netdev 0 0
//192.168.1.100/share - путь к папке на сервере
/mnt/share - локальная точка монтирования
cifs - используемый протокол (для Windows/Samba)
_netdev - монтирование после установки сети
mount -a
/etc/systemd/system/mnt-share.mount:
[Unit]
Denoscription=Автоматическое монтирование сетевой папки
After=network-online.target
[Mount]
What=//192.168.1.100/share
Where=/mnt/share
Type=cifs
Options=username=user,password=pass,iocharset=utf8
[Install]
WantedBy=multi-user.target
Затем включите монтирование:
systemctl daemon-reload
systemctl enable --now mnt-share.mount
fstab - если подключение постоянно и предсказуемо
systemd - если нужна гибкость и управление через systemctl
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥1
Создание зашифрованных контейнеров с cryptsetup и LUKS
LUKS (Linux Unified Key Setup) + cryptsetup позволяют создавать зашифрованные контейнеры, доступ к которым можно получить только после ввода пароля.
📦 Что можно хранить в зашифрованном контейнере?
🔹 Личные файлы и документы
🔹 Бэкапы с конфиденциальными данными
🔹 Временные файлы, которые нужно удалять без следов
🧑💻 Создание зашифрованного контейнера
1️⃣ Создаем файл-контейнер. Допустим, нам нужен контейнер размером 1 ГБ:
2️⃣ Настраиваем LUKS-шифрование
⚠️ Важно: Этот шаг удалит все данные в файле!
При появлении запроса укажите сложный пароль для доступа к контейнеру.
3️⃣ Открываем зашифрованный контейнер
Теперь в системе появился виртуальный шифрованный диск
4️⃣ Форматируем в файловую систему
5️⃣ Монтируем и используем
Теперь файлы, скопированные в
🚫 Отключение контейнера. Чтобы отключить зашифрованный диск:
🏠 Автоматическое подключение по паролю. Можно хранить ключ для автоматического подключения в файле:
Теперь можно открыть контейнер без ввода пароля:
BashTex📱 #linux #security
LUKS (Linux Unified Key Setup) + cryptsetup позволяют создавать зашифрованные контейнеры, доступ к которым можно получить только после ввода пароля.
dd if=/dev/zero of=secure.img bs=1M count=1024
cryptsetup luksFormat secure.img
При появлении запроса укажите сложный пароль для доступа к контейнеру.
cryptsetup luksOpen secure.img secure_container
Теперь в системе появился виртуальный шифрованный диск
/dev/mapper/secure_container.
mkfs.ext4 /dev/mapper/secure_container
mkdir /mnt/secure
mount /dev/mapper/secure_container /mnt/secure
Теперь файлы, скопированные в
/mnt/secure, будут автоматически зашифрованы.
umount /mnt/secure
cryptsetup luksClose secure_container
dd if=/dev/random of=/root/luks.key bs=1 count=256
chmod 600 /root/luks.key
cryptsetup luksAddKey secure.img /root/luks.key
Теперь можно открыть контейнер без ввода пароля:
cryptsetup luksOpen secure.img secure_container --key-file /root/luks.key
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5
Скрипт автоматического создания и удаления временных файлов
Временные файлы нужны для логов, кэша и промежуточных вычислений, но если их не удалять – они засоряют систему. Сегодня про то, как автоматизировать их создание и удаление с помощью Bash и
➕ Создание временных файлов и директорий. Используем mktemp:
Или создаем временную папку:
📂 Автоматическое удаление.
👩🎨 Скрипт для очистки старых временных файлов. Удалим файлы старше 1 дня в /tmp:
Для папок:
🤖 Добавим в crontab ежедневную очистку
В 3 часа ночи старые временные файлы будут автоматически удаляться.
BashTex📱 #bash #utils
Временные файлы нужны для логов, кэша и промежуточных вычислений, но если их не удалять – они засоряют систему. Сегодня про то, как автоматизировать их создание и удаление с помощью Bash и
mktemp.
TEMP_FILE=$(mktemp)
echo "Временный файл: $TEMP_FILE"
Или создаем временную папку:
TEMP_DIR=$(mktemp -d)
echo "Временная папка: $TEMP_DIR"
trap удалит временные файлы при завершении скрипта:
#!/bin/bash
TEMP_FILE=$(mktemp)
trap "rm -f $TEMP_FILE" EXIT
echo "Создан временный файл: $TEMP_FILE"
sleep 5 # Эмуляция работы скрипта
trap выполняет rm -f $TEMP_FILE при завершении скрипта – даже если он аварийно прерван.
find /tmp -type f -mtime +1 -delete
Для папок:
find /tmp -type d -empty -mtime +1 -exec rmdir {} \;
/tmp:
0 3 * * * find /tmp -type f -mtime +1 -delete
В 3 часа ночи старые временные файлы будут автоматически удаляться.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17🫡1
stdbuf - отключение буферизации вывода в командах
Когда выполняешь команды в терминале, их вывод иногда задерживается из-за буферизации. Это мешает при логировании, мониторинге в реальном времени и пайпах.
🚪 Как отключить буферизацию? Запустим ping, но без задержек в выводе:
-oL - отключает буферизацию вывода (line-buffered mode). Теперь каждая строка появляется сразу.
❌ Для ошибок (stderr):
👀 Использование с пайпами. Некоторые команды задерживают вывод в пайпах. Например, grep в цепочке:
Ничего не показывает? Это из-за буферизации! Исправляем:
⚡️ Полезные примеры
1️⃣ Логирование в реальном времени
2️⃣ Скрипт без задержек в выводе
-o0 полностью отключает буферизацию.
3️⃣ Буферизация при вводе
Позволяет мгновенно обрабатывать ввод/вывод.
BashTex📱 #bash #utils
Когда выполняешь команды в терминале, их вывод иногда задерживается из-за буферизации. Это мешает при логировании, мониторинге в реальном времени и пайпах.
stdbuf решает эту проблему, управляя буферизацией стандартного ввода, вывода и ошибок.
stdbuf -oL ping 8.8.8.8
-oL - отключает буферизацию вывода (line-buffered mode). Теперь каждая строка появляется сразу.
stdbuf -eL some_command
ping 8.8.8.8 | grep "time="
Ничего не показывает? Это из-за буферизации! Исправляем:
ping 8.8.8.8 | stdbuf -oL grep "time="
stdbuf -oL tail -f /var/log/syslog | grep "error"
#!/bin/bash
stdbuf -o0 my_noscript.sh
-o0 полностью отключает буферизацию.
stdbuf -i0 -o0 -e0 cat
Позволяет мгновенно обрабатывать ввод/вывод.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13😁11🎅4👨💻1🫡1🎄1
Вывод списка установленных пакетов по дате
Хочешь узнать, какие пакеты и когда были установлены в системе? В Ubuntu это можно сделать с помощью
✅ Базовый способ. Чтобы получить список всех установленных пакетов с датой их установки, используй:
Этот лог содержит записи о каждом установленном или обновлённом пакете.
🗯 Вывод с сортировкой. Если нужен полный список с датами и сортировкой:
$1 - дата установки
$2 - имя пакета
sort упорядочивает по дате
Пример вывода:
📌 Фильтр по определённому дню. Допустим, надо узнать, что было установлено 3 февраля 2025 года:
📂 Вывод списка недавно установленных пакетов
BashTex📱 #bash #utils
Хочешь узнать, какие пакеты и когда были установлены в системе? В Ubuntu это можно сделать с помощью
dpkg и awk.
grep " install " /var/log/dpkg.log
Этот лог содержит записи о каждом установленном или обновлённом пакете.
awk '$3 == "install" {print $1, $2}' /var/log/dpkg.log | sort
$1 - дата установки
$2 - имя пакета
sort упорядочивает по дате
Пример вывода:
2025-03-01 coreutils
2025-03-02 openssh-server
2025-03-04 htop
grep "2025-02-03" /var/log/dpkg.log | grep "install"
zgrep " install " /var/log/dpkg.log* | tail -20
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥3👨💻3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15
Динамическое ограничение ресурсов для процессов с cgroups
Когда процесс начинает пожирать всю CPU или RAM, система может начать тормозить.🐢 Но есть способ держать всё под контролем -
📌
Применение:
⚙️ Простая настройка cgroups
1️⃣ Проверяем поддержку cgroups:
Если вывод есть - поддержка включена
2️⃣ Создаём группу и ограничиваем процесс. Создадим новую группу и ограничим процесс по CPU и RAM:
cgroup.procs - добавляем текущий процесс
cpu.max - ограничение CPU
memory.max - ограничение RAM
🔢 Применение на практике. Допустим, у тебя есть скрипт, который загружает процессор:
Чтобы он не съел всю систему, запускаем его в cgroups:
Теперь процесс работает в ограниченной среде и не забивает ресурсы.
👀 Мониторинг нагрузки. Можно проверить использование CPU и памяти группой:
BashTex📱 #bash #utils
Когда процесс начинает пожирать всю CPU или RAM, система может начать тормозить.
cgroups.cgroups (Control Groups) — механизм ядра Linux, который позволяет ограничивать, учитывать и изолировать ресурсы (CPU, RAM, сеть) для процессов.Применение:
Ограничение потребления ресурсов процессами
Контроль за службами и контейнерами
Создание "огороженных" сред для тестирования
mount | grep cgroup
Если вывод есть - поддержка включена
sudo mkdir /sys/fs/cgroup/mygroup
echo $$ | sudo tee /sys/fs/cgroup/mygroup/cgroup.procs
echo 50000 | sudo tee /sys/fs/cgroup/mygroup/cpu.max
echo 100M | sudo tee /sys/fs/cgroup/mygroup/memory.max
cgroup.procs - добавляем текущий процесс
cpu.max - ограничение CPU
memory.max - ограничение RAM
while :; do :; done
Чтобы он не съел всю систему, запускаем его в cgroups:
echo $$ > /sys/fs/cgroup/mygroup/cgroup.procs
Теперь процесс работает в ограниченной среде и не забивает ресурсы.
cat /sys/fs/cgroup/mygroup/cpu.stat
cat /sys/fs/cgroup/mygroup/memory.current
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
disown и nohup - выполнение команд после выхода из терминала
А вы знали как сделать, чтобы команды не зависели от сессии и продолжали работать даже после выхода? Для этого можно использовать
▪️ nohup - команда живёт даже после выхода. nohup позволяет запустить процесс, который не завершится, даже если вы выйдете из системы.
Пример: Запускаем длительный процесс и отправляем в фон
Процесс не привязан к терминалу
Вывод пишется в output.log
Можно закрыть терминал, процесс не остановится
▪️ disown - открепление процесса от сессии. Если уже запустили команду без nohup, но хотите её сохранить:
1️⃣ Запускаем процесс в фоне
2️⃣ Просматриваем фоновые задачи
3️⃣ Открепляем процесс
Теперь даже если вы выйдете из терминала, процесс останется работать.
📌 Разница между nohup и disown
Команда Когда использовать Что делает?
nohup - необходимо использовать при запуске процесса. В таком случае это делает процесс независимым
disown - работает для уже запущенных команд Открепляет процесс от сессии
🔥 Комбо: Можно использовать nohup + disown, чтобы запущенный процесс не зависел от терминала и не получал SIGHUP.
Теперь можно спокойно выйти из SSH, процесс продолжит работать.
BashTex📱 #linux #utils
А вы знали как сделать, чтобы команды не зависели от сессии и продолжали работать даже после выхода? Для этого можно использовать
disown и nohup.Пример: Запускаем длительный процесс и отправляем в фон
nohup long-running-noscript.sh > output.log 2>&1 &
Процесс не привязан к терминалу
Вывод пишется в output.log
Можно закрыть терминал, процесс не остановится
long-running-noscript.sh &
jobs -l
disown -h %1
Теперь даже если вы выйдете из терминала, процесс останется работать.
Команда Когда использовать Что делает?
nohup - необходимо использовать при запуске процесса. В таком случае это делает процесс независимым
disown - работает для уже запущенных команд Открепляет процесс от сессии
nohup ./noscript.sh & disown
Теперь можно спокойно выйти из SSH, процесс продолжит работать.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍2
Автоматическая очистка старых бэкапов
Когда бэкапы копятся месяцами, место на диске неумолимо заканчивается. Сегодня рассмотрим процесс автоматизации процесса очистки старых резервных копий, чтобы всё важное сохранялось, а лишнее удалялось.
❓ Какую стратегию выбрать?
Я использую FIFO - удаление самых старых файлов, какую выбрать Вам - зависит от вас и конкретной задачи.
▪️ Удаляем файлы старше 7 дней в /backups/
▪️ Удаляем, если свободного места < 20%
▪️ Оставляем 3 последние копии
▪️ Добавим выполнение скрипта раз в день:
Не забудьте перед этим сделать cleanup_backups.sh исполняемым:
BashTex📱 #bash #utils
Когда бэкапы копятся месяцами, место на диске неумолимо заканчивается. Сегодня рассмотрим процесс автоматизации процесса очистки старых резервных копий, чтобы всё важное сохранялось, а лишнее удалялось.
FIFO (First In, First Out) - удаление самых старых файлов
GFS (Grandfather-Father-Son) - оставляем дневные, недельные, месячные
По размеру диска - чистим, если занято > 80%
Я использую FIFO - удаление самых старых файлов, какую выбрать Вам - зависит от вас и конкретной задачи.
find /backups/ -type f -name "*.tar.gz" -mtime +7 -exec rm {} \;
if [[ $(df /backups --output=pcent | tail -1 | tr -d '% ') -gt 80 ]]; then
find /backups/ -type f -name "*.tar.gz" -mtime +3 -exec rm {} \;
fi
ls -t /backups/*.tar.gz | tail -n +4 | xargs rm -f
0 2 * * * /usr/local/bin/cleanup_backups.sh
Не забудьте перед этим сделать cleanup_backups.sh исполняемым:
chmod +x cleanup_backups.sh
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Отслеживание открытых файлов и портов в реальном времени
Когда нужно выяснить, какие файлы, сокеты и устройства заняты процессами в системе,
📌 Этот инструмент полезен для:
▪️ Быстрые примеры использования
1️⃣ Проверить, какие файлы использует процесс по PID
2️⃣ Найти, кто использует файл
3️⃣ Какие процессы используют порт 443?
4️⃣ Найти процессы, использующие сеть
5️⃣ Обновлять вывод в реальном времени (-r)
Выведет список процессов, использующих SSH-порт, обновляя данные каждые 2 секунды.
▪️ Применение для отладки и безопасности
1️⃣ Закрытый файл все еще используется? Если файл удалён, но место на диске не освободилось, ищем процессы, которые его держат:
2️⃣ Поймать подозрительные соединения
Выведет все установленные сетевые соединения, без попытки разрешать IP в DNS.
3️⃣ Какие процессы пишут в лог?
BashTex📱 #linux #utils
Когда нужно выяснить, какие файлы, сокеты и устройства заняты процессами в системе,
lsof (list open files) приходит на помощь.Диагностики зависших процессов
Поиска утечек файловых дескрипторов
Проверки какие порты и файлы использует приложение
lsof -p 1234
lsof /var/log/syslog
lsof -i :443
lsof -i
lsof -r 2 -i :22
Выведет список процессов, использующих SSH-порт, обновляя данные каждые 2 секунды.
lsof +L1
lsof -i -nP | grep ESTABLISHED
Выведет все установленные сетевые соединения, без попытки разрешать IP в DNS.
lsof /var/log/auth.log
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥3
Как отслеживать изменения в файлах в реальном времени
Если нужно отслеживать изменения в файлах или каталогах в реальном времени, inotifywait - нужный инструмент.
🟢 Где полезно?
⚙️ Базовое использование
1️⃣ Следить за изменениями в файле:
Флаг -m (monitor) заставляет команду работать в фоновом режиме.
2️⃣ Отслеживать изменения в каталоге:
Флаг -e указывает события, за которыми следим:
modify – изменение файла
create – создание нового файла
delete – удаление файла
3️⃣ Вывод событий в реальном времени:
Флаг -r включает рекурсивный мониторинг всех вложенных папок.
⚙️ Применение в автоматизации
1️⃣ Автоперезапуск сервиса при изменении конфигурации
Перезапускает Nginx, если конфигурация изменена.
2️⃣ Автоматическое архивирование изменённых файлов
3️⃣ Обнаружение подозрительных изменений в /etc
BashTex📱 #linux #utils
Если нужно отслеживать изменения в файлах или каталогах в реальном времени, inotifywait - нужный инструмент.
Мониторинг логов и конфигураций
Обнаружение изменений в коде в dev-среде
Автоматический перезапуск сервисов при изменении файлов
Обнаружение нежелательных изменений (удаление файлов)
inotifywait -m /var/log/syslog
Флаг -m (monitor) заставляет команду работать в фоновом режиме.
inotifywait -m -e modify,create,delete /home/user/documents
Флаг -e указывает события, за которыми следим:
modify – изменение файла
create – создание нового файла
delete – удаление файла
inotifywait -m -r -e modify,create,delete /var/www/html
Флаг -r включает рекурсивный мониторинг всех вложенных папок.
inotifywait -m -e modify /etc/nginx/nginx.conf | while read; do
systemctl restart nginx
done
Перезапускает Nginx, если конфигурация изменена.
inotifywait -m -e modify /home/user/data | while read file; do
cp "$file" "/backup/$(basename "$file").bak"
done
inotifywait -m -r -e modify,delete /etc | while read change; do
echo "[ALERT] Изменение в /etc: $change" | mail -s "Файлы изменены!" admin@bashtex.com
done
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
Очистка репозитория от важных данных
Если случайно закоммитили пароли, токены или большие файлы, просто удалить их из последнего коммита недостаточно - они останутся в истории Git. Сегодня про то, как удалить следы своего косяка🤒
Разберём два способа очистки истории репозитория:
1️⃣ git filter-branch – старый и медленный метод
2️⃣ BFG Repo-Cleaner – более современный и быстрый
🚮 Удаление данных с помощью git filter-branch
1️⃣ Удалить все следы файла config.yml из истории:
2️⃣ Заменить текстовый секрет во всех коммитах:
❌ Минусы:
Очень медленно на больших репозиториях
Требует много оперативной памяти
Ошибки могут сломать историю
🚮 Используем BFG Repo-Cleaner (рекомендуемый способ)
1️⃣ Установите BFG:
2️⃣ Удалить файл
3️⃣ Очистить репозиторий от всех данных с API_KEY
Файл banned.txt должен содержать список слов, которые нужно удалить.
▪️ Очистить файлы больше 50MB:
4️⃣ Финальная зачистка и переписывание истории:
⤵️ Плюсы BFG:
В разы быстрее, чем filter-branch
Упрощённый синтаксис
Безопаснее для истории
BashTex📱 #utils
Если случайно закоммитили пароли, токены или большие файлы, просто удалить их из последнего коммита недостаточно - они останутся в истории Git. Сегодня про то, как удалить следы своего косяка
Разберём два способа очистки истории репозитория:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch config.yml" \
--prune-empty --tag-name-filter cat -- --all
git filter-branch --tree-filter \
'find . -type f -exec sed -i "s/OLD_SECRET/REDACTED/g" {} +' -- --all
Очень медленно на больших репозиториях
Требует много оперативной памяти
Ошибки могут сломать историю
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
config.yml из всех коммитов:
java -jar bfg-1.14.0.jar --delete-files config.yml
java -jar bfg-1.14.0.jar --replace-text banned.txt
Файл banned.txt должен содержать список слов, которые нужно удалить.
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 50M
git reflog expire --expire=now --all && git gc --prune=now --aggressive
В разы быстрее, чем filter-branch
Упрощённый синтаксис
Безопаснее для истории
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Сжатые инкрементные бэкапы
Если нужен эффективный, сжатый и зашифрованный способ делать резервные копии, то BorgBackup - отличный выбор. Он поддерживает инкрементные бэкапы, дедупликацию, шифрование и работает с удалёнными хранилищами.
🔧 Установка
📍 Создание репозитория для бэкапов. Перед началом работы нужно создать репозиторий:
repokey - создаст зашифрованный ключ прямо в хранилище. Можно использовать none, если шифрование не требуется.
📍 Создание инкрементного бэкапа. Допустим, нужно делать бэкап /home/user:
--progress - показывает прогресс
--stats - отображает информацию о размере и дедупликации
::backup-$(date +%F) - имя архива (с датой)
Каждый новый бэкап будет хранить только изменения благодаря дедупликации.
🔍 Просмотр списка бэкапов
Проверка содержимого бэкапа
📂 Восстановление файлов
Восстановить весь бэкап в
Восстановить только один файл
🗑 Удаление старых бэкапов по расписанию
Хранит 7 дневных, 4 недельных и 6 месячных бэкапов
BashTex📱 #linux #utils
Если нужен эффективный, сжатый и зашифрованный способ делать резервные копии, то BorgBackup - отличный выбор. Он поддерживает инкрементные бэкапы, дедупликацию, шифрование и работает с удалёнными хранилищами.
sudo apt install borgbackup -y#Debian/Ubuntu
sudo dnf install borgbackup -y#CentOS
brew install borgbackup#MacOS
borg init --encryption=repokey ~/borg-backups
repokey - создаст зашифрованный ключ прямо в хранилище. Можно использовать none, если шифрование не требуется.
borg create --progress --stats ~/borg-backups::backup-$(date +%F) /home/user
--progress - показывает прогресс
--stats - отображает информацию о размере и дедупликации
::backup-$(date +%F) - имя архива (с датой)
Каждый новый бэкап будет хранить только изменения благодаря дедупликации.
borg list ~/borg-backups
Проверка содержимого бэкапа
borg list ~/borg-backups::backup-2024-02-09
Восстановить весь бэкап в
/restore
borg extract ~/borg-backups::backup-2024-02-09 --target /restore
Восстановить только один файл
borg extract ~/borg-backups::backup-2024-02-09 home/user/Documents/report.txt
borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 ~/borg-backups
Хранит 7 дневных, 4 недельных и 6 месячных бэкапов
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
chattr и lsattr для защиты файлов от изменений
Иногда
🛠
i (immutable) - файл нельзя удалить, изменить или переименовать.
📍 Просмотр всех атрибутов в папке:
🛠
1️⃣ Запрет любых изменений (даже root'ом)
Теперь даже root не сможет удалить или изменить файл:
Чтобы снять защиту:
2️⃣ Защита от случайного удаления (флаг a). Файл можно дописывать, но нельзя удалить или изменить существующее содержимое:
Теперь команды вроде rm log.txt не сработают, но echo "data" >> log.txt работает.
Снять защиту можно так:
3️⃣ Защита каталогов (запрет удаления файлов внутри)
Это запретит любые изменения в папке (нельзя добавлять/удалять файлы).
4️⃣ Автоматическая очистка файла при перезаписи (s)
Файл будет перезаписан нулями перед удалением, что затруднит восстановление.
5️⃣ Файл не записывается в журналы (j)
Полезно для файлов, которые не должны попадать в журналируемую файловую систему (ext3/ext4).
BashTex📱 #linux #utils
Иногда
chmod и chown недостаточно для защиты важных файлов. В linux есть инструмент chattr, который позволяет устанавливать атрибуты, защищающие файлы от удаления, изменений или перезаписи, даже root'омlsattr - просмотр атрибутов файлов. Прежде чем что-то менять, посмотрим на атрибуты файла:
lsattr myfile.txt
----i--------- myfile.txt
i (immutable) - файл нельзя удалить, изменить или переименовать.
lsattr /etc
chattr - защита файлов
chattr +i important.conf
Теперь даже root не сможет удалить или изменить файл:
rm important.conf
rm: cannot remove 'important.conf': Operation not permitted
Чтобы снять защиту:
chattr -i important.conf
chattr +a log.txt
Теперь команды вроде rm log.txt не сработают, но echo "data" >> log.txt работает.
Снять защиту можно так:
chattr -a log.txt
chattr +i /important_dir
Это запретит любые изменения в папке (нельзя добавлять/удалять файлы).
chattr +s secret.txt
Файл будет перезаписан нулями перед удалением, что затруднит восстановление.
chattr +j critical.log
Полезно для файлов, которые не должны попадать в журналируемую файловую систему (ext3/ext4).
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Краткие и понятные мануалы вместо man
Если вам надоели километровые страницы man, где сложно найти примеры, то tldr - хорошая альтернатива! Это сборник кратких и понятных примеров для популярных команд.
🛠 Установка tldr
🔎 Как пользоваться? Просто вводите команду:
Вы получите краткую и понятную инструкцию:
Гораздо удобнее, чем листать man tar и быстрее, чем лезть в гугл.
💡 Если хотите использовать tldr в оффлайн-режиме, выполните:
BashTex📱 #linux #utils
Если вам надоели километровые страницы man, где сложно найти примеры, то tldr - хорошая альтернатива! Это сборник кратких и понятных примеров для популярных команд.
brew install tldr #MacOS
sudo pacman -S tldr #Arch Linux
sudo apt install tldr #Ubuntu/Debian
tldr tar
Вы получите краткую и понятную инструкцию:
tar -xvf archive.tar # Распаковать архив
tar -cvf archive.tar dir/ # Создать архив из папки
tar -tvf archive.tar # Просмотреть содержимое
Гораздо удобнее, чем листать man tar и быстрее, чем лезть в гугл.
tldr --update
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1