Создание зашифрованных контейнеров с 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18😁5🫡1
Выполнение команд с ограничением по времени
Иногда нужно запустить команду, но ограничить её время выполнения. Например, если программа зависла или работает слишком долго. Для этого используется команда
▪️ Простой пример. Запустим команду sleep на 5 секунд, но прервём её через 2 секунды:
Через 2 секунды процесс будет завершён.
▪️ Прерывание долгих команд. Если вы хотите ограничить время выполнения скрипта:
Если скрипт не завершится за 10 секунд, timeout его принудительно остановит.
▪️ Игнорирование SIGTERM. Некоторые команды игнорируют сигнал SIGTERM. В таком случае можно использовать -k для отправки SIGKILL:
Сначала timeout подождёт 30 секунд, затем отправит SIGTERM.
Если процесс не завершится через 5 секунд, отправится SIGKILL.
▪️ Использование с ping. Ограничим ping 5 секундами:
Через 5 секунд ping остановится автоматически.
▪️ Вывод кода завершения
Если команда успела завершиться - timeout передаст её код возврата.
Если команда была принудительно остановлена - код возврата будет 124.
Проверим:
BashTex📱 #linux #utils
Иногда нужно запустить команду, но ограничить её время выполнения. Например, если программа зависла или работает слишком долго. Для этого используется команда
timeout.
timeout 2s sleep 5
Через 2 секунды процесс будет завершён.
timeout 10s ./долгий_скрипт.sh
Если скрипт не завершится за 10 секунд, timeout его принудительно остановит.
timeout -k 5s 30s ./непослушный_процесс
Сначала timeout подождёт 30 секунд, затем отправит SIGTERM.
Если процесс не завершится через 5 секунд, отправится SIGKILL.
timeout 5s ping 8.8.8.8
Через 5 секунд ping остановится автоматически.
Если команда успела завершиться - timeout передаст её код возврата.
Если команда была принудительно остановлена - код возврата будет 124.
Проверим:
timeout 2s sleep 5
echo $? # Выведет 124
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
Сжатие логов в реальном времени
Логи быстро накапливаются и могут занимать гигабайты дискового пространства. Вместо того чтобы ждать ротации логов, можно сжимать их в реальном времени без потери данных, используя
1️⃣ Перехват логов и их сжатие на лету. Если процесс пишет логи в stdout, можно сразу сжимать их:
tee дублирует вывод в сжатый файл, при этом логи остаются видимыми в консоли.
Для zstd (он быстрее, чем gzip):
2️⃣ Сжатие логов nginx в реальном времени. Добавляем gzip в конфигурацию logrotate:
Логи будут сжиматься автоматически после ротации.
3️⃣ Прямая передача логов в сжатый файл. Если приложение пишет в файл, можно использовать именованный канал:
Логи идут в gzip, при этом процесс не знает, что его вывод сжимается.
4️⃣ Использование systemd-journald для сжатия. Если система использует journald, включаем сжатие в конфиге:
Затем перезапускаем службу:
Логи будут автоматически сжаты, освобождая место.
BashTex📱 #bash #utils
Логи быстро накапливаются и могут занимать гигабайты дискового пространства. Вместо того чтобы ждать ротации логов, можно сжимать их в реальном времени без потери данных, используя
gzip или zstd в связке с tee и systemd.
some_command 2>&1 | tee >(gzip -c > logs.gz)
tee дублирует вывод в сжатый файл, при этом логи остаются видимыми в консоли.
Для zstd (он быстрее, чем gzip):
some_command 2>&1 | tee >(zstd > logs.zst)
/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
Логи будут сжиматься автоматически после ротации.
mkfifo /tmp/logpipe
gzip -c < /tmp/logpipe > /var/log/app.log.gz &
some_command > /tmp/logpipe 2>&1
Логи идут в gzip, при этом процесс не знает, что его вывод сжимается.
[Journal]
Compress=yes
SystemMaxUse=500M
Затем перезапускаем службу:
systemctl restart systemd-journald
Логи будут автоматически сжаты, освобождая место.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Настройка удалённого аудита логов с rsyslog
1️⃣ Настройка сервера (приём логов). На сервере, который будет принимать логи, включаем поддержку удалённых сообщений:
Редактируем конфиг
UDP - быстрее, но ненадёжно.
TCP - более надёжно, но может вызывать задержки.
Перезапускаем rsyslog:
И не забываем открыть порт в firewalld или iptables:
2️⃣ Настройка клиента (отправка логов). На сервере-отправителе редактируем /etc/rsyslog.conf и добавляем в конец:
Где 192.168.1.100 - IP сервера сбора логов.
Перезапускаем rsyslog:
Проверяем отправку тестового сообщения:
3️⃣ Фильтрация и хранение логов. Можно настроить rsyslog на приём и сортировку логов по папкам:
Теперь логи будут храниться по серверам и сервисам в
4️⃣ Шифрование логов (TLS). Открытые логи могут содержать чувствительные данные. Для безопасной передачи можно включить TLS.
Добавляем в
И на клиенте:
➕ rsyslog позволяет собирать логи с разных серверов в одном месте.
➕ Можно использовать фильтрацию и сортировку логов по сервисам.
➕ Для безопасности передача логов может быть зашифрована через TLS.
BashTex📱 #linux #utils
rsyslog позволяет пересылать логи с серверов на удалённый лог-агрегатор, обеспечивая удобный аудит и хранение.Редактируем конфиг
/etc/rsyslog.conf. Добавляем:
# Разрешаем приём логов по TCP и UDP
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
UDP - быстрее, но ненадёжно.
TCP - более надёжно, но может вызывать задержки.
Перезапускаем rsyslog:
systemctl restart rsyslog
И не забываем открыть порт в firewalld или iptables:
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --reload
*.* @192.168.1.100:514 # Отправка по UDP
# *.* @@192.168.1.100:514 # Для TCP — две @
Где 192.168.1.100 - IP сервера сбора логов.
Перезапускаем rsyslog:
systemctl restart rsyslog
Проверяем отправку тестового сообщения:
logger "Тестовая запись в удалённые логи"
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
& stop
Теперь логи будут храниться по серверам и сервисам в
/var/log/remote/.Добавляем в
/etc/rsyslog.conf на сервере:
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/ca.pem
$DefaultNetstreamDriverCertFile /etc/rsyslog.d/server-cert.pem
$DefaultNetstreamDriverKeyFile /etc/rsyslog.d/server-key.pem
$ModLoad imtcp
$InputTCPServerStreamDriverMode 1
$InputTCPServerStreamDriverAuthMode anon
$InputTCPServerRun 6514
И на клиенте:
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/ca.pem
$DefaultNetstreamDriverCertFile /etc/rsyslog.d/client-cert.pem
$DefaultNetstreamDriverKeyFile /etc/rsyslog.d/client-key.pem
*.* @@(overtls)192.168.1.100:6514
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8