Логирование дискового пространства в Linux: автоматизация и контроль
Дисковое пространство - один из важнейших ресурсов системы. Постоянный мониторинг его состояния помогает избежать неприятных ситуаций, таких как переполнение разделов и остановка важных процессов. Логирование дискового пространства позволяет своевременно выявлять проблемы и анализировать историю использования.
Почему это важно?
1. Создаём систему логирования дискового пространства. Базовый скрипт для логирования:
Вывод в файле /var/log/disk_usage.log:
2. Автоматизация через cron. Добавьте скрипт в crontab, чтобы запускать его ежедневно:
Добавьте строку:
Теперь скрипт будет запускаться каждый день в полночь.
3. Уведомления при критическом состоянии. Модифицируем скрипт для отправки уведомлений, если свободного места становится меньше 20%.
Если свободного места станет меньше 20%, лог будет дополнен, а администратору отправлено уведомление.
4. Анализ роста использования пространства:
Визуализация:
Сохраните данные в CSV для анализа:
Затем откройте CSV в Excel или LibreOffice для построения графиков.
Логирование дискового пространства помогает предвидеть и устранять проблемы до того, как они повлияют на работу системы, а также производить различные анализы.
BashTex📱 #bash #utils
Дисковое пространство - один из важнейших ресурсов системы. Постоянный мониторинг его состояния помогает избежать неприятных ситуаций, таких как переполнение разделов и остановка важных процессов. Логирование дискового пространства позволяет своевременно выявлять проблемы и анализировать историю использования.
Почему это важно?
Предотвращение проблем: Заранее узнавайте о нехватке места.
Анализ трендов: Отслеживайте, как быстро растёт использование места.
Автоматизация: Система сама уведомляет о критических ситуациях.
1. Создаём систему логирования дискового пространства. Базовый скрипт для логирования:
#!/bin/bash
LOG_FILE="/var/log/disk_usage.log"
# Текущая дата и время
CURRENT_DATE=$(date '+%Y-%m-%d %H:%M:%S')
# Состояние дисков
DISK_USAGE=$(df -h)
# Запись в лог-файл
{
echo "-----"
echo "Дата: $CURRENT_DATE"
echo "$DISK_USAGE"
} >> "$LOG_FILE"
echo "Логирование завершено. Данные записаны в $LOG_FILE"
Вывод в файле /var/log/disk_usage.log:
-----
Дата: 2024-11-05 14:00:00
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 30G 20G 60% /
tmpfs 2.0G 1.0M 2.0G 1% /dev/shm
/dev/sdb1 100G 50G 50G 50% /mnt/data
2. Автоматизация через cron. Добавьте скрипт в crontab, чтобы запускать его ежедневно:
crontab -e
Добавьте строку:
0 0 * * * /path/to/disk_logger.sh
Теперь скрипт будет запускаться каждый день в полночь.
3. Уведомления при критическом состоянии. Модифицируем скрипт для отправки уведомлений, если свободного места становится меньше 20%.
#!/bin/bash
LOG_FILE="/var/log/disk_usage.log"
THRESHOLD=20
# Проверка разделов
df -h | awk -v date="$(date '+%Y-%m-%d %H:%M:%S')" -v threshold="$THRESHOLD" 'NR>1 {gsub("%", "", $5); if ($5 > (100-threshold)) print date, $0}' | while read -r line; do
echo "Критическое состояние диска: $line" >> "$LOG_FILE"
echo "$line" | mail -s "Уведомление: мало места на диске" admin@bashtex.com
done
Если свободного места станет меньше 20%, лог будет дополнен, а администратору отправлено уведомление.
4. Анализ роста использования пространства:
grep "/dev/sda1" /var/log/disk_usage.log | awk '{print $2, $3, $5}' | tail
Визуализация:
Сохраните данные в CSV для анализа:
grep "/dev/sda1" /var/log/disk_usage.log | awk '{print $1, $5}' > disk_usage.csv
Затем откройте CSV в Excel или LibreOffice для построения графиков.
Логирование дискового пространства помогает предвидеть и устранять проблемы до того, как они повлияют на работу системы, а также производить различные анализы.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Бесполезно - полезная команда
Когда-нибудь слышали про
Что делает true? true возвращает успешный статус и ничего больше.
Но давайте разберемся, где применяется true и какое применение ей можно найти.
1. Бесконечные циклы без условий. Вместо громоздкого while [ 1 ]; do, используйте true для создания чистого бесконечного цикла:
2. Заглушки для тестирования. Если вы пишете скрипт и определённые команды ещё не готовы, используйте true как временную заглушку:
3. Условные команды без выполнения. Иногда нужно выполнить что-то только при ошибке. Вместо добавления условий используйте true как пустую команду:
4. Условное выполнение с && и ||
Если папка существует, выводится сообщение. Если нет, ничего не происходит.
5. Отключение alias в сценариях. Чтобы убедиться, что используется реальная команда, а не alias:
Это полезно, если ls переопределён.
6. "Просто продолжай". Для сложных скриптов, где нужно игнорировать возможные ошибки в блоках:
Файл копируется, но ошибки игнорируются.
На самом деле, по итогу команда
BashTex📱 #linux #utils
Когда-нибудь слышали про
true? На первый взгляд, команда true в Linux кажется бесполезной: она просто возвращает успешный код выхода (0). Но за этой простотой скрывается мощный инструмент, который можно применять в сложных сценариях автоматизации и написании нестандартных команд.Что делает true? true возвращает успешный статус и ничего больше.
true
echo $?
0
Но давайте разберемся, где применяется true и какое применение ей можно найти.
1. Бесконечные циклы без условий. Вместо громоздкого while [ 1 ]; do, используйте true для создания чистого бесконечного цикла:
while true; do
echo "Работаем!"
sleep 1
done
2. Заглушки для тестирования. Если вы пишете скрипт и определённые команды ещё не готовы, используйте true как временную заглушку:
Копировать код
#!/bin/bash
echo "Шаг 1: Выполнен"
true # В будущем замените на реальную команду
echo "Шаг 2: Выполнен"
3. Условные команды без выполнения. Иногда нужно выполнить что-то только при ошибке. Вместо добавления условий используйте true как пустую команду:
mkdir /tmp/test || true
4. Условное выполнение с && и ||
[ -d /tmp/test ] && echo "Папка существует" || true
Если папка существует, выводится сообщение. Если нет, ничего не происходит.
5. Отключение alias в сценариях. Чтобы убедиться, что используется реальная команда, а не alias:
true && /bin/ls
Это полезно, если ls переопределён.
6. "Просто продолжай". Для сложных скриптов, где нужно игнорировать возможные ошибки в блоках:
cp важный_файл.txt /куда-то/ || true
Файл копируется, но ошибки игнорируются.
На самом деле, по итогу команда
true - это простой, но очень гибкий инструмент. Она идеально подходит для упрощения циклов, тестирования скриптов и построения сложных сценариев с условным выполнением команд. Если вы хотите писать лаконичный и читаемый код - не забывайте про этого незаменимого помощника.BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Инструмент для работы с электронной почтой в Linux
Основные возможности mailx:
1. Отправка простого письма:
-s: заголовок письма.
user@bashtex.com: получатель.
Результат: заголовок "Тестовое письмо" и телом "Привет, это тестовое письмо!".
2. Отправка письма с вложением. Для отправки файла в качестве вложения используйте флаг -a:
Пример вывода у получателя:
Тема: Файл во вложении.
Текст: Смотрите вложение.
Прикреплённый файл: file.txt.
3. Использование SMTP-сервера. Настройка SMTP-сервера позволяет отправлять письма через внешние почтовые сервисы (например, Gmail):
Добавьте настройки в файл ~/.mailrc:
Теперь отправка письма будет происходить через SMTP:
4. Автоматическая отправка отчётов. mailx отлично подходит для автоматизации. Например, отправка отчёта о состоянии дисков:
5. Чтение почты. Если настроен локальный почтовый сервер, mailx можно использовать для чтения входящих сообщений:
Навигация по письмам:
Нажмите ? для списка доступных команд.
Используйте номер письма для чтения, например:
При всей своей простоте mailx позволяет отправлять уведомления, автоматизировать отчёты или выполнять простое чтение писем. Если вы ищете лёгкий и надёжный способ управлять почтой в Linux, то mailx будет верным помощником.
BashTex📱 #linux #utils
mailx - это классическая утилита для отправки и получения электронной почты прямо из командной строки. Несмотря на своё минималистичное происхождение, она остаётся популярной благодаря гибкости, простоте использования и широким возможностям для интеграции со скриптами.Основные возможности mailx:
Отправка писем с вложениями.
Поддержка SMTP-серверов.
Интеграция в bash-скрипты для автоматизации.
Чтение входящих писем.
1. Отправка простого письма:
echo "Привет, это тестовое письмо!" | mailx -s "Тестовое письмо" user@bashtex.com
-s: заголовок письма.
user@bashtex.com: получатель.
Результат: заголовок "Тестовое письмо" и телом "Привет, это тестовое письмо!".
2. Отправка письма с вложением. Для отправки файла в качестве вложения используйте флаг -a:
echo "Смотрите вложение." | mailx -s "Файл во вложении" -a /path/to/file.txt user@bashtex.com
Пример вывода у получателя:
Тема: Файл во вложении.
Текст: Смотрите вложение.
Прикреплённый файл: file.txt.
3. Использование SMTP-сервера. Настройка SMTP-сервера позволяет отправлять письма через внешние почтовые сервисы (например, Gmail):
Добавьте настройки в файл ~/.mailrc:
set smtp-use-starttls
set ssl-verify=ignore
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=your_email@gmail.com
set smtp-auth-password=your_password
set from="your_email@gmail.com"
Теперь отправка письма будет происходить через SMTP:
echo "Почта через SMTP!" | mailx -s "SMTP тест" user@example.com
4. Автоматическая отправка отчётов. mailx отлично подходит для автоматизации. Например, отправка отчёта о состоянии дисков:
#!/bin/bash
DISK_USAGE=$(df -h)
echo "$DISK_USAGE" | mailx -s "Ежедневный отчёт о дисках" admin@example.com
5. Чтение почты. Если настроен локальный почтовый сервер, mailx можно использовать для чтения входящих сообщений:
mailx
Навигация по письмам:
Нажмите ? для списка доступных команд.
Используйте номер письма для чтения, например:
& 1
При всей своей простоте mailx позволяет отправлять уведомления, автоматизировать отчёты или выполнять простое чтение писем. Если вы ищете лёгкий и надёжный способ управлять почтой в Linux, то mailx будет верным помощником.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Отправка SMS с помощью утилит Linux
Хотите отправлять SMS прямо из Linux? Это полезно для автоматизации уведомлений, мониторинга или личного использования. Рассмотрим, как настроить и использовать популярную утилиту
Gammu - это важный инструмент для работы с мобильными телефонами или GSM-модемами. Он позволяет:
1. Подключите устройство: GSM-модем или телефон через USB.
2. Настройка Gammu. Определите порт подключения устройства:
Обычно модем определяется как /dev/ttyUSB0.
3. Сконфигурируйте gammu:
Создайте файл ~/.gammurc:
4. Проверьте связь с устройством:
Ожидаемый вывод:
5. Отправка тестового SMS:
+79161234567 — номер телефона в международном формате.
"Привет! Это тестовое сообщение." — текст сообщения.
Пример вывода:
If you want break, press Ctrl+C...
Sending SMS 1/1....waiting for network acknowledgement..OK, message reference=1
6. Автоматизация через скрипты. Создайте bash-скрипт для автоматической отправки уведомлений:
Это пример базового скрипта, который можно добавить в cron. При необходимости отправку СМС можно связать с мониторингом важных процессов и в случае их падения получать СМС, например.
7. Безопасность. Убедитесь, что права на файл с конфигурацией ограничены:
Для использования сторонних сервисов, таких как SMS-шлюзы, храните API-ключи в защищённых файлах.
---
Дополнительные команды Gammu.
Чтение входящих SMS:
Удаление всех SMS:
Отправка Flash SMS (отображается на экране, но не сохраняется):
BashTex📱 #linux #utils
Хотите отправлять 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Параллельное выполнение задач в Bash: ускоряем скрипты и контролируем фоновые процессы
Когда вы запускаете множество команд последовательно, выполнение скрипта может занять значительное время. Параллельное выполнение задач позволяет значительно ускорить процесс, особенно если команды не зависят друг от друга. В этой статье рассмотрим:
1. Параллельное выполнение с &. Чтобы запустить команду в фоновом режиме, просто добавьте & в конце строки:
2. Ограничение количества фоновых задач. Когда слишком много задач выполняются параллельно, это может перегрузить систему. Чтобы избежать этого, можно использовать ограничение.
Пример с семафором (функция parallel_run):
Результат выполнения:
Количество одновременно выполняемых задач не превышает 4.
3. Сравнение производительности
Скрипт с последовательным выполнением:
Результат: время выполнения = 10 задач × 2 секунды = 20 секунд.
Скрипт с параллельным выполнением:
Результат: Все задачи запускаются одновременно. Время выполнения ≈ 2 секунды.
Скрипт с ограничением фоновых задач:
Результат: Ограничение до 3 задач одновременно. Время выполнения ≈ 7–8 секунд.
---
Дополнительный инструмент:
Для простого ограничения количества задач можно использовать xargs с флагом -P:
-P4: ограничение на 4 параллельные задачи.
В результате получается, что параллельное выполнение задач в Bash значительно ускоряет работу скриптов:
👎 Полное отсутствие ограничений может перегрузить систему.
👍 Ограничение количества задач помогает сбалансировать нагрузку.
👍 Использование инструментов, таких как wait, xargs, или написание собственных функций, позволяет гибко управлять параллельностью.
BashTex📱 #linux #utils
Когда вы запускаете множество команд последовательно, выполнение скрипта может занять значительное время. Параллельное выполнение задач позволяет значительно ускорить процесс, особенно если команды не зависят друг от друга. В этой статье рассмотрим:
Как запустить команды в фоне.
Как ограничить количество параллельно выполняемых задач.
Сравним результаты для наглядной демонстрации.
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 значительно ускоряет работу скриптов:
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
logrotate: настройка ротации логов в Linux
Большие объёмы логов могут быстро заполнять дисковое пространство, затрудняя работу системы. Для автоматического управления логами в Linux используется инструмент logrotate. Он позволяет архивировать, удалять или сжимать старые файлы логов, оставляя только актуальные записи.
logrotate работает на основе конфигураций, определяя:
Настройка logrotate
1. Глобальный файл конфигурации:
Находится по пути /etc/logrotate.conf. Он задаёт общие параметры ротации.
Пример содержимого:
2. Пользовательские настройки для приложений:
Каждое приложение может иметь свой файл конфигурации в /etc/logrotate.d/.
Пример для файла /etc/logrotate.d/nginx:
Пример настройки ротации пользовательских логов
Допустим, у нас есть приложение, которое пишет логи в /var/log/myapp/. Мы хотим:
Для этого создайте файл /etc/logrotate.d/myapp:
Проверка работы logrotate
Запустите тест ротации:
Опция -d выводит информацию о предстоящих действиях без выполнения.
Принудительно выполните ротацию:
Проверьте результат: После выполнения команда должна создать сжатые файлы логов, например:
Советы по безопасности
BashTex📱 #linux #utils
Большие объёмы логов могут быстро заполнять дисковое пространство, затрудняя работу системы. Для автоматического управления логами в 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
endnoscript
}
Пример настройки ротации пользовательских логов
Допустим, у нас есть приложение, которое пишет логи в /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
endnoscript
}
Проверка работы 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Мониторинг перебора паролей и блокировка учетных записей
Безопасность серверов - задача номер один для системного администратора. Перебор паролей (brute force) — одна из самых популярных атак на учетные записи. Чтобы защитить систему, нужно не только обнаруживать такие попытки, но и автоматически блокировать злоумышленников.
Где искать попытки перебора паролей? В Linux информация о входах и попытках авторизации хранится в следующих файлах:
Пример попытки перебора паролей в логе:
Автоматическая блокировка с помощью pam_tally2
pam_tally2 - модуль PAM, позволяющий подсчитывать неудачные попытки входа и блокировать учетные записи.
Настройка блокировки: Откройте файл /etc/pam.d/common-auth (Debian/Ubuntu) или /etc/pam.d/system-auth (CentOS/RHEL).
Добавьте строку:
Для блокировки учетной записи добавьте строку в тот же файл:
Проверка работы:
Посмотрите текущие неудачные попытки:
Пример вывода:
Сбросьте счетчик неудач для пользователя:
Дополнительная защита с Fail2Ban
Fail2Ban - мощный инструмент, который анализирует логи и автоматически блокирует IP-адреса злоумышленников через iptables.
Установка:
Настройка для SSH:
Откройте файл /etc/fail2ban/jail.local и добавьте:
Перезапустите Fail2Ban:
Проверка работы:
Просмотр заблокированных IP:
Разблокировка IP:
---
Рекомендации для повышения безопасности
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Неочевидно полезные опции команды ls
Команда
1. Показываем файлы со всеми деталями: --almost-all. По умолчанию ls с опцией -a отображает все файлы, включая . и ... Но если они вам не нужны, используйте
2. Показываем время последнего изменения: --time-style. Эта опция позволяет гибко настроить отображение времени. Например, чтобы видеть точное время:
Хотите форматировать время под себя? Используйте:
3. Нумерация строк: -l --numeric-uid-gid. Эта опция показывает UID и GID вместо имени пользователя и группы. Полезно для отладки:
4. Сортировка по размеру: -lS. Сортируйте файлы по их размеру в порядке убывания:
5. Вывод цвета в терминале: --color=always. Если вы хотите сохранить цвета при перенаправлении вывода команды, используйте:
6. Показываем только директории: -d */. Хотите видеть только папки в каталоге?
7. Группировка файлов и папок: --group-directories-first. Полезно, если вы хотите видеть папки в начале списка:
8. Показываем inode каждого файла: -i. Каждый файл в Linux имеет свой уникальный inode. Используйте -i, чтобы увидеть их:
Теперь Вы владеете не просто командой, а целым инструментом для работы с файлами. Попробуйте описанные опции, чтобы сделать управление файлами более удобным и эффективным
BashTex📱 #linux #utils
Команда
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🗿1
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 дней.
Пример запроса через
3. Автоматизация задач
LDAP позволяет автоматизировать ротацию паролей, управление правами доступа и синхронизацию данных между системами.
Преимущества LDAP:
Кому и когда нужен LDAP?
LDAP идеально подходит для компаний с:
В следующей статье разберемся с установкой и настройкой
BashTex📱 #linux #utils
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1👨💻1
LDAP: Установка и настройка LDAP-сервера в Linux
В этой статье разберём процесс установки и базовой настройки LDAP-сервера на основе OpenLDAP в Linux.
1. Установка OpenLDAP. Установка необходимых пакетов:
На Ubuntu/Debian:
На CentOS/RHEL:
2. Инициализация и настройка LDAP-сервера
2.1. Настройка slapd через утилиту конфигурации (для Ubuntu/Debian):
Во время настройки система запросит:
DNS-домен: например, bashtex.com.
Организацию: введите имя вашей компании или группы, например, BashTex
Пароль администратора (admin): задайте надёжный пароль.
2.2. Проверка статуса службы. Убедитесь, что сервер работает:
3. Создание базовой структуры LDAP. Для работы LDAP необходимо задать базовую структуру: организационные единицы (OU), пользователи и группы.
3.1 Создание LDIF-файла с базовой структурой. Создайте файл base.ldif со следующим содержимым:
3.2. Применение структуры. Загрузите данные в LDAP:
Введите пароль, указанный при настройке slapd.
4. Добавление пользователей. Создайте LDIF-файл с пользователем:
Чтобы сгенерировать хэш пароля:
4.1. Загрузите пользователя в LDAP:
5. Проверка LDAP. Просмотр записей в LDAP:
5.1. Поиск пользователей:
Дополнительная настройка
1. Установка SSL/TLS для защиты соединений:
Убедитесь, что установлен certbot или аналогичный инструмент, и настройте сертификаты. Затем укажите их в конфигурации /etc/ldap/ldap.conf:
2. Интеграция с другими сервисами:
LDAP можно использовать для аутентификации пользователей в таких системах, как:
SSH: настройте PAM через libpam-ldap.
Web-сервисы: интеграция с Apache, Nginx.
Почтовые серверы: например, Postfix или Dovecot.
Установив OpenLDAP и создав базовую структуру, вы сможете расширять её для любых корпоративных нужд.
BashTex📱 #linux #security
В этой статье разберём процесс установки и базовой настройки 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍2
Как проверить существование файла в скрипте
При написании Bash-скриптов часто возникает необходимость проверить, существует ли файл (или директория), прежде чем продолжить выполнение. Давайте разберём несколько подходов с примерами.
1. Проверка существования файла. Самый простой способ проверить, существует ли файл:
2. Проверка, что это обычный файл. Если нужно убедиться, что это именно файл (а не директория или символическая ссылка):
3. Проверка существования директории. Чтобы проверить, существует ли директория:
4. Проверка прав доступа к файлу. Проверить доступ на чтение:
5. Проверка нескольких условий. Можно комбинировать проверки:
Пример: Реальный сценарий. Предположим, вы пишете скрипт для архивации файла, только если он существует.
Полезный совет: Для проверки в одном условии часто используют флаг || (или):
Проверка существования файла или директории - это базовая, но важная часть автоматизации с помощью Bash. Правильное использование этих проверок позволит вашим скриптам работать надёжно и избегать ошибок.
BashTex📱 #bash
При написании 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
Создание кластера Unix-серверов
Кластеризация серверов в Unix - это процесс объединения нескольких серверов в единое целое для повышения надёжности, масштабируемости и производительности. Кластеры используются для задач высокой доступности (HA), распределённой обработки и балансировки нагрузки.
В этой статье разберём базовые шаги по созданию кластера Unix-серверов и обеспечению их совместной работы.
Что потребуется?
Шаг 1: Настройка узлов
1. Обновите все системы. Перед началом убедитесь, что пакеты обновлены на всех узлах:
2. Настройте хосты. Пропишите имена серверов в /etc/hosts, чтобы узлы могли видеть друг друга:
3. Настройте SSH-доступ. Для работы кластера потребуется SSH-доступ между узлами без пароля:
Шаг 2: Настройка общего доступа к данным (NFS)
1. Установите NFS-сервер на одном из узлов:
2. Настройте экспортируемую директорию, для этого добавьте в /etc/exports:
Примените изменения:
3. На других узлах подключите общий ресурс:
Проверьте:
Шаг 3: Настройка кластера HA (High Availability)
1. Установите Pacemaker и Corosync, для этого на всех узлах выполните:
2. Настройте Corosync. Отредактируйте файл /etc/corosync/corosync.conf и добавьте узлы:
Запустите Corosync и Pacemaker:
3. Добавьте ресурс в кластер. Например, ресурс виртуального IP:
Шаг 4: Проверка и управление кластером
Статус кластера:
Добавление нового узла:
Остановка кластера
Шаг 5: Настройка балансировки нагрузки (опционально)
Установите HAProxy для равномерного распределения нагрузки:
Настройте /etc/haproxy/haproxy.cfg:
Запустите HAProxy:
---
Кластеризация Unix-серверов - это основа для построения надёжной инфраструктуры. Вы можете настроить кластеры для высокой доступности, балансировки нагрузки или распределённой обработки. С правильными инструментами, такими как NFS, Pacemaker и HAProxy, вы получите стабильную и масштабируемую систему.
BashTex📱 #linux #utils
Кластеризация серверов в 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Автоматизация управления с помощью Ansible
Ansible - это инструмент для управления конфигурацией, автоматизации развёртывания и управления инфраструктурой. Простота использования, отсутствие необходимости в агентах и возможность масштабирования делают его идеальным выбором как для небольших команд, так и для крупных организаций.
В этой статье разберём, как начать работу с Ansible, автоматизировать задачи и повысить эффективность управления серверами.
Что такое Ansible? Ansible - это инструмент, основанный на архитектуре "push", который использует SSH для взаимодействия с серверами.
Основные преимущества:
1. Установка на управляющей машине
Для Ubuntu:
Для CentOS:
2. Настройка SSH-доступа к серверам. Ansible использует SSH для подключения к узлам. Настройте безпарольный доступ:
3. Настройка инвентаря. Ansible использует файл инвентаря для описания узлов. По умолчанию это /etc/ansible/hosts.
Пример файла:
Вы можете создавать группы узлов и применять конфигурации ко всем серверам в группе.
4. Написание Playbook. Playbook - это файл в формате YAML, который описывает, что нужно сделать на целевых узлах.
Пример: Установка Apache на веб-серверах
Запуск Playbook:
---
Автоматизация задач
1. Обновление пакетов на всех серверах
2. Создание пользователей
3. Копирование конфигурационных файлов
Проверка состояния серверов. Для быстрого выполнения команды на узлах используйте модуль ping:
Пример выполнения команды
---
Дополнительные советы
Используйте переменные:
Вы можете задавать переменные в Playbook, инвентаре или через командную строку.
Шифруйте секреты: Ansible Vault позволяет хранить конфиденциальные данные.
Интеграция с CI/CD: Ansible легко интегрируется с Jenkins, GitLab CI и другими системами.
Используйте Ansible для настройки серверов, развертывания приложений, управления конфигурациями и многого другого. Овладев этим инструментом, вы сможете автоматизировать рутинные задачи.
BashTex📱 #linux #utils
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Стресс-тестирование сервера с помощью stress-ng
Когда сервер начинает подводить под нагрузкой, важно понять его пределы. Именно для таких задач существует stress-ng - инструмент для стресс-тестирования аппаратного и программного обеспечения.
Что такое stress-ng?
Установка stress-ng
Для Ubuntu/Debian:
Для CentOS/RHEL:
Примеры использования
Стресс-тест CPU. Задействуем 4 ядра процессора на 60 секунд:
Вывод:
Нагрузка на память. Тестируем систему, выделяя 2 ГБ памяти:
Вывод:
Одновременная нагрузка на CPU и диск. Смешанный тест, нагружающий процессор и создающий 2 потока записи на диск:
Нагрузка на файловую систему. Тест создания файлов и директорий:
Проверьте /tmp для созданных файлов.
Имитация пикового использования системы. Задействуем все ресурсы:
Анализ результатов. Вместе с утилитой можно использовать мониторинг:
Пример с htop:
---
В проде такое лучше не запускать, балуйтесь на тестовых серверах🎅
BashTex📱 #linux #utils
Когда сервер начинает подводить под нагрузкой, важно понять его пределы. Именно для таких задач существует 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Мониторинг производительности с iostat: углубленный разбор
Что такое iostat?
Примеры использования
1. Базовая статистика. Просто вызовите iostat без параметров, чтобы увидеть общую картину:
Вывод:
%iowait: Время, которое CPU ждёт операций ввода/вывода.
tps: Количество операций ввода/вывода в секунду.
kB_read/s и kB_wrtn/s: Скорость чтения и записи.
2. Обновление в реальном времени. Вывод каждые 2 секунды:
3. Статистика только для дисков. Если интересуют только устройства хранения:
Вывод:
4. Производительность процессора. Анализ нагрузки на CPU:
Вывод:
5. Статистика для конкретного устройства. Чтобы проанализировать только диск sda:
Переключение на MB для удобства:
6. Детализация загрузки системы. iostat может выводить расширенные данные:
Вывод:
%util: Показывает, насколько устройство занято.
Практическое применение.
1. Идентификация узких мест.
Если %iowait высок, это сигнал, что диск не справляется с запросами.
Высокий %util (>90%) на устройстве указывает на перегрузку.
2. Мониторинг в реальном времени. Используйте комбинацию с
3. Сохранение данных для анализа. Чтобы сохранить статистику для последующего анализа:
---
iostat - это незаменимый инструмент для мониторинга ввода/вывода и нагрузки на процессор. Он помогает быстро находить узкие места в работе серверов и принимать меры для их устранения.
BashTex📱 #linux #utils
Что такое 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Сравнение лог-агрегаторов: ELK vs Loki
Когда речь заходит о лог-агрегаторах, которые помогают управлять огромными объемами журналов, два наиболее популярных решения - это ELK (Elasticsearch, Logstash, Kibana) и Loki от Grafana Labs. Давайте разберёмся, какое из них лучше выбрать для ваших задач.
ELK: Мощь, гибкость и масштабируемость
Что такое ELK? ELK - это стек из трёх инструментов:
Elasticsearch - хранение и поиск по журналам.
Logstash - сбор и обработка данных.
Kibana - визуализация и анализ.
Плюсы:
Минусы:
Loki: Простота и интеграция с Grafana
Что такое Loki? Loki - это легковесный лог-агрегатор, оптимизированный для работы с метриками. Вместо хранения сырых данных, как ELK, Loki использует метаинформацию (лейблы).
Плюсы:
Минусы:
❗️ Когда выбрать ELK?
Вам нужен мощный поиск и анализ логов.
Вы работаете с большими объёмами данных.
Инфраструктура включает сложные сценарии мониторинга.
Вы готовы инвестировать в ресурсы и опыт.
❗️ Когда выбрать Loki?
Вы уже используете Grafana.
Вам нужен простой инструмент для логирования.
Ресурсы сервера ограничены.
В приоритете экономия на хранилище.
---
Если вы ищете гибкость и мощные аналитические возможности, ELK - ваш выбор. Если важны простота, лёгкость и интеграция с Grafana, то Loki станет отличным решением.
BashTex📱 #linux #utils
Когда речь заходит о лог-агрегаторах, которые помогают управлять огромными объемами журналов, два наиболее популярных решения - это 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 не поддерживает сложные трансформации.
Молодой продукт. Функциональность продолжает развиваться.
Вам нужен мощный поиск и анализ логов.
Вы работаете с большими объёмами данных.
Инфраструктура включает сложные сценарии мониторинга.
Вы готовы инвестировать в ресурсы и опыт.
Вы уже используете Grafana.
Вам нужен простой инструмент для логирования.
Ресурсы сервера ограничены.
В приоритете экономия на хранилище.
---
Если вы ищете гибкость и мощные аналитические возможности, ELK - ваш выбор. Если важны простота, лёгкость и интеграция с Grafana, то Loki станет отличным решением.
BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Как использовать Netdata для реального времени мониторинга сервера
Если вы ищете удобный и визуально понятный инструмент для мониторинга серверов в реальном времени, то Netdata - отличный выбор. Этот легковесный инструмент позволяет отслеживать состояние системы, процессов, сети и даже приложений, предоставляя мгновенные визуализации.
Преимущества:
Установка Netdata. На большинстве дистрибутивов Linux достаточно выполнить одну команду:
После установки веб-интерфейс будет доступен по адресу: http://<IP-адрес-сервера>:19999
Базовые метрики. Netdata автоматически начинает мониторинг:
CPU: загрузка и частота.
Память: использование и своп.
Диски: I/O операции и латентность.
Сеть: входящий и исходящий трафик.
Сервисы: Apache, Nginx, MySQL, PostgreSQL, Redis и другие.
Мониторинг кастомных метрик. Netdata позволяет добавлять пользовательские плагины для мониторинга специфичных приложений. Например, для MySQL:
Откройте /etc/netdata/python.d/mysql.conf. Настройте доступ к базе данных:
Перезапустите Netdata:
Интеграция с другими системами. Netdata поддерживает экспорт метрик в Prometheus, Grafana и другие системы.
Пример настройки интеграции с Prometheus:
Откройте /etc/netdata/netdata.conf и включите Prometheus:
Перезапустите Netdata. Теперь данные Netdata доступны для анализа в Grafana.
Преимущества мониторинга в реальном времени
Диагностика проблем: мгновенное выявление узких мест (например, высокий %iowait или перегрузка сети).
Анализ трендов: Netdata сохраняет метрики для последующего анализа.
Простота: доступен даже новичкам в мониторинге.
BashTex📱 #utils #monitoring
Если вы ищете удобный и визуально понятный инструмент для мониторинга серверов в реальном времени, то 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
Создание меню в терминале с помощью команды select
Если вы хотите сделать ваш Bash-скрипт более интерактивным, команда select - это простой и удобный способ создать меню в терминале. Она автоматически обрабатывает ввод пользователя, предоставляя список опций, и позволяет легко работать с выбранным значением.
Синтаксис команды select
Пример 1: Простое меню. Создадим базовое меню для выбора действий:
Пример вывода:
Особенности команды select
Пример 2: Динамическое меню с файлами. Скрипт для выбора файла из текущей директории:
Пример вывода:
Использование в реальных задачах
Совет: Используйте команду PS3 для настройки пользовательского приглашения:
Пример с использованием PS3:
---
Команда
BashTex📱 #linux #utils
Если вы хотите сделать ваш 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) noscript.sh
#? 2
Вы выбрали: file2.log
Использование в реальных задачах
Меню управления: Создавайте интерактивные скрипты для настройки окружения.
Обработка файлов: Выбирайте файлы для анализа или обработки.
Автоматизация: Упрощайте выбор действий в автоматизированных системах.
Совет: Используйте команду PS3 для настройки пользовательского приглашения:
PS3="Введите номер действия: "
Пример с использованием PS3:
Введите номер действия:
---
Команда
select - простой инструмент для создания интуитивно понятных меню в терминале. Она отлично помогает сделать скрипты более интерактивными и удобными. BashTex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Как ускорить Bash-скрипты с помощью xargs и параллельных задач
Когда нужно обработать множество файлов, выполнить команды для каждой строки или справиться с большим объёмом задач, утилита
Что делает xargs?
Параллельная обработка с xargs
Флаг -P позволяет запускать несколько процессов одновременно, значительно ускоряя выполнение задач.
Пример 1: Параллельное сжатие файлов. Представьте, что нужно сжать множество файлов:
-P 4 - запускает 4 процесса одновременно.
-I {} - заменяет {} в команде именами файлов.
gzip - сжимает каждый найденный файл.
Результат: ускоренное сжатие за счёт одновременной обработки файлов.
Пример 2: Проверка доступности множества хостов. Список IP-адресов в файле hosts.txt:
Скрипт для одновременной проверки доступности:
-P 10 - запускает до 10 проверок одновременно.
ping -c 3 {} - отправляет 3 пакета на каждый IP.
Результат: мгновенная проверка множества хостов.
Пример 3: Параллельное копирование больших файлов. Список файлов в files.txt:
Копирование файлов в другую директорию:
-P 3 - выполняет до 3 копирований одновременно.
Почему это быстрее?
Полезные флаги xargs
-n N - передаёт по N аргументов в каждую команду.
Вывод:
--max-procs (или -P) - ограничивает количество параллельных процессов.
---
Использование
BashTex📱 #linux #utils
Когда нужно обработать множество файлов, выполнить команды для каждой строки или справиться с большим объёмом задач, утилита
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Как писать эффективные функции в Bash: оптимизация и практические примеры
Функции в Bash помогают организовать код, улучшить читаемость и сократить дублирование. Однако неправильное использование может снизить производительность скриптов. Давайте разберёмся, как писать эффективные функции, избегая ошибок.
Что такое функция в Bash?
Пример базовой функции:
Принципы написания эффективных функций
1. Используйте параметры вместо глобальных переменных. Глобальные переменные могут вызывать неожиданные ошибки. Передавайте данные в функции через параметры:
2. Проверяйте входные данные. Защитите функции от некорректного ввода:
3. Возвращайте значения через echo или return. Используйте echo для вывода данных, return для статусов завершения.
Практические примеры
1. Подсчёт количества файлов в директории
2. Кеширование результатов для оптимизации. При повторных вычислениях можно сохранить результат в переменной:
3. Параллельная обработка с помощью функций
Инструменты для отладки функций
1. Добавляйте трассировку.
2. Проверяйте на ошибки.
Советы по оптимизации
1. Минимизируйте вызовы внешних команд. Вместо ls | wc -l используйте встроенные функции Bash:
2. Используйте встроенные массивы. Для работы с множеством значений массивы быстрее и удобнее, чем строки:
Эффективные функции - залог быстрого и надёжного Bash-скрипта. Соблюдайте лучшие практики, оптимизируйте код, и ваши скрипты станут мощными инструментами автоматизации.
BashTex📱 #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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Аудит Linux-системы с Lynis: от установки до анализа отчёта
Lynis - это инструмент командной строки для аудита безопасности, соответствия стандартам и повышения производительности Linux и других UNIX-систем. Он прост в использовании, не требует установки агента и может запускаться на работающей системе.
Установка Lynis
Установите Lynis из официального репозитория:
Для систем на базе RHEL:
Альтернативно, скачайте с GitHub📱 :
Запуск аудита. Для базового аудита системы используйте:
Команда выполнит:
Пример вывода аудита:
Анализ отчёта. После выполнения аудита, Lynis предоставляет список рекомендаций для улучшения безопасности.
Журнал рекомендаций: Все советы сохраняются в /var/log/lynis.log.
Улучшение индекса безопасности: Улучшите настройки по рекомендациям, например:
Установите обновления ядра.
Убедитесь, что файлы /etc/passwd и /etc/shadow защищены.
Включите SELinux или AppArmor для повышения безопасности.
Проверка конкретных компонентов. Чтобы провести аудит конкретного компонента, например, SSH:
Почему Lynis полезен?
BashTex📱 #linux #security
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11