ch
Feedback
BashTex | Linux

BashTex | Linux

前往频道在 Telegram

Авторский канал для тех, кто хочет глубже погрузиться в мир Linux. Подойдет для разработчиков, системных администраторов и DevOps Реклама: @dad_admin

显示更多
2 523
订阅者
-224 小时
-67
无数据30
帖子存档
Как защитить ключи SSH с помощью ssh-agent SSH-ключи - это один из наиболее безопасных способов аутентификации в Linux-системах. Но при частом использовании ключей возникает риск компрометации, особенно если хранить их в незашифрованном виде или вводить пароль каждый раз. Здесь на помощь приходит ssh-agent, который позволяет безопасно управлять ключами и упрощает доступ к серверам. ssh-agent - это демон, который управляет вашими SSH-ключами в памяти. Он:
Хранит расшифрованные ключи во временном хранилище. Позволяет подключаться к серверам без повторного ввода пароля. Устраняет необходимость прямого хранения ключей на диске в незашифрованном виде.
Настройка ssh-agent 1. Запуск ssh-agent. Перед началом работы убедитесь, что ssh-agent запущен:

eval "$(ssh-agent -s)"
Вывод команды:

Agent pid 12345
2. Добавление ключей в ssh-agent. Чтобы добавить ваш приватный ключ:

ssh-add ~/.ssh/id_rsa
Если ключ защищён паролем, вам потребуется ввести его один раз. После этого ключ останется активным в памяти до завершения сессии или перезагрузки. Просмотр добавленных ключей. Чтобы проверить, какие ключи сейчас управляются агентом:

ssh-add -l
Вывод:

2048 SHA256:abc12345... user@host (RSA)
Удаление ключей из ssh-agent. Чтобы удалить все ключи из агента:

ssh-add -D
Или конкретный ключ:

ssh-add -d ~/.ssh/id_rsa
Дополнительная защита с помощью временных ограничений. Вы можете настроить автоматическое удаление ключей через определённое время:

ssh-add -t 3600 ~/.ssh/id_rsa
Здесь 3600 - это время жизни ключа в секундах (1 час). Автоматизация сессий. Для упрощения работы можно настроить автоматический запуск ssh-agent. Пример для Bash. Добавьте в файл ~/.bashrc:

if ! pgrep -u "$USER" ssh-agent > /dev/null; then
    eval "$(ssh-agent -s)"
fi
Практическое применение. Удобный доступ к удалённым серверам С запущенным ssh-agent вы можете подключаться к удалённым серверам, не вводя пароль:

ssh user@server
Работа с Git-репозиториями. ssh-agent упрощает работу с приватными Git-репозиториями:

git pull
git push
Советы по безопасности 👍 Шифруйте приватные ключи. Даже с использованием ssh-agent храните ключи в зашифрованном виде. ❗️ Не оставляйте агента активным на публичных машинах. Завершайте сессию с ssh-agent, чтобы предотвратить доступ к памяти. ❗️ Используйте ForwardAgent с осторожностью. Если необходимо перенаправить агент на другой сервер, добавьте в ~/.ssh/config:

Host remote-server
    ForwardAgent yes
BashTex 📱 #linux #security

Продвинутое копирование файлов и каталогов с исключениями Копирование - одна из самых базовых задач в Linux. Однако, если вам нужно исключить определённые файлы или каталоги при копировании, стандартная команда cp требует небольшой хитрости. Разберём, как это сделать и при чём здесь rsync. Когда и зачем исключать файлы?
Чтобы пропустить временные файлы (*.tmp, *.swp). Чтобы избежать копирования тяжёлых или ненужных данных. Для создания точных копий без избыточной информации.
Исключения с помощью cp и find. Хотя cp сам по себе не поддерживает флаг исключений, можно комбинировать его с другими командами, такими как find. Пример: исключение файлов *.log:

find source_dir -type f ! -name '*.log' -exec cp --parents {} target_dir \;
Разбор: find source_dir - ищет файлы в директории. ! -name '*.log' - исключает файлы с расширением .log. -exec cp --parents {} - копирует файлы с сохранением структуры каталогов. Использование rsync для исключений. Для более гибкого копирования предпочтительнее использовать rsync, так как он поддерживает исключения через опцию --exclude. Пример: исключение определённой папки и файлов

rsync -av --exclude 'temp/' --exclude '*.log' source_dir/ target_dir/
Разбор: -a - архивный режим (сохраняет права, ссылки, структуру). -v - выводит процесс копирования. --exclude - исключает указанную папку или файлы. Вывод команды:

sending incremental file list
./
file1.txt
file2.txt

sent 125 bytes  received 40 bytes  330.00 bytes/sec
total size is 245  speedup is 1.41
Исключение на уровне шаблонов. Если нужно исключить файлы по сложному шаблону, используйте файл исключений. Пример: исключение через файл шаблонов Создайте файл exclude.txt:

*.log
temp/
backup/
Выполните команду:

rsync -av --exclude-from='exclude.txt' source_dir/ target_dir/
Копирование больших данных с исключениями. Если копируете большие объёмы данных, используйте rsync вместо cp, так как он эффективнее обрабатывает большие деревья файлов и поддерживает докопирование (resume). Докопирование файлов после прерывания:

rsync -av --exclude '*.tmp' source_dir/ target_dir/
Хотя cp - базовый инструмент, его возможности можно расширить комбинацией с find для сложных задач. Для регулярной работы с исключениями rsync остаётся лидером. BashTex 📱 #linux #utils

Аудит Linux-системы с Lynis: от установки до анализа отчёта Lynis - это инструмент командной строки для аудита безопасности, соответствия стандартам и повышения производительности Linux и других UNIX-систем. Он прост в использовании, не требует установки агента и может запускаться на работающей системе. Установка Lynis Установите Lynis из официального репозитория:

sudo apt update
sudo apt install lynis
Для систем на базе RHEL:

sudo yum install lynis
Альтернативно, скачайте с GitHub 📱:

git clone https://github.com/CISOfy/lynis.git
cd lynis
sudo ./lynis audit system
Запуск аудита. Для базового аудита системы используйте:

sudo lynis audit system
Команда выполнит:
Проверку конфигурации ядра. Анализ файлов и папок. Проверку безопасности сети. Оценку производительности.
Пример вывода аудита:

[+] Kernel Hardening
   - Enable kernel module loading: OK
   - Kernel logging level: OK
   - Unused kernel modules: Warning

[+] File Integrity
   - Check /etc/passwd: OK
   - Check /etc/shadow: OK

Hardening index: 78/100
Suggestions: 5
Анализ отчёта. После выполнения аудита, Lynis предоставляет список рекомендаций для улучшения безопасности. Журнал рекомендаций: Все советы сохраняются в /var/log/lynis.log.

less /var/log/lynis.log
Улучшение индекса безопасности: Улучшите настройки по рекомендациям, например: Установите обновления ядра. Убедитесь, что файлы /etc/passwd и /etc/shadow защищены. Включите SELinux или AppArmor для повышения безопасности. Проверка конкретных компонентов. Чтобы провести аудит конкретного компонента, например, SSH:

sudo lynis audit system --tests-from-group ssh
Почему Lynis полезен?
Простой и понятный анализ. Lynis показывает текущие проблемы и предлагает их решения. Гибкость. Подходит для серверов, десктопов и даже встроенных систем. Автоматизация. Можно интегрировать в CI/CD для регулярного аудита.
BashTex 📱 #linux #security

Как писать эффективные функции в Bash: оптимизация и практические примеры Функции в Bash помогают организовать код, улучшить читаемость и сократить дублирование. Однако неправильное использование может снизить производительность скриптов. Давайте разберёмся, как писать эффективные функции, избегая ошибок. Что такое функция в Bash?
Функция - это именованный блок кода, который можно вызывать многократно. Она определяет действия, выполняемые скриптом, и упрощает повторяющиеся операции.
Пример базовой функции:

hello_world() {
  echo "Hello, World!"
}
hello_world
Принципы написания эффективных функций 1. Используйте параметры вместо глобальных переменных. Глобальные переменные могут вызывать неожиданные ошибки. Передавайте данные в функции через параметры:

calculate_sum() {
  echo $(( $1 + $2 ))
}
calculate_sum 5 10  # Вывод: 15
2. Проверяйте входные данные. Защитите функции от некорректного ввода:

safe_division() {
  if [ "$2" -eq 0 ]; then
    echo "Ошибка: деление на ноль!"
    return 1
  fi
  echo $(( $1 / $2 ))
}
safe_division 10 0  # Вывод: Ошибка: деление на ноль!
3. Возвращайте значения через echo или return. Используйте echo для вывода данных, return для статусов завершения. Практические примеры 1. Подсчёт количества файлов в директории

count_files() {
  local dir=$1
  if [ -d "$dir" ]; then
    echo "$(ls "$dir" | wc -l)"
  else
    echo "Директория $dir не существует."
    return 1
  fi
}
count_files /etc
2. Кеширование результатов для оптимизации. При повторных вычислениях можно сохранить результат в переменной:

cached_command() {
  local cache_file="/tmp/command_output"
  if [ -f "$cache_file" ]; then
    cat "$cache_file"
  else
    echo "Выполняется команда..."
    ls /etc > "$cache_file"
    cat "$cache_file"
  fi
}
cached_command
3. Параллельная обработка с помощью функций

process_file() {
  echo "Обработка файла $1"
  sleep 2  # Эмуляция длительной задачи
}
export -f process_file
find . -type f -name "*.log" | xargs -n 1 -P 4 -I {} bash -c 'process_file "$@"' _ {}
Инструменты для отладки функций 1. Добавляйте трассировку.

set -x  # Включить трассировку
2. Проверяйте на ошибки.

set -e  # Завершить скрипт при ошибке
Советы по оптимизации 1. Минимизируйте вызовы внешних команд. Вместо ls | wc -l используйте встроенные функции Bash:

find . -type f | wc -l
2. Используйте встроенные массивы. Для работы с множеством значений массивы быстрее и удобнее, чем строки:

my_array=(file1 file2 file3)
for file in "${my_array[@]}"; do
  echo "Обрабатывается $file"
done
Эффективные функции - залог быстрого и надёжного Bash-скрипта. Соблюдайте лучшие практики, оптимизируйте код, и ваши скрипты станут мощными инструментами автоматизации. BashTex 📱 #bash

Как ускорить Bash-скрипты с помощью xargs и параллельных задач Когда нужно обработать множество файлов, выполнить команды для каждой строки или справиться с большим объёмом задач, утилита xargs может стать вашим секретным оружием. Её главное преимущество - возможность запускать команды параллельно, экономя время и ресурсы. Что делает xargs?
xargs берёт стандартный ввод или вывод другой команды, разбивает его на части и передаёт в указанную команду. Это незаменимо для обработки больших объёмов данных.
Параллельная обработка с xargs Флаг -P позволяет запускать несколько процессов одновременно, значительно ускоряя выполнение задач. Пример 1: Параллельное сжатие файлов. Представьте, что нужно сжать множество файлов:

find /path/to/files -type f -name "*.log" | xargs -P 4 -I {} gzip {}
-P 4 - запускает 4 процесса одновременно. -I {} - заменяет {} в команде именами файлов. gzip - сжимает каждый найденный файл. Результат: ускоренное сжатие за счёт одновременной обработки файлов. Пример 2: Проверка доступности множества хостов. Список IP-адресов в файле hosts.txt:

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
Скрипт для одновременной проверки доступности:

cat hosts.txt | xargs -P 10 -I {} ping -c 3 {}
-P 10 - запускает до 10 проверок одновременно. ping -c 3 {} - отправляет 3 пакета на каждый IP. Результат: мгновенная проверка множества хостов. Пример 3: Параллельное копирование больших файлов. Список файлов в files.txt:

file1.doc
file2.doc
file3.doc
Копирование файлов в другую директорию:

cat files.txt | xargs -P 3 -I {} cp {} /path/to/destination/
-P 3 - выполняет до 3 копирований одновременно. Почему это быстрее?
Многозадачность. Вместо обработки задач по очереди, они выполняются параллельно. Оптимизация ресурсов. Загружаются все ядра процессора. Гибкость. xargs работает с любыми командами и аргументами.
Полезные флаги xargs -n N - передаёт по N аргументов в каждую команду.

echo "file1 file2 file3" | xargs -n 2 echo
Вывод:

file1 file2
file3
--max-procs (или -P) - ограничивает количество параллельных процессов. --- Использование xargs с параллельной обработкой - это простой способ ускорить выполнение рутинных задач. Сжатие, копирование, сканирование - всё это можно делать быстрее и эффективнее. BashTex 📱 #linux #utils

Создание меню в терминале с помощью команды select Если вы хотите сделать ваш Bash-скрипт более интерактивным, команда select - это простой и удобный способ создать меню в терминале. Она автоматически обрабатывает ввод пользователя, предоставляя список опций, и позволяет легко работать с выбранным значением. Синтаксис команды select

select переменная in список_опций; do
  команды
done
переменная — переменная, куда записывается выбранная пользователем опция. список_опций — перечень доступных опций. команды — действия, которые выполняются в зависимости от выбора.
Пример 1: Простое меню. Создадим базовое меню для выбора действий:

#!/bin/bash

echo "Выберите действие:"
select option in "Посмотреть время" "Показать директорию" "Выход"; do
  case $REPLY in
    1) echo "Текущее время: $(date)" ;;
    2) echo "Текущая директория: $(pwd)" ;;
    3) echo "Выход..."; break ;;
    *) echo "Неверный выбор. Попробуйте снова." ;;
  esac
done
Пример вывода:

1) Посмотреть время
2) Показать директорию
3) Выход
#? 1
Текущее время: Tue Dec 19 14:12:45 UTC 2024
#? 3
Выход...
Особенности команды select
$REPLY: Автоматически содержит номер выбранной опции. Удобство: Если пользователь вводит неправильный номер, меню просто повторяется. Гибкость: Подходит для интерактивных сценариев, где требуется выбор.
Пример 2: Динамическое меню с файлами. Скрипт для выбора файла из текущей директории:

#!/bin/bash

echo "Выберите файл из списка:"
select file in *; do
  if [ -n "$file" ]; then
    echo "Вы выбрали: $file"
    break
  else
    echo "Неверный выбор. Попробуйте снова."
  fi
done
Пример вывода:

1) file1.txt
2) file2.log
3) script.sh
#? 2
Вы выбрали: file2.log
Использование в реальных задачах
Меню управления: Создавайте интерактивные скрипты для настройки окружения. Обработка файлов: Выбирайте файлы для анализа или обработки. Автоматизация: Упрощайте выбор действий в автоматизированных системах.
Совет: Используйте команду PS3 для настройки пользовательского приглашения:

PS3="Введите номер действия: "
Пример с использованием PS3:

Введите номер действия: 
--- Команда select - простой инструмент для создания интуитивно понятных меню в терминале. Она отлично помогает сделать скрипты более интерактивными и удобными. BashTex 📱 #linux #utils

Как использовать Netdata для реального времени мониторинга сервера Если вы ищете удобный и визуально понятный инструмент для мониторинга серверов в реальном времени, то Netdata - отличный выбор. Этот легковесный инструмент позволяет отслеживать состояние системы, процессов, сети и даже приложений, предоставляя мгновенные визуализации. Преимущества:
Мониторинг в реальном времени. Все данные обновляются с частотой до одной секунды. Простая установка. Установить и настроить Netdata можно за считанные минуты. Поддержка множества метрик. CPU, память, диски, сети, базы данных и многое другое. Визуализация. Графики удобны и хорошо читаются прямо в веб-интерфейсе.
Установка Netdata. На большинстве дистрибутивов Linux достаточно выполнить одну команду:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)
После установки веб-интерфейс будет доступен по адресу: http://<IP-адрес-сервера>:19999 Базовые метрики. Netdata автоматически начинает мониторинг: CPU: загрузка и частота. Память: использование и своп. Диски: I/O операции и латентность. Сеть: входящий и исходящий трафик. Сервисы: Apache, Nginx, MySQL, PostgreSQL, Redis и другие. Мониторинг кастомных метрик. Netdata позволяет добавлять пользовательские плагины для мониторинга специфичных приложений. Например, для MySQL: Откройте /etc/netdata/python.d/mysql.conf. Настройте доступ к базе данных:

local:
  user: 'root'
  pass: 'password'
  host: 'localhost'
  port: 3306
Перезапустите Netdata:

sudo systemctl restart netdata
Интеграция с другими системами. Netdata поддерживает экспорт метрик в Prometheus, Grafana и другие системы. Пример настройки интеграции с Prometheus: Откройте /etc/netdata/netdata.conf и включите Prometheus:

[prometheus]
enabled = yes
Перезапустите Netdata. Теперь данные Netdata доступны для анализа в Grafana. Преимущества мониторинга в реальном времени Диагностика проблем: мгновенное выявление узких мест (например, высокий %iowait или перегрузка сети). Анализ трендов: Netdata сохраняет метрики для последующего анализа. Простота: доступен даже новичкам в мониторинге. BashTex 📱 #utils #monitoring

Сравнение лог-агрегаторов: ELK vs Loki Когда речь заходит о лог-агрегаторах, которые помогают управлять огромными объемами журналов, два наиболее популярных решения - это ELK (Elasticsearch, Logstash, Kibana) и Loki от Grafana Labs. Давайте разберёмся, какое из них лучше выбрать для ваших задач. ELK: Мощь, гибкость и масштабируемость Что такое ELK? ELK - это стек из трёх инструментов: Elasticsearch - хранение и поиск по журналам. Logstash - сбор и обработка данных. Kibana - визуализация и анализ. Плюсы:
Мощный поиск. Elasticsearch поддерживает сложные запросы и анализ текста. Гибкость. Легко интегрируется с разными источниками данных. Расширяемость. Подходит для больших и сложных инфраструктур. Визуализация. Kibana предоставляет богатый набор инструментов для графиков и дашбордов.
Минусы:
Требовательность к ресурсам. ELK требует значительных вычислительных мощностей. Сложность настройки. Развертывание и поддержка требуют опыта. Высокая стоимость. Для больших кластеров может стать дорого.
Loki: Простота и интеграция с Grafana Что такое Loki? Loki - это легковесный лог-агрегатор, оптимизированный для работы с метриками. Вместо хранения сырых данных, как ELK, Loki использует метаинформацию (лейблы). Плюсы:
Лёгкость. Потребляет меньше ресурсов по сравнению с ELK. Интеграция с Grafana. Loki идеально подходит для тех, кто уже использует Grafana. Скорость развертывания. Установка и настройка гораздо проще. Экономия хранилища. Хранит данные в оптимизированном формате.
Минусы:
Ограниченные возможности поиска. Loki не такой мощный, как Elasticsearch. Нет обработки данных. В отличие от Logstash, Loki не поддерживает сложные трансформации. Молодой продукт. Функциональность продолжает развиваться.
❗️ Когда выбрать ELK? Вам нужен мощный поиск и анализ логов. Вы работаете с большими объёмами данных. Инфраструктура включает сложные сценарии мониторинга. Вы готовы инвестировать в ресурсы и опыт. ❗️ Когда выбрать Loki? Вы уже используете Grafana. Вам нужен простой инструмент для логирования. Ресурсы сервера ограничены. В приоритете экономия на хранилище. --- Если вы ищете гибкость и мощные аналитические возможности, ELK - ваш выбор. Если важны простота, лёгкость и интеграция с Grafana, то Loki станет отличным решением. BashTex 📱 #linux #utils

Мониторинг производительности с iostat: углубленный разбор Что такое iostat?
iostat (Input/Output Statistics) — это утилита из пакета sysstat, которая собирает данные о производительности: Использование CPU. Статистика ввода/вывода для устройств и разделов. Производительность файловой системы.
Примеры использования 1. Базовая статистика. Просто вызовите iostat без параметров, чтобы увидеть общую картину:

iostat
Вывод:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          12.34    0.00   3.21     2.45     0.00   82.00

Device            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              45.00       123.45       678.90   1234567    9876543
%iowait: Время, которое CPU ждёт операций ввода/вывода. tps: Количество операций ввода/вывода в секунду. kB_read/s и kB_wrtn/s: Скорость чтения и записи. 2. Обновление в реальном времени. Вывод каждые 2 секунды:

iostat 2
3. Статистика только для дисков. Если интересуют только устройства хранения:

iostat -d
Вывод:

Device            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              45.00       123.45       678.90   1234567    9876543
4. Производительность процессора. Анализ нагрузки на CPU:

iostat -c
Вывод:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          10.00    0.00   5.00     1.00     0.00   84.00
5. Статистика для конкретного устройства. Чтобы проанализировать только диск sda:

iostat -d sda
Переключение на MB для удобства:

iostat -m
6. Детализация загрузки системы. iostat может выводить расширенные данные:

iostat -x
Вывод:

Device            rrqm/s   wrqm/s     r/s     w/s   rkB/s   wkB/s avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sda                10.00    20.00   30.00   40.00   123.00  456.00   33.40     0.10   0.50   0.30    0.70    0.40   85.00
%util: Показывает, насколько устройство занято. Практическое применение. 1. Идентификация узких мест. Если %iowait высок, это сигнал, что диск не справляется с запросами. Высокий %util (>90%) на устройстве указывает на перегрузку. 2. Мониторинг в реальном времени. Используйте комбинацию с watch:

watch -n 1 'iostat -x'
3. Сохранение данных для анализа. Чтобы сохранить статистику для последующего анализа:

iostat -x > iostat_log.txt
--- iostat - это незаменимый инструмент для мониторинга ввода/вывода и нагрузки на процессор. Он помогает быстро находить узкие места в работе серверов и принимать меры для их устранения. BashTex 📱 #linux #utils

Стресс-тестирование сервера с помощью stress-ng Когда сервер начинает подводить под нагрузкой, важно понять его пределы. Именно для таких задач существует stress-ng - инструмент для стресс-тестирования аппаратного и программного обеспечения. Что такое stress-ng?
Это утилита, которая генерирует нагрузку на разные компоненты системы: CPU, память, диски, сеть и т.д. С её помощью можно проверить, как сервер справляется с нагрузкой, и выявить узкие места.
Установка stress-ng Для Ubuntu/Debian:

sudo apt update
sudo apt install stress-ng -y
Для CentOS/RHEL:

sudo yum install epel-release -y
sudo yum install stress-ng -y
Примеры использования Стресс-тест CPU. Задействуем 4 ядра процессора на 60 секунд:

stress-ng --cpu 4 --timeout 60s
Вывод:

stress-ng: info:  [1002] stress-ng: dispatching hogs: 4 cpu
stress-ng: info:  [1002] stress-ng: successful run completed in 60.01s
Нагрузка на память. Тестируем систему, выделяя 2 ГБ памяти:

stress-ng --vm 1 --vm-bytes 2G --timeout 60s
Вывод:

stress-ng: info:  [1003] stress-ng: dispatching hogs: 1 vm
stress-ng: info:  [1003] stress-ng: memory allocated: 2048 MB
Одновременная нагрузка на CPU и диск. Смешанный тест, нагружающий процессор и создающий 2 потока записи на диск:

stress-ng --cpu 4 --hdd 2 --timeout 90s
Нагрузка на файловую систему. Тест создания файлов и директорий:

stress-ng --temp-path /tmp --timeout 30s --touch 1000
Проверьте /tmp для созданных файлов. Имитация пикового использования системы. Задействуем все ресурсы:

stress-ng --cpu 4 --io 4 --vm 2 --vm-bytes 1G --timeout 120s
Анализ результатов. Вместе с утилитой можно использовать мониторинг: htop - для наблюдения за нагрузкой на CPU и RAM. iostat - для анализа ввода/вывода. dstat - для комбинированного мониторинга. Пример с htop:

stress-ng --cpu 4 --timeout 30s &
htop
--- В проде такое лучше не запускать, балуйтесь на тестовых серверах 🎅 BashTex 📱 #linux #utils

Автоматизация управления с помощью Ansible Ansible - это инструмент для управления конфигурацией, автоматизации развёртывания и управления инфраструктурой. Простота использования, отсутствие необходимости в агентах и возможность масштабирования делают его идеальным выбором как для небольших команд, так и для крупных организаций. В этой статье разберём, как начать работу с Ansible, автоматизировать задачи и повысить эффективность управления серверами. Что такое Ansible? Ansible - это инструмент, основанный на архитектуре "push", который использует SSH для взаимодействия с серверами. Основные преимущества:
Лёгкость установки и настройки. YAML-формат для описания задач (Playbooks). Модульная структура. Поддержка сотен модулей для работы с различными системами.
1. Установка на управляющей машине Для Ubuntu:

sudo apt update
sudo apt install ansible -y
Для CentOS:

sudo yum install epel-release -y
sudo yum install ansible -y
2. Настройка SSH-доступа к серверам. Ansible использует SSH для подключения к узлам. Настройте безпарольный доступ:

ssh-keygen -t rsa
ssh-copy-id user@remote_server
3. Настройка инвентаря. Ansible использует файл инвентаря для описания узлов. По умолчанию это /etc/ansible/hosts. Пример файла:

[web_servers]
192.168.1.101
192.168.1.102

[db_servers]
192.168.1.201
192.168.1.202
Вы можете создавать группы узлов и применять конфигурации ко всем серверам в группе. 4. Написание Playbook. Playbook - это файл в формате YAML, который описывает, что нужно сделать на целевых узлах. Пример: Установка Apache на веб-серверах

- name: Установка Apache
  hosts: web_servers
  become: true  # Повышение привилегий до root
  tasks:
    - name: Убедиться, что Apache установлен
      apt:
        name: apache2
        state: present
    - name: Запустить и включить Apache
      service:
        name: apache2
        state: started
        enabled: true
Запуск Playbook:

ansible-playbook install_apache.yml
--- Автоматизация задач 1. Обновление пакетов на всех серверах

- name: Обновление всех пакетов
  hosts: all
  become: true
  tasks:
    - name: Обновить пакеты
      apt:
        update_cache: yes
        upgrade: dist
2. Создание пользователей

- name: Создание пользователя devops
  hosts: all
  become: true
  tasks:
    - name: Создать пользователя
      user:
        name: devops
        state: present
        groups: sudo
3. Копирование конфигурационных файлов

- name: Копирование файла конфигурации
  hosts: web_servers
  become: true
  tasks:
    - name: Копировать конфигурацию Nginx
      copy:
        src: /path/to/nginx.conf
        dest: /etc/nginx/nginx.conf
        mode: '0644'
Проверка состояния серверов. Для быстрого выполнения команды на узлах используйте модуль ping:

ansible all -m ping
Пример выполнения команды uptime на всех узлах:

ansible all -m command -a "uptime"
--- Дополнительные советы Используйте переменные: Вы можете задавать переменные в Playbook, инвентаре или через командную строку.

vars:
  nginx_port: 8080
Шифруйте секреты: Ansible Vault позволяет хранить конфиденциальные данные.

ansible-vault encrypt secret.yml
Интеграция с CI/CD: Ansible легко интегрируется с Jenkins, GitLab CI и другими системами. Используйте Ansible для настройки серверов, развертывания приложений, управления конфигурациями и многого другого. Овладев этим инструментом, вы сможете автоматизировать рутинные задачи. BashTex 📱 #linux #utils

Создание кластера Unix-серверов Кластеризация серверов в Unix - это процесс объединения нескольких серверов в единое целое для повышения надёжности, масштабируемости и производительности. Кластеры используются для задач высокой доступности (HA), распределённой обработки и балансировки нагрузки. В этой статье разберём базовые шаги по созданию кластера Unix-серверов и обеспечению их совместной работы. Что потребуется?
1. Несколько Unix-серверов. Например, Ubuntu, CentOS или другие дистрибутивы Linux/Unix. 2. Общий доступ к данным. Используем NFS или другой механизм для хранения. 3. Балансировщик нагрузки. Например, HAProxy или встроенные механизмы IPVS. 4. Программное обеспечение для кластера. Для высокой доступности можно использовать Corosync и Pacemaker.
Шаг 1: Настройка узлов 1. Обновите все системы. Перед началом убедитесь, что пакеты обновлены на всех узлах:

sudo apt update && sudo apt upgrade -y  # Для Ubuntu
sudo yum update -y                     # Для CentOS
2. Настройте хосты. Пропишите имена серверов в /etc/hosts, чтобы узлы могли видеть друг друга:

192.168.1.1 node1
192.168.1.2 node2
192.168.1.3 node3
3. Настройте SSH-доступ. Для работы кластера потребуется SSH-доступ между узлами без пароля:

ssh-keygen -t rsa  # Генерация ключа
ssh-copy-id node2  # Копирование ключа
ssh-copy-id node3
Шаг 2: Настройка общего доступа к данным (NFS) 1. Установите NFS-сервер на одном из узлов:

sudo apt install nfs-kernel-server  # Для Ubuntu
sudo yum install nfs-utils          # Для CentOS
2. Настройте экспортируемую директорию, для этого добавьте в /etc/exports:

/data/shared *(rw,sync,no_root_squash)
Примените изменения:

sudo exportfs -a
3. На других узлах подключите общий ресурс:

sudo mount 192.168.1.1:/data/shared /mnt/shared
Проверьте:

df -h
Шаг 3: Настройка кластера HA (High Availability) 1. Установите Pacemaker и Corosync, для этого на всех узлах выполните:

sudo apt install pacemaker corosync -y  # Для Ubuntu
sudo yum install pacemaker corosync -y # Для CentOS
2. Настройте Corosync. Отредактируйте файл /etc/corosync/corosync.conf и добавьте узлы:

nodelist {
    node {
        ring0_addr: node1
    }
    node {
        ring0_addr: node2
    }
    node {
        ring0_addr: node3
    }
}
totem {
    version: 2
    secauth: off
    cluster_name: unix_cluster
    transport: udpu
}
Запустите Corosync и Pacemaker:

sudo systemctl start corosync
sudo systemctl start pacemaker
sudo systemctl enable corosync
sudo systemctl enable pacemaker
3. Добавьте ресурс в кластер. Например, ресурс виртуального IP:

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 \
    ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s
Шаг 4: Проверка и управление кластером Статус кластера:

pcs status
Добавление нового узла:

pcs cluster auth newnode
pcs cluster node add newnode
Остановка кластера

pcs cluster stop --all
Шаг 5: Настройка балансировки нагрузки (опционально) Установите HAProxy для равномерного распределения нагрузки:

sudo apt install haproxy  # Для Ubuntu
sudo yum install haproxy  # Для CentOS
Настройте /etc/haproxy/haproxy.cfg:

frontend http_front
    bind *:80
    default_backend servers

backend servers
    balance roundrobin
    server node1 192.168.1.1:80 check
    server node2 192.168.1.2:80 check
    server node3 192.168.1.3:80 check
Запустите HAProxy:

sudo systemctl restart haproxy
--- Кластеризация Unix-серверов - это основа для построения надёжной инфраструктуры. Вы можете настроить кластеры для высокой доступности, балансировки нагрузки или распределённой обработки. С правильными инструментами, такими как NFS, Pacemaker и HAProxy, вы получите стабильную и масштабируемую систему. BashTex 📱 #linux #utils

Как проверить существование файла в скрипте При написании Bash-скриптов часто возникает необходимость проверить, существует ли файл (или директория), прежде чем продолжить выполнение. Давайте разберём несколько подходов с примерами. 1. Проверка существования файла. Самый простой способ проверить, существует ли файл:

if [ -e "/path/to/file" ]; then
    echo "Файл существует."
else
    echo "Файл не найден."
fi
2. Проверка, что это обычный файл. Если нужно убедиться, что это именно файл (а не директория или символическая ссылка):

if [ -f "/path/to/file" ]; then
    echo "Это файл."
else
    echo "Это не файл или его не существует."
fi
3. Проверка существования директории. Чтобы проверить, существует ли директория:

if [ -d "/path/to/directory" ]; then
    echo "Директория существует."
else
    echo "Директория не найдена."
fi
4. Проверка прав доступа к файлу. Проверить доступ на чтение:

if [ -r "/path/to/file" ]; then
    echo "Файл доступен для чтения."
fi
Проверить доступ на запись:
bash
Копировать код
if [ -w "/path/to/file" ]; then
    echo "Файл доступен для записи."
fi
Проверить доступ на выполнение:
bash
Копировать код
if [ -x "/path/to/file" ]; then
    echo "Файл доступен для выполнения."
fi
5. Проверка нескольких условий. Можно комбинировать проверки:

if [ -f "/path/to/file" ] && [ -w "/path/to/file" ]; then
    echo "Файл существует и доступен для записи."
else
    echo "Файл не существует или недоступен для записи."
fi
Пример: Реальный сценарий. Предположим, вы пишете скрипт для архивации файла, только если он существует.

#!/bin/bash

FILE="/path/to/file"
ARCHIVE="/path/to/archive"

if [ -f "$FILE" ]; then
    tar -czf "$ARCHIVE/archive.tar.gz" "$FILE"
    echo "Файл заархивирован."
else
    echo "Файл не найден. Архивация не выполнена."
fi
Полезный совет: Для проверки в одном условии часто используют флаг || (или):

[ -f "/path/to/file" ] || echo "Файл не найден."
Проверка существования файла или директории - это базовая, но важная часть автоматизации с помощью Bash. Правильное использование этих проверок позволит вашим скриптам работать надёжно и избегать ошибок. BashTex 📱 #bash

LDAP: Установка и настройка LDAP-сервера в Linux В этой статье разберём процесс установки и базовой настройки LDAP-сервера на основе OpenLDAP в Linux. 1. Установка OpenLDAP. Установка необходимых пакетов: На Ubuntu/Debian:

sudo apt update
sudo apt install slapd ldap-utils
На CentOS/RHEL:

sudo yum install openldap openldap-servers openldap-clients
sudo systemctl enable slapd
sudo systemctl start slapd
2. Инициализация и настройка LDAP-сервера 2.1. Настройка slapd через утилиту конфигурации (для Ubuntu/Debian):

sudo dpkg-reconfigure slapd
Во время настройки система запросит: DNS-домен: например, bashtex.com. Организацию: введите имя вашей компании или группы, например, BashTex Пароль администратора (admin): задайте надёжный пароль. 2.2. Проверка статуса службы. Убедитесь, что сервер работает:

sudo systemctl status slapd
3. Создание базовой структуры LDAP. Для работы LDAP необходимо задать базовую структуру: организационные единицы (OU), пользователи и группы. 3.1 Создание LDIF-файла с базовой структурой. Создайте файл base.ldif со следующим содержимым:

dn: ou=users,dc=bashtex,dc=com
objectClass: organizationalUnit
ou: users

dn: ou=groups,dc=bashtex,dc=com
objectClass: organizationalUnit
ou: groups
3.2. Применение структуры. Загрузите данные в LDAP:

ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif
Введите пароль, указанный при настройке slapd. 4. Добавление пользователей. Создайте LDIF-файл с пользователем:

dn: uid=jdoe,ou=users,dc=bashtex,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: jdoe
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/jdoe
loginShell: /bin/bash
userPassword: {SSHA}yourpasswordhash
Чтобы сгенерировать хэш пароля:

slappasswd
4.1. Загрузите пользователя в LDAP:

ldapadd -x -D "cn=admin,dc=bashtex,dc=com" -W -f user.ldif
5. Проверка LDAP. Просмотр записей в LDAP:

ldapsearch -x -LLL -b "dc=example,dc=com" "(objectClass=*)"
5.1. Поиск пользователей:

ldapsearch -x -b "ou=users,dc=example,dc=com" "(uid=jdoe)"
Дополнительная настройка 1. Установка SSL/TLS для защиты соединений: Убедитесь, что установлен certbot или аналогичный инструмент, и настройте сертификаты. Затем укажите их в конфигурации /etc/ldap/ldap.conf:

TLS_CACERT /etc/ssl/certs/ca-certificates.crt
2. Интеграция с другими сервисами: LDAP можно использовать для аутентификации пользователей в таких системах, как: SSH: настройте PAM через libpam-ldap. Web-сервисы: интеграция с Apache, Nginx. Почтовые серверы: например, Postfix или Dovecot. Установив OpenLDAP и создав базовую структуру, вы сможете расширять её для любых корпоративных нужд. BashTex 📱 #linux #security

LDAP: зачем нужен и чем помогает LDAP (Lightweight Directory Access Protocol) - это стандартный протокол для доступа и управления распределёнными каталогами данных. Если говорить проще, LDAP помогает хранить и быстро находить информацию о пользователях, группах, устройствах или других объектах в сети. Этот инструмент стал неотъемлемой частью корпоративной инфраструктуры, где нужно организовать централизованное управление данными. Давайте разберём, зачем нужен LDAP и как он облегчает жизнь системным администраторам и IT-командам. Зачем нужен LDAP? Централизованное управление пользователями Вместо того чтобы создавать отдельные учётные записи на каждом сервере или сервисе, вы можете хранить все данные пользователей в одном месте. Это значительно упрощает администрирование. Единая точка аутентификации (SSO) С помощью LDAP можно настроить единую точку входа для всех сервисов. Например, пользователь входит в систему один раз, и этот логин работает для почты, файловых серверов, систем мониторинга и других ресурсов. Упрощённое управление группами LDAP позволяет быстро добавлять, удалять и редактировать группы пользователей. Например, создайте группу «Администраторы», чтобы предоставить всем её членам доступ к определённым ресурсам. Интеграция с другими системами LDAP поддерживается большинством корпоративных приложений и служб: Сервера: Apache, Nginx, Samba. Почтовые системы: Postfix, Dovecot. Инструменты DevOps: Jenkins, GitLab. Операционные системы: Windows, macOS, Linux. Широкий охват объектов Кроме пользователей и групп, в LDAP можно хранить: Информацию о принтерах и устройствах. Политики безопасности. Структуру организации (отделы, филиалы). Как LDAP помогает в реальной жизни? 1. Управление доступом Представьте, что у вас 100 сотрудников. Вместо того чтобы вручную создавать каждому доступ к десяткам серверов, вы настраиваете LDAP. Теперь достаточно добавить пользователя в базу, и он получит нужные права. 2. Быстрый поиск данных LDAP поддерживает мощные запросы для поиска объектов. Например, можно легко найти всех сотрудников из отдела маркетинга или пользователей, чей пароль истекает через 7 дней. Пример запроса через ldapsearch :

ldapsearch -x -b "dc=example,dc=com" "(department=Marketing)"
3. Автоматизация задач LDAP позволяет автоматизировать ротацию паролей, управление правами доступа и синхронизацию данных между системами. Преимущества LDAP:
Гибкость: поддерживает сложные структуры данных и широкий набор атрибутов. Масштабируемость: подходит как для небольших компаний, так и для крупных корпораций. Безопасность: поддержка SSL/TLS для шифрования трафика. Открытые стандарты: совместим с широким спектром решений.
Кому и когда нужен LDAP? LDAP идеально подходит для компаний с:
Большим количеством сотрудников и устройств. Разнообразными сервисами, которые требуют централизованного управления доступом. Потребностью в единой системе учётных записей.
В следующей статье разберемся с установкой и настройкой BashTex 📱 #linux #utils

Неочевидно полезные опции команды ls Команда ls знакома всем, кто хоть раз работал в командной строке Linux. Но она умеет гораздо больше, чем просто перечислять файлы. Разберём несколько малоизвестных, но крайне полезных опций 1. Показываем файлы со всеми деталями: --almost-all. По умолчанию ls с опцией -a отображает все файлы, включая . и ... Но если они вам не нужны, используйте --almost-all:

ls --almost-all
.bashrc  .config  .viminfo  file1.txt  file2.txt
2. Показываем время последнего изменения: --time-style. Эта опция позволяет гибко настроить отображение времени. Например, чтобы видеть точное время:

ls -l --time-style=long-iso
-rw-r--r-- 1 user group 123 Oct 28 14:32 file1.txt
Хотите форматировать время под себя? Используйте:

ls -l --time-style=+"%d-%m-%Y %H:%M:%S"
-rw-r--r-- 1 user group 123 28-10-2024 14:32 file1.txt
3. Нумерация строк: -l --numeric-uid-gid. Эта опция показывает UID и GID вместо имени пользователя и группы. Полезно для отладки:

ls -l --numeric-uid-gid
-rw-r--r-- 1 1000 1000 123 Oct 28 14:32 file1.txt
4. Сортировка по размеру: -lS. Сортируйте файлы по их размеру в порядке убывания:

ls -lS
-rw-r--r-- 1 user group 4567 Oct 28 14:32 large_file.txt
-rw-r--r-- 1 user group 123 Oct 28 14:32 small_file.txt
5. Вывод цвета в терминале: --color=always. Если вы хотите сохранить цвета при перенаправлении вывода команды, используйте:

ls --color=always | less -R
6. Показываем только директории: -d */. Хотите видеть только папки в каталоге?

ls -d */
Documents/ Downloads/Scripts/
7. Группировка файлов и папок: --group-directories-first. Полезно, если вы хотите видеть папки в начале списка:

ls --group-directories-first
Documents/  Downloads/  file1.txt  file2.txt
8. Показываем inode каждого файла: -i. Каждый файл в Linux имеет свой уникальный inode. Используйте -i, чтобы увидеть их:

ls -i
123456 file1.txt
123457 file2.txt
Теперь Вы владеете не просто командой, а целым инструментом для работы с файлами. Попробуйте описанные опции, чтобы сделать управление файлами более удобным и эффективным BashTex 📱 #linux #utils

Мониторинг перебора паролей и блокировка учетных записей Безопасность серверов - задача номер один для системного администратора. Перебор паролей (brute force) — одна из самых популярных атак на учетные записи. Чтобы защитить систему, нужно не только обнаруживать такие попытки, но и автоматически блокировать злоумышленников. Где искать попытки перебора паролей? В Linux информация о входах и попытках авторизации хранится в следующих файлах:
/var/log/auth.log (Debian/Ubuntu). /var/log/secure (CentOS/RHEL).
Пример попытки перебора паролей в логе:

Oct 28 14:23:45 server sshd[1234]: Failed password for root from 192.168.1.100 port 44567 ssh2
Oct 28 14:23:47 server sshd[1234]: Failed password for root from 192.168.1.100 port 44568 ssh2
Автоматическая блокировка с помощью pam_tally2 pam_tally2 - модуль PAM, позволяющий подсчитывать неудачные попытки входа и блокировать учетные записи. Настройка блокировки: Откройте файл /etc/pam.d/common-auth (Debian/Ubuntu) или /etc/pam.d/system-auth (CentOS/RHEL). Добавьте строку:

auth required pam_tally2.so onerr=fail deny=5 unlock_time=300
deny=5: блокировать учетную запись после 5 неудачных попыток.
unlock_time=300: автоматически разблокировать через 5 минут.
Для блокировки учетной записи добавьте строку в тот же файл:

account required pam_tally2.so
Проверка работы: Посмотрите текущие неудачные попытки:

pam_tally2
Пример вывода:

Login    Failures  Latest failure
root        3      10/28/24 14:23:45
user1       5      10/28/24 14:25:01
Сбросьте счетчик неудач для пользователя:

pam_tally2 --user=user1 --reset
Дополнительная защита с Fail2Ban Fail2Ban - мощный инструмент, который анализирует логи и автоматически блокирует IP-адреса злоумышленников через iptables. Установка:

sudo apt install fail2ban  # Для Debian/Ubuntu
sudo yum install epel-release && sudo yum install fail2ban  # Для CentOS/RHEL
Настройка для SSH: Откройте файл /etc/fail2ban/jail.local и добавьте:

[sshd]
enabled = true
maxretry = 5
bantime = 3600
findtime = 600
maxretry=5: количество неудачных попыток.
bantime=3600: блокировка IP на 1 час.
findtime=600: анализировать попытки за последние 10 минут.
Перезапустите Fail2Ban:

sudo systemctl restart fail2ban
Проверка работы: Просмотр заблокированных IP:

sudo fail2ban-client status sshd
Разблокировка IP:

sudo fail2ban-client unban IP_ADDRESS
--- Рекомендации для повышения безопасности
Используйте ключи SSH: Полностью отключите вход по паролю, включив аутентификацию по ключам SSH. Ограничьте доступ по IP: Настройте файлы hosts.allow и hosts.deny или используйте брандмауэр. Перенесите SSH на нестандартный порт: Это затруднит автоматизированные атаки. Регулярно проверяйте логи: Используйте скрипты для автоматического анализа логов на наличие подозрительных активностей.
BashTex 📱 #linux #utils

logrotate: настройка ротации логов в Linux Большие объёмы логов могут быстро заполнять дисковое пространство, затрудняя работу системы. Для автоматического управления логами в Linux используется инструмент logrotate. Он позволяет архивировать, удалять или сжимать старые файлы логов, оставляя только актуальные записи. logrotate работает на основе конфигураций, определяя:
Частоту ротации (ежедневно, еженедельно, ежемесячно). Количество архивов, которые нужно сохранять. Сжатие логов для экономии пространства. Выполнение пользовательских скриптов после ротации.
Настройка logrotate 1. Глобальный файл конфигурации: Находится по пути /etc/logrotate.conf. Он задаёт общие параметры ротации. Пример содержимого:

weekly                # Ротация раз в неделю
rotate 4              # Хранить 4 архивных файла
create                 # Создавать новый файл после ротации
compress               # Сжимать логи с помощью gzip
include /etc/logrotate.d/  # Подключение дополнительных конфигураций
2. Пользовательские настройки для приложений: Каждое приложение может иметь свой файл конфигурации в /etc/logrotate.d/. Пример для файла /etc/logrotate.d/nginx:

/var/log/nginx/*.log {
    daily                 # Ротация логов каждый день
    missingok             # Пропускать файлы, если их нет
    rotate 7              # Хранить 7 архивов
    compress              # Сжимать архивы
    delaycompress         # Откладывать сжатие на следующий цикл
    notifempty            # Пропускать пустые файлы
    create 0640 www-data adm # Создавать новый лог с указанными правами
    postrotate            # Выполнять команду после ротации
        systemctl reload nginx > /dev/null
    endscript
}
Пример настройки ротации пользовательских логов Допустим, у нас есть приложение, которое пишет логи в /var/log/myapp/. Мы хотим:
Ротировать логи ежедневно. Сохранять последние 5 архивов. Сжимать архивы. Перезапускать приложение после ротации.
Для этого создайте файл /etc/logrotate.d/myapp:

/var/log/myapp/*.log {
    daily
    rotate 5
    compress
    missingok
    notifempty
    create 0640 root root
    postrotate
        systemctl restart myapp
    endscript
}
Проверка работы logrotate Запустите тест ротации:

logrotate -d /etc/logrotate.conf
Опция -d выводит информацию о предстоящих действиях без выполнения. Принудительно выполните ротацию:

logrotate -f /etc/logrotate.conf
Проверьте результат: После выполнения команда должна создать сжатые файлы логов, например:

/var/log/myapp/myapp.log.1.gz
/var/log/myapp/myapp.log.2.gz
Советы по безопасности
Убедитесь, что права доступа к логам соответствуют требованиям. Используйте create в конфигурации для автоматического создания новых файлов с нужными правами. Регулярно проверяйте дисковое пространство, чтобы старые логи не заполняли диск.
BashTex 📱 #linux #utils

Параллельное выполнение задач в Bash: ускоряем скрипты и контролируем фоновые процессы Когда вы запускаете множество команд последовательно, выполнение скрипта может занять значительное время. Параллельное выполнение задач позволяет значительно ускорить процесс, особенно если команды не зависят друг от друга. В этой статье рассмотрим:
Как запустить команды в фоне. Как ограничить количество параллельно выполняемых задач. Сравним результаты для наглядной демонстрации.
1. Параллельное выполнение с &. Чтобы запустить команду в фоновом режиме, просто добавьте & в конце строки:

sleep 5 &  # Фоновая задача
echo "Команда завершена"
wait        # Ожидание завершения всех фоновых задач
2. Ограничение количества фоновых задач. Когда слишком много задач выполняются параллельно, это может перегрузить систему. Чтобы избежать этого, можно использовать ограничение. Пример с семафором (функция parallel_run):

#!/bin/bash

# Функция для параллельного выполнения с ограничением
parallel_run() {
  local max_jobs=4  # Максимальное количество фоновых задач
  local job_count=0

  for i in {1..10}; do
    {
      echo "Начало задачи $i"
      sleep $((RANDOM % 5 + 1))  # Симуляция работы
      echo "Задача $i завершена"
    } &

    ((job_count++))
    if [[ $job_count -ge $max_jobs ]]; then
      wait -n  # Ждём завершения одной из задач
      ((job_count--))
    fi
  done

  wait  # Ожидание завершения всех оставшихся задач
}

# Запуск
parallel_run
Результат выполнения:

Начало задачи 1
Начало задачи 2
Начало задачи 3
Начало задачи 4
Задача 2 завершена
Начало задачи 5
...
Количество одновременно выполняемых задач не превышает 4. 3. Сравнение производительности Скрипт с последовательным выполнением:

#!/bin/bash
for i in {1..10}; do
  echo "Выполняется задача $i"
  sleep 2  # Симуляция работы
  echo "Задача $i завершена"
done
Результат: время выполнения = 10 задач × 2 секунды = 20 секунд. Скрипт с параллельным выполнением:

Копировать код
#!/bin/bash
for i in {1..10}; do
  {
    echo "Выполняется задача $i"
    sleep 2  # Симуляция работы
    echo "Задача $i завершена"
  } &
done
wait
Результат: Все задачи запускаются одновременно. Время выполнения ≈ 2 секунды. Скрипт с ограничением фоновых задач:

Копировать код
#!/bin/bash
parallel_run() {
  local max_jobs=3
  local job_count=0

  for i in {1..10}; do
    {
      echo "Выполняется задача $i"
      sleep 2  # Симуляция работы
      echo "Задача $i завершена"
    } &
    ((job_count++))
    if [[ $job_count -ge $max_jobs ]]; then
      wait -n
      ((job_count--))
    fi
  done
  wait
}

parallel_run
Результат: Ограничение до 3 задач одновременно. Время выполнения ≈ 7–8 секунд. --- Дополнительный инструмент: xargs Для простого ограничения количества задач можно использовать xargs с флагом -P:

seq 1 10 | xargs -n1 -P4 -I{} bash -c 'echo "Начало задачи {}"; sleep 2; echo "Задача {} завершена"'
-P4: ограничение на 4 параллельные задачи. В результате получается, что параллельное выполнение задач в Bash значительно ускоряет работу скриптов: 👎 Полное отсутствие ограничений может перегрузить систему. 👍 Ограничение количества задач помогает сбалансировать нагрузку. 👍 Использование инструментов, таких как wait, xargs, или написание собственных функций, позволяет гибко управлять параллельностью. BashTex 📱 #linux #utils

Отправка SMS с помощью утилит Linux Хотите отправлять SMS прямо из Linux? Это полезно для автоматизации уведомлений, мониторинга или личного использования. Рассмотрим, как настроить и использовать популярную утилиту gammu для отправки SMS. Gammu - это важный инструмент для работы с мобильными телефонами или GSM-модемами. Он позволяет:
Отправлять SMS и MMS. Управлять контактами и календарями. Работать с USSD-командами.
1. Подключите устройство: GSM-модем или телефон через USB. 2. Настройка Gammu. Определите порт подключения устройства:

ls /dev/tty*
Обычно модем определяется как /dev/ttyUSB0. 3. Сконфигурируйте gammu: Создайте файл ~/.gammurc:

[gammu]
device = /dev/ttyUSB0
connection = at
4. Проверьте связь с устройством:

gammu --identify
Ожидаемый вывод:

Device               : /dev/ttyUSB0
Manufacturer         : Huawei
Model                : E173 (E173)
Firmware             : 11.126.16.04.00
IMEI                 : 123456789012345
5. Отправка тестового SMS:

gammu sendsms TEXT +79161234567 -text "Привет! Это тестовое сообщение."
+79161234567 — номер телефона в международном формате. "Привет! Это тестовое сообщение." — текст сообщения. Пример вывода: If you want break, press Ctrl+C... Sending SMS 1/1....waiting for network acknowledgement..OK, message reference=1 6. Автоматизация через скрипты. Создайте bash-скрипт для автоматической отправки уведомлений:

#!/bin/bash

PHONE="+79161234567"
MESSAGE="Сервер работает нормально."

gammu sendsms TEXT "$PHONE" -text "$MESSAGE" >> /var/log/sms.log 2>&1
Это пример базового скрипта, который можно добавить в cron. При необходимости отправку СМС можно связать с мониторингом важных процессов и в случае их падения получать СМС, например. 7. Безопасность. Убедитесь, что права на файл с конфигурацией ограничены:

chmod 600 ~/.gammurc
Для использования сторонних сервисов, таких как SMS-шлюзы, храните API-ключи в защищённых файлах. --- Дополнительные команды Gammu. Чтение входящих SMS:

gammu getallsms
Удаление всех SMS:

gammu deleteallsms 1
Отправка Flash SMS (отображается на экране, но не сохраняется):

gammu sendsms FLASH +79161234567 -text "Это Flash SMS!"
BashTex 📱 #linux #utils