BashTex | Linux
Kanalga Telegram’da o‘tish
Авторский канал для тех, кто хочет глубже погрузиться в мир Linux. Подойдет для разработчиков, системных администраторов и DevOps Реклама: @dad_admin
Ko'proq ko'rsatish2 524
Obunachilar
-224 soatlar
-67 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
2 524
Интеграция Bash с Telegram для удалённого управления сервером
Хотите удалённо управлять сервером через телеграмм? С помощью простого bash-скрипта можно получать статусы, логи и даже перезагружать сервер прямо из чата.
🌟 Как это работает?
Бот принимает команды от владельца. Сервер обрабатывает запросы и отправляет ответ. Ответ возвращается в телеграмм.Для этого потребуется: TG-бот + API-токен curl или wget для отправки запросов Скрипт на Bash 1️⃣ Создаём TG-бота Открываем @BotFather. Отправляем команду: /newbot. Даем боту имя и получаем токен API. Токен будет вида:
123456789:ABCdefGHIjklMNO123456xyz
Сохраняем его.
2️⃣ Получаем свой Chat ID. Запросим ID нашего чата:
curl "https://api.telegram.org/bot<ТОКЕН>/getUpdates"
Ищем "chat":{"id":...} - это и есть наш Chat ID.
3️⃣ Отправка сообщений в телеграмм. Bash-скрипт для отправки сообщения:
#!/bin/bash
TOKEN="123456789:ABCdefGHIjklMNO123456xyz"
CHAT_ID="123456789"
MESSAGE="Привет, сервер на связи!"
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d "chat_id=$CHAT_ID" \
-d "text=$MESSAGE"
Запускаем и получаем сообщение в TG.
4️⃣ Обработка команд. Теперь научим бота принимать команды.
Скрипт для проверки команд от пользователя:
#!/bin/bash
TOKEN="123456789:ABCdefGHIjklMNO123456xyz"
CHAT_ID="123456789"
URL="https://api.telegram.org/bot$TOKEN"
# Получаем последнее сообщение
UPDATE=$(curl -s "$URL/getUpdates")
LAST_MESSAGE=$(echo "$UPDATE" | grep -o '"text":"[^"]*' | cut -d':' -f2 | tr -d '"')
if [[ "$LAST_MESSAGE" == "/status" ]]; then
RESPONSE="Сервер работает!"
elif [[ "$LAST_MESSAGE" == "/uptime" ]]; then
RESPONSE=$(uptime)
elif [[ "$LAST_MESSAGE" == "/disk" ]]; then
RESPONSE=$(df -h | grep '/$')
else
RESPONSE="Неизвестная команда"
fi
# Отправляем ответ в TG
curl -s -X POST "$URL/sendMessage" -d "chat_id=$CHAT_ID" -d "text=$RESPONSE"
Теперь отправляем /status, /uptime или /disk и получаем ответ!
5️⃣ Автоматизация. Добавим этот скрипт в cron для регулярного выполнения:
*/1 * * * * /path/to/telegram_bot.sh
Теперь бот сам проверяет новые сообщения и реагирует на команды.
🌟 Это базовая конфигурация с помощью которой можно значительно расширить управление сервером через телеграмм под свои конкретные потребности.
BashTex 📱 #bash #utils2 524
Чтение файлов в массив без cat
Часто при работе с файлами в Bash используют
cat и while read, но есть более элегантное решение - команда mapfile (она же readarray).
🌟 Почему mapfile удобнее?
Читает файл целиком в массив. Избавляет от проблем с разбиением строк по пробелам. Работает быстрее cat | while read. Поддерживает фильтрацию и постобработку данных.🌟 Как это работает? Допустим, у нас есть файл users.txt:
Vanya
Anna
Roman
Читаем его в массив одной командой:
```bash
mapfile -t users < users.txt
Теперь можно обращаться к строкам по индексам:
echo "Первый пользователь: ${users[0]}"
echo "Второй пользователь: ${users[1]}"
Первый пользователь: Vanya
Второй пользователь: Anna```
🌟 mapfile vs cat | while read. Обычный способ через while read ломает строки с пробелами:
while read user; do
echo "$user"
done < users.txt
Если строка "Vanya Ivanov", while read разобьёт её на "Vanya" и "Ivanov". А mapfile сохранит строку целиком.
🌟 Применение mapfile в реальных задачах
1️⃣ Удаление пустых строк из файла
mapfile -t lines < <(grep -v '^$' users.txt)
2️⃣ Чтение вывода команды в массив
mapfile -t processes < <(ps aux)
3️⃣ Чтение первых N строк
mapfile -t -n 5 top_lines < users.txt
BashTex 📱 #linux #utils2 524
Автоматическое переключение Wi-Fi на самый сильный сигнал
Если у вас несколько точек доступа с одним SSID, но система не переключается на точку с лучшим сигналом, можно автоматизировать этот процесс с помощью простого скрипта.
🌟 Как узнать текущий сигнал Wi-Fi?
iwconfig wlan0 | grep -i --color signal
Где wlan0 - имя вашего Wi-Fi-интерфейса.
Важен параметр Signal level, измеряется в dBm (чем ближе к 0, тем лучше).
📱 Автоматическое переключение Wi-Fi. Создадим скрипт wifi-switch.sh, который будет мониторить сигнал и при необходимости переподключаться:
#!/bin/bash
INTERFACE="wlan0" # Название Wi-Fi интерфейса
SSID="HomeWiFi" # Имя вашей сети (SSID)
THRESHOLD=-70 # Порог переключения (в dBm)
while true; do
# Получаем текущий уровень сигнала
SIGNAL=$(iwconfig $INTERFACE | grep -i --color signal | awk '{print $4}' | cut -d '=' -f2)
# Если сигнал слабый, перезапускаем Wi-Fi
if [[ $SIGNAL -lt $THRESHOLD ]]; then
echo "Слабый сигнал ($SIGNAL dBm), переподключение..."
nmcli device wifi rescan
nmcli device disconnect $INTERFACE
nmcli device connect $INTERFACE
fi
sleep 10 # Проверяем каждые 10 секунд
done
▪️ Как запустить скрипт в фоновом режиме?
1️⃣ Дать права на выполнение:
chmod +x wifi-switch.sh
2️⃣ Запустить в фоне:
nohup ./wifi-switch.sh > /dev/null 2>&1 &
3️⃣ Добавить в автозапуск:
echo "@reboot /path/to/wifi-switch.sh" | crontab -
BashTex 📱 #bash #utils2 524
Что делать, если проект идёт через ж@пу? А команда не выполняет задачи, срывает сроки и все ходят с недовольной мордой?
Можно всех уволить, а можно начать читать канал Александра Наливайко, и научиться правильно создавать и управлять командами.
Александр уже 20 лет строит масштабные проекты, управляет командами 100+ человек и обладает универсальным методом, который можно применить практически в любой сфере.
А еще на канале можно почитать статьи на тему:
😡 Что делать, если начальник чудит?
🥸 Нужны ли внешние консультанты?
📝 Как правильно выстроить коммуникацию с коллегами
Подписывайся, и получи в подарок шаблоны писем для коммуникации на всех этапах проекта: @pmnavru
2 524
Продвинутый cat с подсветкой кода
Если вы часто используете
cat для просмотра файлов, попробуйте bat - улучшенную версию с подсветкой синтаксиса, номерами строк и встроенной пагинацией.
🌟 Почему bat лучше cat?
Подсветка кода для более чем 500 языков Номера строк прямо в выводе Интеграция с git (показывает изменённые строки) Встроенный пейджинг (автоматически передаёт вывод в less)⚙️ Установка
sudo pacman -S bat -- Arch Linux
brew install bat -- MacOS
sudo apt install bat -- Ubuntu/Debian
Windows:
scoop install bat
choco install bat
▪️ Как использовать?
📍Простая замена cat:
bat script.sh
📍 Нумерация строк:
bat -n myfile.txt
📍 Отображение различий с последним коммитом (если файл в git-репозитории):
bat --diff myfile.py
📍Использование как cat:
bat --paging=never file.txt
📍Вывод с определённой темой оформления:
bat --theme=Dracula config.yaml
(Темы можно посмотреть через bat --list-themes)
📍Интеграция с less и man. Сделать bat основным просмотрщиком для man:
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
Использовать bat с less:
export BAT_PAGER="less -RF"
bat - это альтернатива cat, которая делает работу с файлами удобнее. Отлично подходит для просмотра кода, конфигов и текстовых файлов.
BashTex 📱 #linux #utils2 524
Запись и воспроизведение сессий терминала
Если вам нужно показать работу команды в терминале, но скриншоты не передают всей динамики, попробуйте
asciinema. Это инструмент для записи и воспроизведения терминальных сессий.
В отличие от обычного видео, записи asciinema:
➕ занимают всего несколько килобайт ➕ позволяют копировать команды прямо из записи ➕ легко встраиваются в сайты и документацию▪️ Установка
brew install asciinema -- MacOS
sudo apt install asciinema -- Ubuntu/Debian
sudo pacman -S asciinema -- Arch Linux
📍 Запись терминальной сессии. Просто запустите:
asciinema rec
Теперь всё, что вы вводите в терминале, записывается.
📌 Чтобы остановить запись: Ctrl + D или exit.
📌 После остановки asciinema предложит сохранить локально или загрузить в облако.
📂 Сохранение записи в файл:
asciinema rec demo.cast
▪️ Воспроизведение записи. Если запись сохранена в файл, проиграйте её так:
asciinema play demo.cast
▪️ Публикация и расшаривание. Если нужно поделиться записью:
asciinema upload demo.cast
▪️ Запись с паузами между командами:
asciinema rec -t 2
(это замедлит вывод, чтобы было комфортнее читать)
▪️ Конвертация записи в GIF-анимацию. Для этого можно использовать утилиту agg:
agg demo.cast demo.gif
BashTex 📱 #linux #utils2 524
Оптимизация времени загрузки системы с systemd-analyze
Когда Linux загружается слишком долго, то сначала необходимо определить, какие службы тормозят процесс. Для этого в
systemd есть инструмент - systemd-analyze, который помогает выявить узкие места при старте системы.
1️⃣ Анализ общего времени загрузки
systemd-analyze
Вывод покажет время, затраченное на:
прошивку (firmware)
загрузчик (bootloader)
ядро (kernel)
службы systemd (userspace)
Пример вывода:
Startup finished in 3.2s (kernel) + 5.1s (userspace) = 8.3s
2️⃣ Поиск медленных сервисов
systemd-analyze blame
Этот список покажет службы, которые загружаются дольше всего:
10.543s networkd-wait-online.service
3.213s apt-daily.service
1.145s snapd.service
Самый медленный - networkd-wait-online.service. Его можно отключить, если он не нужен:
sudo systemctl disable --now networkd-wait-online.service
3️⃣ Граф зависимостей сервисов. Чтобы увидеть все зависимости и их время загрузки, используйте:
systemd-analyze critical-chain
Этот граф покажет какие службы блокируют запуск других.
📌 Если какая-то служба загружается слишком долго, её можно отключить или перевести в "ленивый" запуск:
sudo systemctl disable имя_сервиса
sudo systemctl mask имя_сервиса
4️⃣ Визуализация загрузки в SVG. Чтобы построить график загрузки системы, выполните:
systemd-analyze plot > boot.svg
Откройте boot.svg в браузере - увидите наглядную диаграмму загрузки сервисов.
5️⃣ Ускорение загрузки с systemctl
Отключите ненужные службы
sudo systemctl disable --now service_name
Включите параллельную загрузку. В файле /etc/default/grub замените строку:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
на
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.legacy_boot=false"
Затем примените изменения:
sudo update-grub
BashTex 📱 #linux2 524
Изменение приоритета процессов без их перезапуска
Когда система начинает тормозить из-за прожорливого процесса, многие просто убивают его (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
2 524
Редактирование и повторный запуск команд из истории
Часто ли бывает, что нужно повторить или поправить команду из истории? Да. Вместо того чтобы пролистывать её через 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
2 524
Настройка 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 #networks2 524
Создание собственных горячих клавиш в терминале
Хотите сделать работу в терминале удобнее и быстрее? Используйте
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 #utils2 524
Настройка удалённого аудита логов с 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 #utils2 524
Сжатие логов в реальном времени
Логи быстро накапливаются и могут занимать гигабайты дискового пространства. Вместо того чтобы ждать ротации логов, можно сжимать их в реальном времени без потери данных, используя
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 #utils2 524
Выполнение команд с ограничением по времени
Иногда нужно запустить команду, но ограничить её время выполнения. Например, если программа зависла или работает слишком долго. Для этого используется команда
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 #utils2 524
Краткие и понятные мануалы вместо 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 #utils2 524
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 #utils2 524
Сжатые инкрементные бэкапы
Если нужен эффективный, сжатый и зашифрованный способ делать резервные копии, то 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
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
