ch
Feedback
BashTex | Linux

BashTex | Linux

前往频道在 Telegram

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

显示更多
2 523
订阅者
-224 小时
-67
无数据30
帖子存档
Сразу видно, кто тут главный BashTex 📱 #юмор

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

echo "Новая строка" | tee -a output.txt
Файл output.txt сохранит все предыдущие данные и добавит новую строку. 2. Дублирование вывода в несколько файлов. Вы можете одновременно записывать данные в несколько файлов:

echo "Логи обновлены" | tee log1.txt log2.txt log3.txt
Всё, что выведет команда, будет сохранено в трёх файлах одновременно. 3. Объединение с sudo. Иногда права доступа мешают записывать данные в файлы. Вот как решить это:

echo "Системная настройка" | sudo tee /etc/config.txt
Этот приём обходит ограничения записи без использования дополнительных редакторов. 4. Трансформация данных в реальном времени. tee можно использовать в пайплайнах для промежуточной проверки данных:

cat bigfile.txt | tee preview.txt | grep "важные данные" > result.txt
Здесь tee записывает содержимое файла в preview.txt, а затем передаёт его на обработку через grep. 5. Обработка stderr. По умолчанию tee работает только с stdout, но есть способ записывать и stderr:

{ ls non_existing_file 2>&1 1>&3 | tee errors.log; } 3>&1
Этот трюк записывает ошибки в файл errors.log и одновременно выводит их на экран. Полезные сценарии использования 1. Живой логинг: Сохраняйте данные и анализируйте их в реальном времени:

tail -f /var/log/syslog | tee live_log.txt
2. Одновременная передача данных в файл и на удалённый сервер:

some_command | tee local_log.txt | ssh user@server "cat > remote_log.txt"
3. Дублирование вывода сложных операций:

{ make build | tee build.log; } 2>&1 | grep "Error"
BashTex 📱 #linux #utils

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

#!/bin/bash

# Список файлов для обработки
FILES=("file1.txt" "file2.txt" "file3.txt")

# Файл состояния
STATE_FILE="process.state"

# Функция для обновления состояния
update_state() {
  echo "$1" >> "$STATE_FILE"
}

# Создаём файл состояния, если его нет
if [[ ! -f "$STATE_FILE" ]]; then
  > "$STATE_FILE"
fi

# Загружаем выполненные этапы
COMPLETED=$(cat "$STATE_FILE")

echo "Начинаем обработку файлов..."

for FILE in "${FILES[@]}"; do
  # Проверяем, был ли файл уже обработан
  if echo "$COMPLETED" | grep -q "$FILE"; then
    echo "[Пропуск] $FILE уже обработан."
    continue
  fi

  # Обрабатываем файл
  echo "Обрабатываем $FILE..."
  sleep 2  # Имитация длительной работы

  # Если успешно, обновляем состояние
  update_state "$FILE"
  echo "[Готово] $FILE обработан."
done

echo "Все файлы обработаны!"
Вывод скрипта. Первый запуск:

Начинаем обработку файлов...
Обрабатываем file1.txt...
[Готово] file1.txt обработан.
Обрабатываем file2.txt...
[Готово] file2.txt обработан.
Обрабатываем file3.txt...
[Готово] file3.txt обработан.
Все файлы обработаны!
Повторный запуск:

Начинаем обработку файлов...
[Пропуск] file1.txt уже обработан.
[Пропуск] file2.txt уже обработан.
[Пропуск] file3.txt уже обработан.
Все файлы обработаны!
Где это может применимо:
Массовая обработка данных (например, логов). Резервное копирование с пропуском уже сохранённых файлов. Миграция больших объёмов данных. Загрузка или выгрузка информации с сетевых хранилищ.
BashTex 📱 #bash

Автоматическое восстановление после сбоев с использованием Bash-скриптов Быстрая реакция на системные сбои является ключом к минимизации времени простоя. Рассмотрим, как настроить автоматическое восстановление системы с помощью Bash-скриптов для замены поврежденных файлов и перезапуска критических служб. Для восстановления системы необходимо создать скрипт, который будет:
Проверять целостность ключевых файлов. Восстанавливать поврежденные файлы из резервной копии. Перезапускать критические службы.
Пример скрипта восстановления

#!/bin/bash

# Пути к резервным копиям и критическим файлам
BACKUP_DIR="/backup/system_files"
FILES_TO_CHECK=("/etc/nginx/nginx.conf" "/var/www/html/index.html")

# Проверка целостности файлов
for FILE in "${FILES_TO_CHECK[@]}"; do
    if [[ ! -f "$FILE" || ! cmp -s "$BACKUP_DIR/$(basename $FILE)" "$FILE" ]]; then
        echo "Файл $FILE поврежден или отсутствует. Восстанавливаем..."
        cp "$BACKUP_DIR/$(basename $FILE)" "$FILE"
    fi
done

# Перезапуск критических служб
SERVICES=("nginx" "mysql")
for SERVICE in "${SERVICES[@]}"; do
    if ! systemctl is-active --quiet "$SERVICE"; then
        echo "Служба $SERVICE не работает. Перезапускаем..."
        systemctl restart "$SERVICE"
    fi
done

echo "Восстановление завершено."
Автоматизация проверок с cron. Для регулярного выполнения скрипта можно использовать cron. Например, для запуска каждые 5 минут:

*/5 * * * * /path/to/restore_script.sh
BashTex 📱 #bash

Эффективная обработка CSV-файлов с помощью awk Работа с CSV-файлами может быть упрощена до нескольких команд с использованием awk. Этот инструмент позволяет легко манипулировать данными, фильтровать строки и производить вычисления. 1. Чтение CSV-файлов. Предположим, у вас есть CSV-файл data.csv следующего вида:

name,age,city
Ivan,30,Moscow
Bob,25,New York
Ruslan,35,Kazan
Чтобы вывести все строки с awk, используйте:

awk -F, '{print $1, $2, $3}' data.csv

name age city
Ivan 30 Moscow
Bob 25 New York
Ruslan 35 Kazan
Здесь -F, указывает awk, что поля разделяются запятыми. 2. Фильтрация данных. Для вывода только тех строк, где возраст больше 30:

awk -F, '$2 > 30 {print $1, $2, $3}' data.csv

Ruslan 35 Kazan
3. Агрегация данных. Подсчет среднего возраста:

awk -F, 'NR>1 {sum+=$2; count++} END {print "Средний возраст:", sum/count}' data.csv

Средний возраст: 30
4. Изменение данных. Изменение формата имени в файле:

awk -F, 'BEGIN{OFS=","} {gsub(/Ivan/, "Konstantin", $1); print}' data.csv

name,age,city
Konstantin,30,Moscow
Bob,25,New York
Ruslan,35,Kazan
5. Конвертация CSV в JSON. Вы можете преобразовать CSV в JSON-формат:

awk -F, 'NR==1 {for(i=1;i<=NF;i++) header[i]=$i} NR>1 {printf "{"; for(i=1;i<=NF;i++) printf "\"%s\":\"%s\"%s", header[i], $i, (i==NF ? "" : ","); print "}"}' data.csv
Вывод:

{"name":"Ivan","age":"30","city":"Moscow"}
{"name":"Bob","age":"25","city":"New York"}
{"name":"Ruslan","age":"35","city":"Kazan"}
awk позволяет легко фильтровать, модифицировать и анализировать данные, что делает его незаменимым в арсенале каждого администратора и разработчика. BashTex 📱 #linux #utils

Автоматизация тестирования производительности приложения Эффективное тестирование производительности приложения требует не просто генерации нагрузки, а имитации реальных пользовательских сценариев. Такой подход позволяет выявить узкие места и обеспечить стабильную работу под высокой нагрузкой. В этой статье рассмотрим, как создать скрипты для автоматизированного тестирования с использованием популярных инструментов. Для симуляции пользовательского поведения подходят инструменты, такие как Apache JMeter, Gatling, или k6. Сегодня поговорим про k6 - легковесном и мощном инструменте для нагрузочного тестирования. 1. Создание Скрипта на k6. k6 позволяет описывать сценарии в виде JavaScript-кода, что делает его удобным для разработчиков. Пример Скрипта:

import http from 'k6/http';
import { sleep, check } from 'k6';

export let options = {
    stages: [
        { duration: '2m', target: 100 }, // Разогрев
        { duration: '5m', target: 100 }, // Пик нагрузки
        { duration: '2m', target: 0 },   // Спад
    ],
};

export default function () {
    let res = http.get('https://bashtex.com');
    
    check(res, {
        'статус 200': (r) => r.status === 200,
        'время отклика < 200мс': (r) => r.timings.duration < 200,
    });

    sleep(1);
}
2. Анализ результатов. После выполнения скрипта k6 выводит подробные метрики:

checks.....................: 100.00% ✓ 1200   ✗ 0
http_req_duration..........: avg=135ms  min=100ms  med=130ms  max=200ms  p(95)=180ms
http_reqs..................: 4000    13.333334/s
Эти метрики позволяют оценить производительность приложения и выявить потенциальные проблемы. 3. Автоматизация с CI/CD. Для полной автоматизации можно использовать тесты производительности в CI/CD пайплайн. Например, GitLab CI или Jenkins для запуска тестов при каждом деплое. Пример Конфигурации GitLab CI:

performance_test:
  script:
    - k6 run loadtest.js
  stage: test
Преимущества подхода:
Реалистичные сценарии: Тестирование, основанное на реальном поведении пользователей, дает более точные результаты. Автоматизация: Экономит время и усилия, минимизирует ручной труд. Интеграция: Легко встраивается в существующие процессы CI/CD, обеспечивая постоянный контроль за производительностью.
BashTex 📱 #bash

📈
📈

Fail2Ban: защита от перебора паролей и атак Fail2Ban - это инструмент безопасности, который мониторит журналы системы и автоматически банит IP-адреса при обнаружении подозрительных действий. Обычно используется для защиты от:
• Перебора паролей (brute force); • Подборов SSH; • Атак на веб-серверы.
1. Установка Fail2Ban. Для начала установим Fail2Ban. На большинстве дистрибутивов Linux это можно сделать с помощью пакетного менеджера:

sudo apt update
sudo apt install fail2ban
После установки сервис автоматически запускается. 2. Базовая настройка. Создание конфигурационного файла: Редактировать основной конфигурационный файл /etc/fail2ban/jail.conf не рекомендуется. Вместо этого создайте файл jail.local:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Настройка защиты для SSH: В файле jail.local найдите секцию [sshd] и проверьте, что она выглядит вот так:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
enabled = true: Включает фильтрацию для SSH.
maxretry = 5: Блокировка после 5 неудачных попыток.
bantime = 600: IP будет заблокирован на 10 минут (600 секунд).
После внесения изменений перезапустите Fail2Ban:

sudo systemctl restart fail2ban
3. Проверка работы. Для проверки статуса и блокировок используйте:

sudo fail2ban-client status sshd
Вы увидите список заблокированных IP-адресов и количество активных банов. 4. Дополнительные настройки. Добавление исключений: Если вы хотите исключить некоторые IP из блокировок, добавьте их в /etc/fail2ban/jail.local:

ignoreip = 127.0.0.1/8 192.168.0.1
5. Настройка уведомлений: Fail2Ban может отправлять уведомления на почту при блокировке IP. Для этого настройте секцию [action] в jail.local:

destemail = admin@bashtex.ru
sendername = Fail2Ban
action = %(action_mwl)s
BashTex 📱 #linux #security

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

#!/bin/bash

#директория для резервных копий
BACKUP_DIR="/backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

#функция для резервного копирования
backup_service() {
    echo "Создание резервной копии..."
    cp -r /path/to/service "$BACKUP_DIR"
}

#функция обновления
update_service() {
    echo "Обновление сервиса..."
    if apt-get update && apt-get install --only-upgrade myservice; then
        echo "Обновление успешно завершено"
    else
        echo "Ошибка при обновлении"
        restore_service
    fi
}

#функция проверки целостности
check_integrity() {
    echo "Проверка целостности..."
    if systemctl is-active --quiet myservice; then
        echo "Сервис работает корректно"
    else
        echo "Обнаружены проблемы, выполняется откат"
        restore_service
    fi
}

#функция отката
restore_service() {
    echo "Выполняется откат..."
    cp -r "$BACKUP_DIR" /path/to/service
    systemctl restart myservice
    if systemctl is-active --quiet myservice; then
        echo "Откат успешно выполнен"
    else
        echo "Ошибка при откате, требуется ручное вмешательство"
    fi
}

#основной процесс
backup_service
update_service
check_integrity
Описание скрипта: Резервное копирование: Создаётся резервная копия текущего состояния сервиса. Обновление: Устанавливается обновление, и если оно завершается с ошибкой, скрипт вызывает функцию отката. Проверка целостности: Проверяется, работает ли сервис корректно после обновления. Откат: В случае проблем восстанавливается состояние из резервной копии, и сервис перезапускается. Пример использования. Выполнение скрипта:

./update_service.sh
Ожидаемый вывод:

Создание резервной копии...
Обновление сервиса...
Обновление успешно завершено
Проверка целостности...
Сервис работает корректно
Если произойдёт ошибка:

Создание резервной копии...
Обновление сервиса...
Ошибка при обновлении
Выполняется откат...
Откат успешно выполнен
Скрипт минимизируюет риск сбоев и упрощают управление критическими сервисами. BashTex 📱 #bash #utils

Настройка CI/CD для Бэкапов: Автоматизация резервного копирования Настройка CI/CD для автоматизации бэкапов позволяет обеспечить постоянное и надежное резервное копирование данных с минимальными усилиями. Зачем нужен CI/CD для бэкапов:
Автоматизация: Устраняет необходимость ручного запуска бэкапов. Консистентность: Гарантирует, что бэкапы выполняются регулярно и в соответствии с установленным графиком. Мониторинг и уведомления: Уведомления о состоянии бэкапов и возможность быстрого реагирования на сбои. Версионность: Легкий доступ к нескольким версиям данных для восстановления.
Настройка CI/CD для бэкапов 1. Выбор инструмента CI/CD. Популярные инструменты для CI/CD, такие как Jenkins, GitLab CI/CD, или GitHub Actions, позволяют легко автоматизировать бэкап-процессы. 2. Создание скрипта для бэкапов. Например, для резервного копирования базы данных можно использовать скрипт на Bash:

#!/bin/bash

# Переменные
BACKUP_DIR="/backups"
DB_NAME="mydatabase"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$TIMESTAMP.sql.gz"

# Создание резервной копии
mysqldump $DB_NAME | gzip > $BACKUP_FILE

# Уведомление
if [ $? -eq 0 ]; then
  echo "Backup successful: $BACKUP_FILE"
else
  echo "Backup failed" >&2
fi
3. Интеграция с CI/CD пайплайном. Добавьте шаги в CI/CD пайплайн для выполнения бэкапа. Пример для GitLab CI/CD:

stages:
  - backup

backup_job:
  stage: backup
  script:
    - chmod +x backup.sh
    - ./backup.sh
  only:
    - main
4. Настройка расписания. Используйте встроенные возможности планирования, чтобы выполнять бэкапы по расписанию: GitHub Actions:

name: Scheduled Backup

on:
  schedule:
    - cron: '0 2 * * *' # Ежедневно в 2:00

jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
      - name: Run backup script
        run: ./backup.sh
GitLab CI/CD: Настройте расписание в интерфейсе "CI/CD > Schedules". 5. Уведомления и мониторинг. Подключите уведомления для получения отчётов о выполнении бэкапов. ⚡️ Преимущества настройки CI/CD для бэкапов:
Непрерывность: Регулярные и автоматизированные бэкапы. Масштабируемость: Легко добавлять новые задачи резервного копирования по мере роста данных. Контроль и прозрачность: История выполнения бэкапов доступна в интерфейсе CI/CD инструмента.
BashTex 📱 #linux #utils

Настройка Nextcloud: Личное облако на вашем сервере Если вы хотите взять под контроль свои данные и создать личное облачное хранилище, Nextcloud - хороший выбор. Это бесплатное и мощное решение позволяет организовать собственное облако с полным контролем над конфиденциальностью. 1. Подготовка окружения. Для начала убедитесь, что у вас есть LAMP-стек (Linux, Apache, MySQL/MariaDB, PHP) на сервере. Если нет, установите его:

sudo apt update && sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-cli
Убедитесь, что необходимые модули PHP установлены:

sudo apt install php-xml php-mbstring php-zip php-gd php-curl php-intl php-bcmath php-imagick
2. Скачивание и установка Nextcloud. Загрузите последнюю версию Nextcloud:

wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar -xjf latest.tar.bz2
sudo mv nextcloud /var/www/
3. Настройка Apache. Создайте конфигурацию виртуального хоста для Nextcloud:

sudo nano /etc/apache2/sites-available/nextcloud.conf
Добавьте следующее содержимое:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    DocumentRoot /var/www/nextcloud
    ServerName your-domain.com

    <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
    CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined

</VirtualHost>
Активируйте конфигурацию:

sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl restart apache2
4. Настройка базы данных. Создайте базу данных и пользователя для Nextcloud:

sudo mysql -u root -p
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
5. Финальная настройка через веб-интерфейс. Перейдите в браузере на http://your-domain.com, чтобы завершить установку через веб-интерфейс. Введите данные для базы данных, создайте администратора и настройте параметры хранения. ❗️ После установки рекомендуется:
Активировать HTTPS: Настройте SSL-сертификат с помощью Let's Encrypt. Настроить файервол: Закройте ненужные порты и оставьте открытыми только те, что необходимы для работы. Регулярное обновление: Следите за обновлениями Nextcloud и плагинов.
BashTex 📱 #linux #utils

netstat: Поиск подозрительных соединений Если вы подозреваете, что на вашем сервере происходят странные или нежелательные сетевые активности, netstat поможет выявить потенциальные угрозы. Рассмотрим, как найти подозрительные соединения с помощью этого инструмента. Основные команды 1. Просмотр всех активных подключений. Для начала выведите все активные соединения:

netstat -an
-a - показывает все активные соединения и ожидающие порты. -n - выводит IP-адреса и номера портов в числовом формате. 2. Фильтрация по TCP/UDP. Если вас интересуют только TCP или UDP соединения:

netstat -tuln
-t - отображает только TCP. -u - отображает только UDP. -l - показывает порты, которые прослушиваются. -n - выводит числовой формат адресов и портов. Поиск подозрительных соединений 1. Проверка соединений с внешними IP. Чтобы найти соединения с незнакомыми IP-адресами:

netstat -an | grep ESTABLISHED
Ищите IP-адреса, которые не должны подключаться к вашему серверу. Если что-то кажется подозрительным, проверьте, к какому процессу относится соединение:

netstat -anp | grep <подозрительный IP>
2. Обнаружение нежелательных открытых портов. Иногда вредоносное ПО может открыть порты без вашего ведома:

netstat -anp | grep LISTEN
Ищите неизвестные или необычные порты, которые ваш сервер не должен использовать. 3. Выявление высоких пиков соединений. Чтобы найти процессы с необычно большим количеством активных соединений:

netstat -anp | awk '{print $7}' | sort | uniq -c | sort -nr
Эта команда покажет, какие процессы держат наибольшее количество соединений. 🔒 Советы по обеспечению безопасности
Регулярно проверяйте соединения: Используйте netstat в крон-джобах для регулярного мониторинга. Настройте оповещения: Интеграция с системами оповещений (например, Zabbix) позволит вам реагировать на аномальные соединения в реальном времени. Ограничивайте доступ: Используйте файерволы (например, iptables или ufw) для ограничения входящих соединений.
netstat - это первый рубеж обороны при мониторинге и диагностике сетевой активности. Зная, как быстро обнаружить подозрительные соединения, вы сможете оперативно реагировать на угрозы и поддерживать безопасность вашего сервера на высоком уровне. BashTex 📱 #network #security

jq для обработки JSON: базовые и продвинутые примеры jq - это легковесный и гибкий инструмент командной строки для обработки и анализа JSON. Если вам нужно вытаскивать данные, фильтровать или преобразовывать JSON-файлы, jq станет незаменимым помощником. Давайте рассмотрим базовые и продвинутые примеры его использования. 1. Чтение и форматирование JSON. Вывести JSON с красивым форматированием:

echo '{"name": "Alice", "age": 30, "city": "Paris"}' | jq .
. - это самый простой фильтр, который просто выводит входной JSON. 2. Извлечение конкретного значения. Извлечь значение поля name:

echo '{"name": "Alice", "age": 30}' | jq '.name'
Вывод:

"Alice"
3. Фильтрация массива. Вывести имена из массива объектов:

echo '[{"name": "Alice"}, {"name": "Bob"}]' | jq '.[].name'
Вывод:

"Alice"
"Bob"
Продвинутые примеры 1. Условная фильтрация. Отфильтруем объекты, где age больше 25:

echo '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 20}]' | jq '.[] | select(.age > 25)'
Результат:

{"name": "Alice", "age": 30}
2. Преобразование структуры данных. Изменим структуру JSON, преобразовав ключи в массив:

echo '{"name": "Alice", "age": 30}' | jq 'to_entries | map({(.key): .value})'
Результат:

[{"name":"Alice"}, {"age":30}]
3. Группировка данных. Группировка массива по определённому полю:

echo '[{"name": "Alice", "group": "admin"}, {"name": "Bob", "group": "user"}, {"name": "Charlie", "group": "admin"}]' | jq 'group_by(.group) | map({group: .[0].group, members: .})'
Результат:

[{"group":"admin","members":[{"name":"Alice","group":"admin"},{"name":"Charlie","group":"admin"}]}, {"group":"user","members":[{"name":"Bob","group":"user"}]}]
Объединение данных 1. Объединение JSON из двух файлов. Объединим данные из file1.json и file2.json:

jq -s '.[0] * .[1]' file1.json file2.json
-s читает все входные файлы в массив. * объединяет два JSON-объекта. 👍 Полезные советы Используйте jq с curl для обработки данных из API:

curl -s https://api.example.com/data | jq '.items[] | {name: .name, id: .id}'
Фильтруйте сложные JSON-файлы:

jq '.store.book[] | select(.price < 10)' books.json
Это выведет все книги с ценой меньше 10. --- jq - это универсальный инструмент для работы с JSON, который позволяет не только извлекать данные, но и модифицировать их по сложным правилам. С помощью jq можно существенно сократить время на обработку данных и автоматизировать задачи, которые раньше занимали часы. BashTex 📱 #linux #utils

Тонкости использования iptables для фильтрации трафика iptables - это инструмент для управления сетевой безопасностью в Linux. Он позволяет фильтровать входящий, исходящий и проходящий трафик, обеспечивая гибкость и контроль над сетью. Разберём несколько ключевых моментов и тонкостей его использования. Основные цепочки iptables
INPUT — фильтрует входящий трафик. FORWARD — фильтрует трафик, проходящий через сервер. OUTPUT — фильтрует исходящий трафик.
Примеры использования 1. Блокировка IP-адреса. Чтобы заблокировать доступ с конкретного IP-адреса:

iptables -A INPUT -s 192.168.1.100 -j DROP
-A INPUT - добавляем правило в цепочку INPUT. -s - указывает источник (source). -j DROP - блокирует трафик. 2. Разрешение доступа по порту. Разрешить входящий трафик на порт 22 (SSH):

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-p tcp - указывает, что правило применимо к протоколу TCP. --dport 22 - указывает порт назначения. 3. Ограничение количества подключений. Ограничение количества новых подключений с одного IP-адреса:

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT
-m connlimit - модуль для ограничения количества соединений. --connlimit-above 10 - ограничивает до 10 соединений с одного IP. ❗️ Тонкости и советы 1. Логирование заблокированного трафика. Для диагностики полезно логировать заблокированные пакеты:

iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "
--log-prefix добавляет префикс к каждому сообщению журнала. 2. Сохранение правил. После настройки важно сохранить правила, чтобы они не сбросились после перезагрузки:

iptables-save > /etc/iptables/rules.v4
iptables-save сохраняет текущие правила в файл. 3. Использование пользовательских цепочек. Создание пользовательской цепочки для упрощения управления правилами:

iptables -N my_custom_chain
iptables -A INPUT -j my_custom_chain
iptables -A my_custom_chain -s 192.168.1.100 -j DROP
-N создаёт новую цепочку. Это позволяет централизовать управление специфическими правилами. Динамическое изменение правил Для обеспечения гибкости iptables позволяет добавлять и удалять правила на лету. Например, временное блокирование IP:

iptables -I INPUT -s 192.168.1.101 -j DROP
sleep 300
iptables -D INPUT -s 192.168.1.101 -j DROP
Этот скрипт блокирует IP на 5 минут. --- iptables предоставляет широкий спектр возможностей для фильтрации и контроля сетевого трафика. Понимание тонкостей и правильное применение правил помогут защитить серверы и сети от угроз, обеспечив безопасную и стабильную работу. BashTex 📱 #linux #networks

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

sed 's/старый/новый/g' bigfile.txt
s/старый/новый/g - заменяет все вхождения слова "старый" на "новый" в каждом строке файла. Удаление строк по условию. Удалим все строки, содержащие слово "ошибка":

sed '/ошибка/d' bigfile.txt
/ошибка/d - удаляет строки с упоминанием слова "ошибка". Извлечение строк. Извлечём строки с 10 по 20:

sed -n '10,20p' bigfile.txt
-n отключает автоматический вывод, а 10,20p выводит строки с 10 по 20. Обработка больших файлов. sed обрабатывает файлы построчно, что делает его идеальным для работы с огромными текстовыми данными. Пример: Удаление пустых строк. Если нужно очистить файл от пустых строк:

sed '/^$/d' bigfile.txt > cleaned.txt
/^$/d - удаляет строки, содержащие только перенос строки. Пример: Добавление текста в начало файла Добавим текст "Заголовок" в начало большого файла:

sed -i '1i Заголовок' bigfile.txt
1i — вставляет текст перед первой строкой. Автоматизация с sed. sed отлично подходит для автоматизации задач в скриптах. Например, регулярная замена в логах или данных:

#!/bin/bash
for file in /logs/*.log; do
  sed -i 's/DEBUG/INFO/g' "$file"
done
Этот скрипт обновит все лог-файлы, заменив уровень логирования DEBUG на INFO. Советы по оптимизации
Используйте -i для редактирования файла на месте (встроенное изменение). При работе с огромными файлами добавьте -e для объединения нескольких команд sed в один проход.
BashTex 📱 #linux #utils

Но есть нюанс
Но есть нюанс

Шифрование файлов с помощью GPG: просто и эффективно Когда возникает необходимость защитить конфиденциальные данные, gpg становится вашим надёжным инструментом. Он позволяет шифровать файлы, расшифровывать их и даже добавлять цифровые подписи для проверки подлинности. Установка GPG На большинстве систем Linux gpg уже установлен. Если его нет, добавьте его с помощью:

sudo apt install gnupg  # Для систем на базе Debian/Ubuntu  
sudo yum install gnupg  # Для CentOS/RHEL
Шифрование файла: базовый пример. Чтобы зашифровать файл, выполните:

gpg -c secret.txt
-c указывает использовать симметричное шифрование. Вас попросят ввести пароль, который будет использоваться для шифрования. После выполнения команды появится файл secret.txt.gpg. Расшифровка файла. Чтобы вернуть исходный файл:

gpg -d secret.txt.gpg > secret.txt
Вас попросят ввести пароль, использованный при шифровании. Шифрование с использованием публичного ключа Симметричное шифрование подходит для личного использования, но если вы хотите отправить файл другому человеку, лучше использовать асимметричное шифрование. 1. Создайте пару ключей

gpg --full-generate-key
Выберите тип ключа, срок действия и задайте пароль. 2. Экспортируйте публичный ключ. Поделитесь своим публичным ключом с другим человеком:

gpg --export -a "Your Name" > public.key
3. Зашифруйте файл с публичным ключом. Используйте публичный ключ получателя:

gpg --encrypt --recipient "Recipient Name" secret.txt
Это создаст файл secret.txt.gpg. 4. Расшифровка полученного файла. Получатель может расшифровать файл с помощью своей пары ключей:

gpg --decrypt secret.txt.gpg > secret.txt
Автоматизация процесса Чтобы избежать ввода пароля каждый раз, можно использовать файл ключей. Добавьте пароль в файл:

echo "mysecretpassphrase" > passphrase.txt
Укажите его при выполнении команды:

gpg --batch --yes --passphrase-file passphrase.txt -c secret.txt
❗️ Убедитесь, что файл с паролем защищён:

chmod 600 passphrase.txt
Применение GPG в реальной жизни Резервное копирование: Защитите архивы перед загрузкой в облако.

tar -czf - mydata | gpg -c -o mydata.tar.gz.gpg
Обмен файлами: Убедитесь, что ваши данные безопасно передаются. Цифровая подпись: Подтвердите подлинность своих файлов. 🔒 gpg - это мощный инструмент, который обеспечивает безопасность данных без лишних сложностей. С его помощью можно защитить как личные файлы, так и данные, передаваемые другим людям. BashTex 📱 #linux #security

Повышение надёжности crontab с помощью встроенного логгинга и уведомлений crontab - это один из самых популярных инструментов для автоматизации задач в Linux. Однако ошибки в задачах часто остаются незамеченными, если не настроить должным образом логгирование и уведомления. Давайте разберём, как повысить надёжность автоматизированных задач с помощью встроенных средств. Почему это важно?
Прозрачность: Логирование позволяет отслеживать, что выполняется, и выявлять ошибки. Своевременность: Уведомления предупреждают о проблемах без необходимости проверки вручную. Контроль: Вы уверены, что задачи выполняются по расписанию.
Логгирование задач в crontab Базовый способ: перенаправление вывода. Вывод команды можно перенаправить в файл для последующего анализа:

* * * * * /path/to/command >> /var/log/cron.log 2>&1
>> /var/log/cron.log - записывает стандартный вывод (stdout) в лог-файл. 2>&1 - перенаправляет ошибки (stderr) туда же. Разделение stdout и stderr. Иногда нужно отдельно анализировать стандартный вывод и ошибки:

* * * * * /path/to/command > /var/log/cron_output.log 2> /var/log/cron_error.log
Уведомления об ошибках 1. Использование переменной MAILTO. Добавьте в crontab строку:

MAILTO="your_email@bashtex"
Теперь весь вывод задач (stdout и stderr) будет отправляться на указанный адрес. ❗️ Примечание: Для этого должен быть настроен почтовый агент, например, Postfix или ssmtp. 2. Уведомления через скрипт. Если вы хотите отправлять уведомления только при ошибках, используйте следующий подход:

* * * * * /path/to/command || echo "Error in cron task" | mail -s "Cron Error" your_email@bashtex.com
|| - выполняет команду справа, если слева была ошибка. mail - отправляет письмо с уведомлением. Дополнительные советы для повышения надёжности 1. Проверка состояния crontab. Вывод всех задач и возможных ошибок можно проверить командой:

grep CRON /var/log/syslog
2. Логгирование времени выполнения. Для задач с длительным выполнением полезно записывать, сколько времени они занимают:

* * * * * /usr/bin/time -o /var/log/task_time.log -a /path/to/command
-o /var/log/task_time.log - записывает время в файл. -a - добавляет данные в конец файла. 3. Уведомления в Telegram. С помощью утилиты curl можно отправлять уведомления в Telegram:

* * * * * /path/to/command || curl -s -X POST https://api.telegram.org/bot<TOKEN>/sendMessage -d chat_id=<CHAT_ID> -d text="Error in cron task"
--- Безопасность и удобство Логи для каждого задания. Для разделения логов создайте директорию /var/log/cron_tasks и используйте её:

* * * * * /path/to/command >> /var/log/cron_tasks/task1.log 2>&1
Используйте скрипты-обёртки. Для сложных задач создайте скрипт с проверкой выполнения:

#!/bin/bash
LOG_FILE="/var/log/cron_tasks/task.log"
ERROR_FILE="/var/log/cron_tasks/task_error.log"

{
  echo "Task started: $(date)"
  /path/to/command
  echo "Task completed: $(date)"
} >> "$LOG_FILE" 2>> "$ERROR_FILE" || mail -s "Task Failed" your_email@example.com < "$ERROR_FILE"
Запустите его через crontab:

* * * * * /path/to/script.sh
Добавив логгирование и уведомления в crontab, вы получите уверенность в выполнении задач и сможете быстро реагировать на любые проблемы. Это не только упрощает администрирование, но и повышает стабильность системы. BashTex 📱 #linux #security

Спасибо, именно этого я и ожидал
Спасибо, именно этого я и ожидал

🎅 Новый год: Распакуем 2025 и архивируем 2024! Вот и подходит к концу наш "рабочий процесс" под названием 2024. Пора сделать tar старого года, чтобы освободить место для нового!

tar -cvf 2024.tar.gz ~/воспоминания/2024  
gzip 2024.tar.gz 
Теперь мы с уверенностью можем разархивировать 2025:

gunzip -c 2025.tar.gz | tar -xvf - 
Что внутри? 🔔 Новые вызовы 🥮 Достижения 📩 Уроки, которые сделают нас сильнее Пусть ваш 2025 год будет сжат по проблемам и распакован по успехам! Давайте сохраним только лучшие "файлы" прошлого года, а всё лишнее - rm -rf. Встретим 2025 с chmod +x на наши мечты! 🎄