BashTex | Linux – Telegram
BashTex | Linux
2.57K subscribers
48 photos
9 videos
291 links
Авторский канал для тех, кто хочет глубже погрузиться в мир Linux.

Подойдет для разработчиков, системных администраторов и DevOps

Реклама: @dad_admin
Download Telegram
Вывод списка установленных пакетов по дате

Хочешь узнать, какие пакеты и когда были установлены в системе? В 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


📌 Фильтр по определённому дню. Допустим, надо узнать, что было установлено 3 февраля 2025 года:


grep "2025-02-03" /var/log/dpkg.log | grep "install"


📂 Вывод списка недавно установленных пакетов


zgrep " install " /var/log/dpkg.log* | tail -20


BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥3👨‍💻3
Ну мы

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15
Динамическое ограничение ресурсов для процессов с cgroups

Когда процесс начинает пожирать всю CPU или RAM, система может начать тормозить. 🐢 Но есть способ держать всё под контролем - cgroups.

📌 cgroups (Control Groups) — механизм ядра Linux, который позволяет ограничивать, учитывать и изолировать ресурсы (CPU, RAM, сеть) для процессов.

Применение:

Ограничение потребления ресурсов процессами
Контроль за службами и контейнерами
Создание "огороженных" сред для тестирования


⚙️ Простая настройка cgroups

1️⃣ Проверяем поддержку cgroups:


mount | grep cgroup


Если вывод есть - поддержка включена

2️⃣ Создаём группу и ограничиваем процесс. Создадим новую группу и ограничим процесс по CPU и RAM:


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


Теперь процесс работает в ограниченной среде и не забивает ресурсы.

👀 Мониторинг нагрузки. Можно проверить использование CPU и памяти группой:


cat /sys/fs/cgroup/mygroup/cpu.stat
cat /sys/fs/cgroup/mygroup/memory.current


BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
disown и nohup - выполнение команд после выхода из терминала

А вы знали как сделать, чтобы команды не зависели от сессии и продолжали работать даже после выхода? Для этого можно использовать disown и nohup.

▪️ nohup - команда живёт даже после выхода. nohup позволяет запустить процесс, который не завершится, даже если вы выйдете из системы.

Пример: Запускаем длительный процесс и отправляем в фон


nohup long-running-noscript.sh > output.log 2>&1 &


Процесс не привязан к терминалу
Вывод пишется в output.log
Можно закрыть терминал, процесс не остановится

▪️ disown - открепление процесса от сессии. Если уже запустили команду без nohup, но хотите её сохранить:

1️⃣ Запускаем процесс в фоне


long-running-noscript.sh &


2️⃣ Просматриваем фоновые задачи


jobs -l


3️⃣ Открепляем процесс


disown -h %1


Теперь даже если вы выйдете из терминала, процесс останется работать.

📌 Разница между nohup и disown

Команда Когда использовать Что делает?

nohup - необходимо использовать при запуске процесса. В таком случае это делает процесс независимым
disown - работает для уже запущенных команд Открепляет процесс от сессии

🔥 Комбо: Можно использовать nohup + disown, чтобы запущенный процесс не зависел от терминала и не получал SIGHUP.


nohup ./noscript.sh & disown


Теперь можно спокойно выйти из SSH, процесс продолжит работать.

BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍2
Автоматическая очистка старых бэкапов

Когда бэкапы копятся месяцами, место на диске неумолимо заканчивается. Сегодня рассмотрим процесс автоматизации процесса очистки старых резервных копий, чтобы всё важное сохранялось, а лишнее удалялось.

Какую стратегию выбрать?

FIFO (First In, First Out) - удаление самых старых файлов
GFS (Grandfather-Father-Son) - оставляем дневные, недельные, месячные
По размеру диска - чистим, если занято > 80%


Я использую FIFO - удаление самых старых файлов, какую выбрать Вам - зависит от вас и конкретной задачи.

▪️ Удаляем файлы старше 7 дней в /backups/


find /backups/ -type f -name "*.tar.gz" -mtime +7 -exec rm {} \;


▪️ Удаляем, если свободного места < 20%


if [[ $(df /backups --output=pcent | tail -1 | tr -d '% ') -gt 80 ]]; then
find /backups/ -type f -name "*.tar.gz" -mtime +3 -exec rm {} \;
fi


▪️ Оставляем 3 последние копии


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 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Отслеживание открытых файлов и портов в реальном времени

Когда нужно выяснить, какие файлы, сокеты и устройства заняты процессами в системе, lsof (list open files) приходит на помощь.

📌 Этот инструмент полезен для:

Диагностики зависших процессов
Поиска утечек файловых дескрипторов
Проверки какие порты и файлы использует приложение


▪️ Быстрые примеры использования

1️⃣ Проверить, какие файлы использует процесс по PID


lsof -p 1234


2️⃣ Найти, кто использует файл


lsof /var/log/syslog


3️⃣ Какие процессы используют порт 443?


lsof -i :443


4️⃣ Найти процессы, использующие сеть


lsof -i


5️⃣ Обновлять вывод в реальном времени (-r)


lsof -r 2 -i :22


Выведет список процессов, использующих SSH-порт, обновляя данные каждые 2 секунды.

▪️ Применение для отладки и безопасности

1️⃣ Закрытый файл все еще используется? Если файл удалён, но место на диске не освободилось, ищем процессы, которые его держат:


lsof +L1


2️⃣ Поймать подозрительные соединения


lsof -i -nP | grep ESTABLISHED


Выведет все установленные сетевые соединения, без попытки разрешать IP в DNS.

3️⃣ Какие процессы пишут в лог?


lsof /var/log/auth.log


BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥3
Как отслеживать изменения в файлах в реальном времени

Если нужно отслеживать изменения в файлах или каталогах в реальном времени, inotifywait - нужный инструмент.

🟢 Где полезно?

Мониторинг логов и конфигураций
Обнаружение изменений в коде в dev-среде
Автоматический перезапуск сервисов при изменении файлов
Обнаружение нежелательных изменений (удаление файлов)


⚙️ Базовое использование

1️⃣ Следить за изменениями в файле:


inotifywait -m /var/log/syslog


Флаг -m (monitor) заставляет команду работать в фоновом режиме.

2️⃣ Отслеживать изменения в каталоге:


inotifywait -m -e modify,create,delete /home/user/documents


Флаг -e указывает события, за которыми следим:

modify – изменение файла
create – создание нового файла
delete – удаление файла

3️⃣ Вывод событий в реальном времени:


inotifywait -m -r -e modify,create,delete /var/www/html


Флаг -r включает рекурсивный мониторинг всех вложенных папок.

⚙️ Применение в автоматизации

1️⃣ Автоперезапуск сервиса при изменении конфигурации


inotifywait -m -e modify /etc/nginx/nginx.conf | while read; do
systemctl restart nginx
done


Перезапускает Nginx, если конфигурация изменена.

2️⃣ Автоматическое архивирование изменённых файлов


inotifywait -m -e modify /home/user/data | while read file; do
cp "$file" "/backup/$(basename "$file").bak"
done


3️⃣ Обнаружение подозрительных изменений в /etc


inotifywait -m -r -e modify,delete /etc | while read change; do
echo "[ALERT] Изменение в /etc: $change" | mail -s "Файлы изменены!" admin@bashtex.com
done


BashTex 📱 #linux #utils
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 из истории:


git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch config.yml" \
--prune-empty --tag-name-filter cat -- --all


2️⃣ Заменить текстовый секрет во всех коммитах:


git filter-branch --tree-filter \
'find . -type f -exec sed -i "s/OLD_SECRET/REDACTED/g" {} +' -- --all


Минусы:

Очень медленно на больших репозиториях
Требует много оперативной памяти
Ошибки могут сломать историю

🚮 Используем BFG Repo-Cleaner (рекомендуемый способ)

1️⃣ Установите BFG:


wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar


2️⃣ Удалить файл config.yml из всех коммитов:


java -jar bfg-1.14.0.jar --delete-files config.yml


3️⃣ Очистить репозиторий от всех данных с API_KEY


java -jar bfg-1.14.0.jar --replace-text banned.txt


Файл banned.txt должен содержать список слов, которые нужно удалить.

▪️ Очистить файлы больше 50MB:


java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 50M


4️⃣ Финальная зачистка и переписывание истории:


git reflog expire --expire=now --all && git gc --prune=now --aggressive


⤵️ Плюсы BFG:

В разы быстрее, чем filter-branch
Упрощённый синтаксис
Безопаснее для истории

BashTex 📱 #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Да что вы знаете о сложном выборе

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Сжатые инкрементные бэкапы

Если нужен эффективный, сжатый и зашифрованный способ делать резервные копии, то 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, если шифрование не требуется.

📍 Создание инкрементного бэкапа. Допустим, нужно делать бэкап /home/user:


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 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
chattr и lsattr для защиты файлов от изменений

Иногда chmod и chown недостаточно для защиты важных файлов. В linux есть инструмент chattr, который позволяет устанавливать атрибуты, защищающие файлы от удаления, изменений или перезаписи, даже root'ом

🛠 lsattr - просмотр атрибутов файлов. Прежде чем что-то менять, посмотрим на атрибуты файла:


lsattr myfile.txt

----i--------- myfile.txt


i (immutable) - файл нельзя удалить, изменить или переименовать.

📍 Просмотр всех атрибутов в папке:


lsattr /etc


🛠 chattr - защита файлов

1️⃣ Запрет любых изменений (даже root'ом)


chattr +i important.conf


Теперь даже root не сможет удалить или изменить файл:


rm important.conf
rm: cannot remove 'important.conf': Operation not permitted


Чтобы снять защиту:


chattr -i important.conf


2️⃣ Защита от случайного удаления (флаг a). Файл можно дописывать, но нельзя удалить или изменить существующее содержимое:


chattr +a log.txt


Теперь команды вроде rm log.txt не сработают, но echo "data" >> log.txt работает.
Снять защиту можно так:


chattr -a log.txt


3️⃣ Защита каталогов (запрет удаления файлов внутри)


chattr +i /important_dir


Это запретит любые изменения в папке (нельзя добавлять/удалять файлы).

4️⃣ Автоматическая очистка файла при перезаписи (s)


chattr +s secret.txt


Файл будет перезаписан нулями перед удалением, что затруднит восстановление.

5️⃣ Файл не записывается в журналы (j)


chattr +j critical.log


Полезно для файлов, которые не должны попадать в журналируемую файловую систему (ext3/ext4).

BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Краткие и понятные мануалы вместо man

Если вам надоели километровые страницы man, где сложно найти примеры, то tldr - хорошая альтернатива! Это сборник кратких и понятных примеров для популярных команд.

🛠 Установка 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 в оффлайн-режиме, выполните:


tldr --update


BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1
Пути назад нет

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18😁5🫡1
Выполнение команд с ограничением по времени

Иногда нужно запустить команду, но ограничить её время выполнения. Например, если программа зависла или работает слишком долго. Для этого используется команда timeout.

▪️ Простой пример. Запустим команду sleep на 5 секунд, но прервём её через 2 секунды:


timeout 2s sleep 5


Через 2 секунды процесс будет завершён.

▪️ Прерывание долгих команд. Если вы хотите ограничить время выполнения скрипта:


timeout 10s ./долгий_скрипт.sh


Если скрипт не завершится за 10 секунд, timeout его принудительно остановит.

▪️ Игнорирование SIGTERM. Некоторые команды игнорируют сигнал SIGTERM. В таком случае можно использовать -k для отправки SIGKILL:


timeout -k 5s 30s ./непослушный_процесс


Сначала timeout подождёт 30 секунд, затем отправит SIGTERM.
Если процесс не завершится через 5 секунд, отправится SIGKILL.

▪️ Использование с ping. Ограничим ping 5 секундами:


timeout 5s ping 8.8.8.8


Через 5 секунд ping остановится автоматически.

▪️ Вывод кода завершения

Если команда успела завершиться - timeout передаст её код возврата.
Если команда была принудительно остановлена - код возврата будет 124.

Проверим:


timeout 2s sleep 5
echo $? # Выведет 124


BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
Сжатие логов в реальном времени

Логи быстро накапливаются и могут занимать гигабайты дискового пространства. Вместо того чтобы ждать ротации логов, можно сжимать их в реальном времени без потери данных, используя gzip или zstd в связке с tee и systemd.

1️⃣ Перехват логов и их сжатие на лету. Если процесс пишет логи в stdout, можно сразу сжимать их:


some_command 2>&1 | tee >(gzip -c > logs.gz)


tee дублирует вывод в сжатый файл, при этом логи остаются видимыми в консоли.

Для zstd (он быстрее, чем gzip):


some_command 2>&1 | tee >(zstd > logs.zst)


2️⃣ Сжатие логов nginx в реальном времени. Добавляем gzip в конфигурацию logrotate:


/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}


Логи будут сжиматься автоматически после ротации.

3️⃣ Прямая передача логов в сжатый файл. Если приложение пишет в файл, можно использовать именованный канал:


mkfifo /tmp/logpipe
gzip -c < /tmp/logpipe > /var/log/app.log.gz &
some_command > /tmp/logpipe 2>&1


Логи идут в gzip, при этом процесс не знает, что его вывод сжимается.

4️⃣ Использование systemd-journald для сжатия. Если система использует journald, включаем сжатие в конфиге:


[Journal]
Compress=yes
SystemMaxUse=500M


Затем перезапускаем службу:


systemctl restart systemd-journald


Логи будут автоматически сжаты, освобождая место.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Настройка удалённого аудита логов с rsyslog

rsyslog позволяет пересылать логи с серверов на удалённый лог-агрегатор, обеспечивая удобный аудит и хранение.

1️⃣ Настройка сервера (приём логов). На сервере, который будет принимать логи, включаем поддержку удалённых сообщений:

Редактируем конфиг /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


2️⃣ Настройка клиента (отправка логов). На сервере-отправителе редактируем /etc/rsyslog.conf и добавляем в конец:


*.* @192.168.1.100:514 # Отправка по UDP
# *.* @@192.168.1.100:514 # Для TCP — две @


Где 192.168.1.100 - IP сервера сбора логов.

Перезапускаем rsyslog:


systemctl restart rsyslog


Проверяем отправку тестового сообщения:


logger "Тестовая запись в удалённые логи"


3️⃣ Фильтрация и хранение логов. Можно настроить rsyslog на приём и сортировку логов по папкам:


$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
& stop


Теперь логи будут храниться по серверам и сервисам в /var/log/remote/.

4️⃣ Шифрование логов (TLS). Открытые логи могут содержать чувствительные данные. Для безопасной передачи можно включить TLS.

Добавляем в /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



rsyslog позволяет собирать логи с разных серверов в одном месте.
Можно использовать фильтрацию и сортировку логов по сервисам.
Для безопасности передача логов может быть зашифрована через TLS.

BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Создание собственных горячих клавиш в терминале

Хотите сделать работу в терминале удобнее и быстрее? Используйте bind -x для создания горячих клавиш, которые выполняют команды прямо в командной строке. Команда bind -x позволяет привязать сочетание клавиш к выполнению произвольного bash-скрипта.

▪️ Простейший пример: привязываем Ctrl+T для вывода текущей даты и времени:


bind -x '"\C-t": "echo $(date)"'


Теперь при нажатии Ctrl+T в терминале будет отображаться текущая дата

▪️ Практические примеры

1️⃣ Быстрое переключение между папками. Допустим, вы часто переходите в каталог /var/log. Назначим для этого Ctrl+L:


bind -x '"\C-l": "cd /var/log; ls"'


Теперь при нажатии Ctrl+L вас мгновенно перебросит в /var/log и покажет содержимое.

2️⃣ Очистка экрана командой Ctrl+K. Вместо ввода clear вручную:


bind -x '"\C-k": "clear"'


3️⃣ Открытие htop на Ctrl+H. Мониторинг процессов без лишних команд:


bind -x '"\C-h": "htop"'


4️⃣ Быстрый выход из терминала (Ctrl+Q). Чтобы не писать exit:


bind -x '"\C-q": "exit"'


▪️ Как сохранить бинды навсегда? Добавьте их в ~/.bashrc и выполните:


source ~/.bashrc


Теперь ваши горячие клавиши будут работать при каждом запуске терминала.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
«Накачу и посмотрю одним глазком 😋»

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9🫡2
Настройка Failover-интерфейсов для отказоустойчивости сети

При сбое основного сетевого интерфейса система может автоматически переключаться на резервный интерфейс, обеспечивая бесперебойное сетевое соединение. Это особенно важно для серверов и критически важных сервисов.

Разберём, как настроить failover-интерфейсы в Linux с помощью bonding и keepalived.

▪️ Метод 1: Используем bonding. Он позволяет объединять два интерфейса в один логический и автоматически переключаться на рабочий при отказе основного.

1️⃣ Установите модуль bonding:


sudo modprobe bonding


2️⃣ Настроим интерфейсы (пример для Ubuntu/Debian в /etc/netplan/01-netcfg.yaml):


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.

3️⃣ Применяем настройки:


sudo netplan apply


Проверяем статус:


cat /proc/net/bonding/bond0


▪️ Метод 2: Используем keepalived для виртуального IP. Этот метод позволяет создать виртуальный IP (VIP), который будет переключаться между интерфейсами при отказе.

1️⃣ Установите keepalived:


sudo apt install keepalived -y


2️⃣ Настроим keepalived (файл /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
}
}


3️⃣ Запускаем сервис:


sudo systemctl enable --now keepalived


Проверяем виртуальный IP:


ip a show eth0


▪️ Итоги:

bonding: объединяет интерфейсы в один и автоматически переключается между ними.
keepalived: создаёт виртуальный IP, который "переезжает" на другой интерфейс при отказе основного.

BashTex 📱 #linux #networks
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Редактирование и повторный запуск команд из истории

Часто ли бывает, что нужно повторить или поправить команду из истории? Да. Вместо того чтобы пролистывать её через history, можно использовать fc. Команда fc (fix command) позволяет открыть последнюю команду в редакторе, изменить её и выполнить повторно.

▪️ Открыть последнюю команду в редакторе (по умолчанию nano или vim):


fc


После редактирования и сохранения команда будет выполнена

▪️ Выбрать команду по номеру (history показывает номера):


fc 123


▪️ Повторить предыдущую команду без изменений:


fc -s


▪️ Заменить аргумент в последней команде и выполнить её снова:


fc -s old=new


Пример:


$ grep "error" log.txt
$ fc -s error=warning # Выполнится grep "warning" log.txt


▪️ Расширенные возможности

1️⃣ Просмотр истории команд с номерами


fc -l


2️⃣ Фильтрация по последним N командам


fc -l -10 # Вывести последние 10 команд


3️⃣ Редактирование определённого диапазона команд


fc 100 105 # Открыть команды 100-105 в редакторе


4️⃣ Выбрать редактор вручную


FCEDIT=nano fc


▪️ Почему fc удобнее history?

Мгновенное редактирование и выполнение
Гибкость в выборе команд
Быстрое исправление ошибок без ручного ввода


BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Изменение приоритета процессов без их перезапуска

Когда система начинает тормозить из-за прожорливого процесса, многие просто убивают его (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


📍 Изменить приоритет группы процессов (по GID):


sudo renice -10 -g 1001


▪️ Как узнать текущий приоритет?

Через ps:


ps -o pid,ni,cmd -p 1234


Через top:

Запустите top, в колонке NI (Nice) будет указан приоритет.

▪️ Когда использовать renice?

Если процесс нагружает процессор, но его нельзя останавливать (например, компиляция).
Если нужно ускорить важный процесс (например, срочный рендеринг).
Если фоновый процесс мешает работе, и его можно замедлить.


BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7