Вывод списка установленных пакетов по дате
Хочешь узнать, какие пакеты и когда были установлены в системе? В 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
Создание собственных горячих клавиш в терминале
Хотите сделать работу в терминале удобнее и быстрее? Используйте
▪️ Простейший пример: привязываем Ctrl+T для вывода текущей даты и времени:
Теперь при нажатии Ctrl+T в терминале будет отображаться текущая дата
▪️ Практические примеры
1️⃣ Быстрое переключение между папками. Допустим, вы часто переходите в каталог /var/log. Назначим для этого Ctrl+L:
Теперь при нажатии Ctrl+L вас мгновенно перебросит в /var/log и покажет содержимое.
2️⃣ Очистка экрана командой Ctrl+K. Вместо ввода clear вручную:
3️⃣ Открытие htop на Ctrl+H. Мониторинг процессов без лишних команд:
4️⃣ Быстрый выход из терминала (Ctrl+Q). Чтобы не писать exit:
▪️ Как сохранить бинды навсегда? Добавьте их в ~/.bashrc и выполните:
Теперь ваши горячие клавиши будут работать при каждом запуске терминала.
BashTex📱 #bash #utils
Хотите сделать работу в терминале удобнее и быстрее? Используйте
bind -x для создания горячих клавиш, которые выполняют команды прямо в командной строке. Команда bind -x позволяет привязать сочетание клавиш к выполнению произвольного bash-скрипта.
bind -x '"\C-t": "echo $(date)"'
Теперь при нажатии Ctrl+T в терминале будет отображаться текущая дата
bind -x '"\C-l": "cd /var/log; ls"'
Теперь при нажатии Ctrl+L вас мгновенно перебросит в /var/log и покажет содержимое.
bind -x '"\C-k": "clear"'
bind -x '"\C-h": "htop"'
bind -x '"\C-q": "exit"'
source ~/.bashrc
Теперь ваши горячие клавиши будут работать при каждом запуске терминала.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9🫡2
Настройка Failover-интерфейсов для отказоустойчивости сети
При сбое основного сетевого интерфейса система может автоматически переключаться на резервный интерфейс, обеспечивая бесперебойное сетевое соединение. Это особенно важно для серверов и критически важных сервисов.
Разберём, как настроить failover-интерфейсы в Linux с помощью bonding и keepalived.
▪️ Метод 1: Используем bonding. Он позволяет объединять два интерфейса в один логический и автоматически переключаться на рабочий при отказе основного.
1️⃣ Установите модуль bonding:
2️⃣ Настроим интерфейсы (пример для Ubuntu/Debian в /etc/netplan/01-netcfg.yaml):
Режим active-backup: Используется eth0, если он работает. Если eth0 выходит из строя, подключается eth1.
3️⃣ Применяем настройки:
Проверяем статус:
▪️ Метод 2: Используем keepalived для виртуального IP. Этот метод позволяет создать виртуальный IP (VIP), который будет переключаться между интерфейсами при отказе.
1️⃣ Установите keepalived:
2️⃣ Настроим keepalived (файл
3️⃣ Запускаем сервис:
Проверяем виртуальный IP:
▪️ Итоги:
bonding: объединяет интерфейсы в один и автоматически переключается между ними.
keepalived: создаёт виртуальный IP, который "переезжает" на другой интерфейс при отказе основного.
BashTex📱 #linux #networks
При сбое основного сетевого интерфейса система может автоматически переключаться на резервный интерфейс, обеспечивая бесперебойное сетевое соединение. Это особенно важно для серверов и критически важных сервисов.
Разберём, как настроить failover-интерфейсы в Linux с помощью bonding и keepalived.
sudo modprobe bonding
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: active-backup
primary: eth0
Режим active-backup: Используется eth0, если он работает. Если eth0 выходит из строя, подключается eth1.
sudo netplan apply
Проверяем статус:
cat /proc/net/bonding/bond0
sudo apt install keepalived -y
/etc/keepalived/keepalived.conf):
vrrp_instance FAILOVER {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass secret
}
virtual_ipaddress {
192.168.1.100/24
}
}
sudo systemctl enable --now keepalived
Проверяем виртуальный IP:
ip a show eth0
bonding: объединяет интерфейсы в один и автоматически переключается между ними.
keepalived: создаёт виртуальный IP, который "переезжает" на другой интерфейс при отказе основного.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Редактирование и повторный запуск команд из истории
Часто ли бывает, что нужно повторить или поправить команду из истории? Да. Вместо того чтобы пролистывать её через history, можно использовать
▪️ Открыть последнюю команду в редакторе (по умолчанию nano или vim):
После редактирования и сохранения команда будет выполнена
▪️ Выбрать команду по номеру (history показывает номера):
▪️ Повторить предыдущую команду без изменений:
▪️ Заменить аргумент в последней команде и выполнить её снова:
Пример:
▪️ Расширенные возможности
1️⃣ Просмотр истории команд с номерами
2️⃣ Фильтрация по последним N командам
3️⃣ Редактирование определённого диапазона команд
4️⃣ Выбрать редактор вручную
▪️ Почему fc удобнее history?
BashTex📱 #linux #utils
Часто ли бывает, что нужно повторить или поправить команду из истории? Да. Вместо того чтобы пролистывать её через history, можно использовать
fc. Команда fc (fix command) позволяет открыть последнюю команду в редакторе, изменить её и выполнить повторно.
fc
После редактирования и сохранения команда будет выполнена
fc 123
fc -s
fc -s old=new
Пример:
$ grep "error" log.txt
$ fc -s error=warning # Выполнится grep "warning" log.txt
fc -l
fc -l -10 # Вывести последние 10 команд
fc 100 105 # Открыть команды 100-105 в редакторе
FCEDIT=nano fc
Мгновенное редактирование и выполнение
Гибкость в выборе команд
Быстрое исправление ошибок без ручного ввода
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Изменение приоритета процессов без их перезапуска
Когда система начинает тормозить из-за прожорливого процесса, многие просто убивают его (kill -9). Но что, если процесс важен и его нельзя останавливать? Решение -
Приоритет процессов в Linux измеряется в niceness - от -20 (наивысший приоритет) до 19 (наименьший).
Чем выше значение nice, тем меньше процессу достаётся CPU.
▪️ Как изменить приоритет процесса?
📍 Снизить приоритет процесса (уменьшить нагрузку на систему):
📍 Повысить приоритет процесса (ускорить выполнение):
📍 Изменить приоритет всех процессов пользователя:
📍 Изменить приоритет группы процессов (по GID):
▪️ Как узнать текущий приоритет?
Через ps:
Через top:
Запустите top, в колонке NI (Nice) будет указан приоритет.
▪️ Когда использовать renice?
BashTex📱 #linux #utils
Когда система начинает тормозить из-за прожорливого процесса, многие просто убивают его (kill -9). Но что, если процесс важен и его нельзя останавливать? Решение -
renice. Команда позволяет изменять приоритет процесса на лету, не перезапуская его.Приоритет процессов в Linux измеряется в niceness - от -20 (наивысший приоритет) до 19 (наименьший).
Чем выше значение nice, тем меньше процессу достаётся CPU.
sudo renice +10 -p 1234 # Процессу 1234 отдадут меньше CPU
sudo renice -5 -p 1234 # Процесс 1234 будет выполняться быстрее
sudo renice +5 -u username
sudo renice -10 -g 1001
Через ps:
ps -o pid,ni,cmd -p 1234
Через top:
Запустите top, в колонке NI (Nice) будет указан приоритет.
Если процесс нагружает процессор, но его нельзя останавливать (например, компиляция).
Если нужно ускорить важный процесс (например, срочный рендеринг).
Если фоновый процесс мешает работе, и его можно замедлить.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7