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

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

Реклама: @dad_admin
Download Telegram
Масштабируемое развертывание приложений с 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
Пути назад нет

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