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

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

Реклама: @dad_admin
Download Telegram
mtr vs traceroute: анализ сетевых маршрутов

Когда нужно диагностировать сетевые проблемы, чаще всего используют traceroute или mtr. Оба инструмента помогают определить путь пакетов до целевого хоста, но mtr значительно превосходит traceroute по функциональности. Разберем различия.

▪️traceroute - классический анализ маршрута

traceroute показывает последовательность узлов, через которые проходит пакет до цели.


traceroute bashtex.com

1 192.168.1.1 (192.168.1.1) 1.234 ms 1.567 ms 1.678 ms
2 10.0.0.1 (10.0.0.1) 2.345 ms 2.678 ms 2.789 ms
3 203.0.113.1 (203.0.113.1) 10.345 ms 11.456 ms 12.567 ms


📌 Показывает только один запуск, без динамики.

▪️ mtr - интерактивный анализ сети

mtr комбинирует traceroute и ping, предоставляя динамическое обновление маршрута.


mtr bashtex.com

HOST: myhost Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.1.1 0.0% 10 1.2 1.3 1.0 1.5 0.2
2.|-- 10.0.0.1 0.0% 10 2.4 2.5 2.2 3.0 0.3
3.|-- 203.0.113.1 10.0% 10 10.4 11.2 10.0 13.5 1.2


📌Отличия от traceroute:

Постоянно обновляет данные (динамический анализ).
Показывает потерю пакетов (Loss%), среднее и максимальное время отклика (Avg, Wrst).
Удобно для выявления нестабильных узлов.

💡 Когда использовать?

traceroute - если нужен единоразовый снимок маршрута.
mtr - если важно видеть динамику и выявить нестабильные узлы.

BashTex 📱 #linux #networks
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Никаких Windows в этом доме!

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19🫡7👍1🔥1
Масштабируемое развертывание приложений с Bash и Docker

😎 Основная идея:

Проверять текущую загрузку CPU/памяти
Автоматически запускать дополнительные контейнеры при высокой нагрузке
Останавливать лишние контейнеры при снижении нагрузки

▪️ Bash-скрипт для масштабирования


#!/bin/bash

APP_NAME="myapp"
IMAGE="myapp_image"
LIMIT=70 # Порог загрузки CPU в процентах
MAX_CONTAINERS=5

# Получаем текущую загрузку CPU
CPU_LOAD=$(awk '{print $1}' <(grep 'cpu ' /proc/stat | awk '{print ($2+$4)*100/($2+$4+$5)}'))

# Получаем текущее количество запущенных контейнеров
RUNNING_CONTAINERS=$(docker ps -q -f "name=$APP_NAME" | wc -l)

if (( $(echo "$CPU_LOAD > $LIMIT" | bc -l) )); then
if (( RUNNING_CONTAINERS < MAX_CONTAINERS )); then
echo "Высокая нагрузка ($CPU_LOAD%). Запускаем новый контейнер..."
docker run -d --name "$APP_NAME-$RUNNING_CONTAINERS" $IMAGE
else
echo "Достигнут лимит контейнеров ($MAX_CONTAINERS)."
fi
else
if (( RUNNING_CONTAINERS > 1 )); then
STOP_CONTAINER=$(docker ps -q -f "name=$APP_NAME" | tail -n 1)
echo "Нагрузка низкая ($CPU_LOAD%). Останавливаем контейнер $STOP_CONTAINER..."
docker stop $STOP_CONTAINER && docker rm $STOP_CONTAINER
fi
fi


⚙️ Как использовать?

1. Сохраните скрипт, например, как autoscale.sh
2. Сделайте его исполняемым:


chmod +x autoscale.sh


3. Настройте запуск через cron (например, каждые 5 минут):


crontab -e


Добавьте строку:


*/5 * * * * /path/to/autoscale.sh >> /var/log/autoscale.log 2>&1


🏳️ Что получаем:

При нагрузке выше 70% добавляются контейнеры
При снижении нагрузки контейнеры удаляются
Управление происходит автоматически

BashTex 📱 #bash
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🫡1
Автоматическое монтирование сетевых папок при загрузке системы

Если вам нужно подключать сетевые папки автоматически при старте системы, лучше всего использовать /etc/fstab или systemd automount. Разберем оба способа.

1️⃣ Использование /etc/fstab. Добавьте строку в /etc/fstab, чтобы система монтировала папку при загрузке:


//192.168.1.100/share /mnt/share cifs username=user,password=pass,iocharset=utf8,_netdev 0 0


//192.168.1.100/share - путь к папке на сервере
/mnt/share - локальная точка монтирования
cifs - используемый протокол (для Windows/Samba)
_netdev - монтирование после установки сети


⚠️ После изменения /etc/fstab примените команду:


mount -a


2️⃣ Автоматическое монтирование через systemd. Создайте юнит /etc/systemd/system/mnt-share.mount:


[Unit]
Denoscription=Автоматическое монтирование сетевой папки
After=network-online.target

[Mount]
What=//192.168.1.100/share
Where=/mnt/share
Type=cifs
Options=username=user,password=pass,iocharset=utf8

[Install]
WantedBy=multi-user.target


Затем включите монтирование:


systemctl daemon-reload
systemctl enable --now mnt-share.mount


💡 Какой способ выбрать?

fstab - если подключение постоянно и предсказуемо
systemd - если нужна гибкость и управление через systemctl

BashTex 📱 #linux #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥1
Создание зашифрованных контейнеров с cryptsetup и LUKS

LUKS (Linux Unified Key Setup) + cryptsetup позволяют создавать зашифрованные контейнеры, доступ к которым можно получить только после ввода пароля.

📦 Что можно хранить в зашифрованном контейнере?

🔹 Личные файлы и документы
🔹 Бэкапы с конфиденциальными данными
🔹 Временные файлы, которые нужно удалять без следов

🧑‍💻 Создание зашифрованного контейнера

1️⃣ Создаем файл-контейнер. Допустим, нам нужен контейнер размером 1 ГБ:


dd if=/dev/zero of=secure.img bs=1M count=1024


2️⃣ Настраиваем LUKS-шифрование


cryptsetup luksFormat secure.img


⚠️ Важно: Этот шаг удалит все данные в файле!

При появлении запроса укажите сложный пароль для доступа к контейнеру.

3️⃣ Открываем зашифрованный контейнер


cryptsetup luksOpen secure.img secure_container


Теперь в системе появился виртуальный шифрованный диск /dev/mapper/secure_container.

4️⃣ Форматируем в файловую систему


mkfs.ext4 /dev/mapper/secure_container


5️⃣ Монтируем и используем


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 📱 #linux #security
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5
Скрипт автоматического создания и удаления временных файлов

Временные файлы нужны для логов, кэша и промежуточных вычислений, но если их не удалять – они засоряют систему. Сегодня про то, как автоматизировать их создание и удаление с помощью Bash и mktemp.

Создание временных файлов и директорий. Используем 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 при завершении скрипта – даже если он аварийно прерван.

👩‍🎨 Скрипт для очистки старых временных файлов. Удалим файлы старше 1 дня в /tmp:


find /tmp -type f -mtime +1 -delete


Для папок:


find /tmp -type d -empty -mtime +1 -exec rmdir {} \;


🤖 Добавим в crontab ежедневную очистку /tmp:


0 3 * * * find /tmp -type f -mtime +1 -delete


В 3 часа ночи старые временные файлы будут автоматически удаляться.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Вошли и вышли, приключение на 15 минут 🪞

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17🫡1
stdbuf - отключение буферизации вывода в командах

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

🚪 Как отключить буферизацию? Запустим ping, но без задержек в выводе:


stdbuf -oL ping 8.8.8.8


-oL - отключает буферизацию вывода (line-buffered mode). Теперь каждая строка появляется сразу.

Для ошибок (stderr):


stdbuf -eL some_command


👀 Использование с пайпами. Некоторые команды задерживают вывод в пайпах. Например, grep в цепочке:


ping 8.8.8.8 | grep "time="


Ничего не показывает? Это из-за буферизации! Исправляем:


ping 8.8.8.8 | stdbuf -oL grep "time="


⚡️ Полезные примеры

1️⃣ Логирование в реальном времени


stdbuf -oL tail -f /var/log/syslog | grep "error"


2️⃣ Скрипт без задержек в выводе


#!/bin/bash
stdbuf -o0 my_noscript.sh


-o0 полностью отключает буферизацию.

3️⃣ Буферизация при вводе


stdbuf -i0 -o0 -e0 cat


Позволяет мгновенно обрабатывать ввод/вывод.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
This media is not supported in your browser
VIEW IN TELEGRAM
Ты бл#, ты сказал, что ты шаришь в этой теме..

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13😁11🎅4👨‍💻1🫡1🎄1
Вывод списка установленных пакетов по дате

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