Пример Bash-скрипта, который выполняет следующие задачи
1. Проверяет доступность важного веб-сервера.
2. Проверяет использование дискового пространства.
3. Делает бэкап указанных директорий.
4. Отправляет отчет на электронную почту администратора.
Пример скрипта:
Описание:
1. Проверка веб-сервера: Используется команда
2. Проверка дискового пространства: С помощью
3. Создание бэкапа: Команда
4. Отправка отчета: Отчет по всем операциям отправляется на почту администратора с помощью
Как использовать:
1. Задайте нужные параметры, такие как адрес веб-сервера, директории для бэкапа, порог использования диска и email.
2. Сделайте скрипт исполняемым:
3. Добавьте скрипт в cron для выполнения на регулярной основе:
Пример для выполнения каждый день в 00:00:
1. Проверяет доступность важного веб-сервера.
2. Проверяет использование дискового пространства.
3. Делает бэкап указанных директорий.
4. Отправляет отчет на электронную почту администратора.
Пример скрипта:
#!/bin/bash
# Установки
WEB_SERVER="https://example.com"
BACKUP_DIR="/backup"
TARGET_DIRS="/var/www /etc"
DISK_USAGE_THRESHOLD=90
ADMIN_EMAIL="admin@example.com"
DATE=$(date +"%Y-%m-%d")
BACKUP_FILE="$BACKUP_DIR/backup-$DATE.tar.gz"
# Проверка доступности веб-сервера
echo "Проверка доступности веб-сервера..."
if curl -s --head $WEB_SERVER | grep "200 OK" > /dev/null; then
echo "Веб-сервер доступен."
else
echo "Внимание: Веб-сервер недоступен!" | mail -s "Проблема с веб-сервером" $ADMIN_EMAIL
fi
# Проверка дискового пространства
echo "Проверка дискового пространства..."
DISK_USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
if [ $DISK_USAGE -gt $DISK_USAGE_THRESHOLD ]; then
echo "Внимание: Использование дискового пространства превысило $DISK_USAGE_THRESHOLD%!" | mail -s "Проблема с дисковым пространством" $ADMIN_EMAIL
else
echo "Дискового пространства достаточно."
fi
# Создание бэкапа
echo "Создание бэкапа..."
tar -czf $BACKUP_FILE $TARGET_DIRS
if [ $? -eq 0 ]; then
echo "Бэкап успешно создан: $BACKUP_FILE"
else
echo "Ошибка создания бэкапа!" | mail -s "Ошибка создания бэкапа" $ADMIN_EMAIL
fi
# Отправка отчета
echo "Отправка отчета на $ADMIN_EMAIL..."
REPORT="Отчет за $DATE\n\n"
REPORT+="Статус веб-сервера: $(curl -s --head $WEB_SERVER | head -n 1)\n"
REPORT+="Использование дискового пространства: $DISK_USAGE%\n"
REPORT+="Расположение бэкапа: $BACKUP_FILE\n"
echo -e $REPORT | mail -s "Ежедневный отчет системы" $ADMIN_EMAIL
echo "Готово."
Описание:
1. Проверка веб-сервера: Используется команда
curl
, чтобы проверить, доступен ли сайт.2. Проверка дискового пространства: С помощью
df
и awk
проверяется использование диска. Если превышен порог (90%), отправляется уведомление.3. Создание бэкапа: Команда
tar
архивирует и сжимает директории, которые указаны в переменной TARGET_DIRS
.4. Отправка отчета: Отчет по всем операциям отправляется на почту администратора с помощью
mail
.Как использовать:
1. Задайте нужные параметры, такие как адрес веб-сервера, директории для бэкапа, порог использования диска и email.
2. Сделайте скрипт исполняемым:
chmod +x /path/to/your/script.sh
3. Добавьте скрипт в cron для выполнения на регулярной основе:
crontab -e
Пример для выполнения каждый день в 00:00:
0 0 * * * /path/to/your/script.sh
❤2👍1
Bash. Проверки файлов
Kоманды позволяют проверять различные условия, касающиеся файлов
#!/bin/bash
Kоманды позволяют проверять различные условия, касающиеся файлов
-d file
# Проверяет, существует ли файл, и является ли он директорией.-e file
# Проверяет, существует ли файл.-f file
# Проверяет, существует ли файл, и является ли он файлом.-r file
# Проверяет, существует ли файл, и доступен ли он для чтения.-s file
# Проверяет, существует ли файл, и не является ли он пустым.-w file
# Проверяет, существует ли файл, и доступен ли он для записи.-x file
# Проверяет, существует ли файл, и является ли он исполняемым.file1 -nt file2
# Проверяет, новее ли file1, чем file2.file1 -ot file2
# Проверяет, старше ли file1, чем file2.-O file
# Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.-G file
# Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ] # если файл сущетсвует и он является директорией
then
echo "The $mydir directory exists" # выводим сообщение
cd $mydir # переходим в него
ls # отображаем содержимое
else # ИНАЧЕ
echo "The $mydir directory does not exist"
fi
❤1👍1
Haskell Dockerfile Linter
Интеллектуальный распаковщик Dockerfile, помогающий создавать лучшие образы Docker. Линтер разбирает Docker-файл на AST и выполняет правила поверх AST. Он опирается на поддержку ShellCheck для проверки Bash-кода внутри инструкций RUN.
https://github.com/hadolint/hadolint
Интеллектуальный распаковщик Dockerfile, помогающий создавать лучшие образы Docker. Линтер разбирает Docker-файл на AST и выполняет правила поверх AST. Он опирается на поддержку ShellCheck для проверки Bash-кода внутри инструкций RUN.
https://github.com/hadolint/hadolint
❤1
Утилита для бэкапов Borgbackup
Дедуплицирующий архиватор с сжатием и защищенным шифрованием.
BorgBackup дает вам:
Экономия места при хранении резервных копий.
Безопасное, аутентифицированное шифрование.
Сжатие: lz4, zstd, zlib, lzma или без него.
Возможность монтирования резервных копий с помощью FUSE.
Простая установка на различных платформах: Linux, macOS, BSD, ...
Свободное программное обеспечение (лицензия BSD).
Поддерживается большим и активным сообществом разработчиков с открытым исходным кодом.
GitHub https://github.com/borgbackup/borg
Demo https://www.borgbackup.org/demo.html
Дедуплицирующий архиватор с сжатием и защищенным шифрованием.
BorgBackup дает вам:
Экономия места при хранении резервных копий.
Безопасное, аутентифицированное шифрование.
Сжатие: lz4, zstd, zlib, lzma или без него.
Возможность монтирования резервных копий с помощью FUSE.
Простая установка на различных платформах: Linux, macOS, BSD, ...
Свободное программное обеспечение (лицензия BSD).
Поддерживается большим и активным сообществом разработчиков с открытым исходным кодом.
GitHub https://github.com/borgbackup/borg
Demo https://www.borgbackup.org/demo.html
🔥2❤1👍1
Как быстро очистить лог-файлы, не перезапуская сервис
Привет, коллеги! Сегодня хочу показать простой, но очень полезный приём для работы с логами. Иногда лог-файлы разрастаются до гигантских размеров, и хочется их обнулить — но без остановки сервиса, который пишет в этот файл.
Вот как это сделать:
Или, альтернативно:
📌 Что здесь происходит:
-
-
Главное: не удаляйте лог-файл напрямую!
Если вы сделаете
Если лог-файл всё-таки нужно удалить — сделайте это аккуратно:
Привет, коллеги! Сегодня хочу показать простой, но очень полезный приём для работы с логами. Иногда лог-файлы разрастаются до гигантских размеров, и хочется их обнулить — но без остановки сервиса, который пишет в этот файл.
Вот как это сделать:
: > /var/log/your-log.log
Или, альтернативно:
truncate -s 0 /var/log/your-log.log
📌 Что здесь происходит:
-
: >
— это no-op команда (:
) с перенаправлением вывода в файл, по сути затирает его.-
truncate -s 0
— устанавливает размер файла в 0 байт.Главное: не удаляйте лог-файл напрямую!
Если вы сделаете
rm /var/log/your-log.log
, то большинство демонов продолжат писать в уже открытый файловый дескриптор — и вы потеряете лог, не освободив место.Если лог-файл всё-таки нужно удалить — сделайте это аккуратно:
> /var/log/your-log.log && systemctl reload your-service
❤2
Шпаргалка по работе с Tmux (терминальный мультиплексор)
1. Установка
CentOS (нужен подключенный репо EPEL)
Fedora
Ubuntu/Debian
2. Конфигурационные файлы
(пользователя, системный):
До версии 2.1
3. Работа с Tmux
Старт
Префикс (с него начинаются команды)
Новое окно (нажать CTRL+b, затем нажать с)
Список окон
Переключение
Окна можно делить на панели (Panes)
Как в тайловых (мозаичных) оконных менеджерах.
Деление окна горизонтально
либо команда
Деление окна вертикально
либо команда
Переход между панелей
Изменение размеров панелей
Закрытие окон
либо
Отключение от сессии
либо
Список сессий
Подключиться к работающей сессии
Выбрать сессию
Завершение сессии
Завершить все сессии
Список поддерживаемых комманд
Дополнительная информация
1. Установка
CentOS (нужен подключенный репо EPEL)
# yum install tmux
Fedora
# dnf install tmux
Ubuntu/Debian
# apt-get install tmux
2. Конфигурационные файлы
(пользователя, системный):
~/.tmux.conf
/etc/tmux.conf
До версии 2.1
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
set -g mode-mouse on
3. Работа с Tmux
Старт
# tmux
//без параметров будет создана сессия 0# tmux new -s session1 //новая сессия session1
. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.Префикс (с него начинаются команды)
<C-b> (CTRL + b)
Новое окно (нажать CTRL+b, затем нажать с)
<C-b c>
Список окон
<C-b w>
// переключиться курсором вверх-внизПереключение
<C-b n>
// следующее окно<C-b p>
// предыдущее окно<C-b 0>
// переключиться на номер окнаОкна можно делить на панели (Panes)
Как в тайловых (мозаичных) оконных менеджерах.
Деление окна горизонтально
<C-b ">
либо команда
# tmux split-window -h
Деление окна вертикально
<C-b %>
либо команда
# tmux split-window -v
Переход между панелей
<C-b стрелки курсора>
// либо режим мышиИзменение размеров панелей
<C-b c-стрелки>
// либо режим мышиЗакрытие окон
<C-b x>
// нужно подтвердить yлибо
# exit
Отключение от сессии
<C-b d>
либо
# tmux detach
Список сессий
# tmux ls
Подключиться к работающей сессии
# tmux attach
//подключение к сессии, либо к единственной, либо последней созданной# tmux attach -t session1
// подключение к сессии session1Выбрать сессию
<C-b s>
Завершение сессии
# tmux kill-session -t session1
Завершить все сессии
# tmux kill-server
Список поддерживаемых комманд
# tmux list-commands
Дополнительная информация
# man tmux
❤2
Команды для получения сведений об оборудовании
Некоторые сведения об оборудовании можно получить из файлов каталога /proc:
Некоторые сведения об оборудовании можно получить из файлов каталога /proc:
cat /proc/devices
- информация о типах устройств.cat /proc/diskstats
- информация о дисковых устройствах.cat /proc/dma
- информация о режиме работы контроллера прямого доступа к памяти.cat /proc/iomem
- информация об адресах, используемых контроллерами ввода-вывода.cat /proc/ioports
- информация о портах ввода-вывода.cat /proc/meminfo
- информация об оперативной памяти.cat /proc/cpuinfo
- информация о процессорах..lshw
- отобразить полную информацию об оборудовании в текстовом формате.lshw -c storage
- отобразить информацию об устройствах хранения данных ( класса ”storage” )lscpu
- отобразить информацию о процессореlscpu | grep L2
- получить размер кэш второго уровня процессора.lscpu | grep Arch
- получить информацию об архитектуре процессора.lspci
- отобразить сведения об оборудовании на шине PCIlsusb
- отобразить сведения об оборудовании на шине USBdmidecode
отобразить версию программы, общую информация базы DMI, и расшифрованное содержимое отдельных записей.dmidecode -t bios
- сведения о BIOSdmidecode -t system
- сведения о переключателях системной платы.dmidecode -t baseboard
- сведения о материнской плате.dmidecode -t chassis
- сведения о переключателях и датчиках шасси.dmidecode -t processor
- сведения о центральном процессоре ( о процессорах для многопроцессорных систем ) .dmidecode -t memory
- сведения об оперативной памяти.dmidecode -t cache
- сведения о кэш-памяти.dmidecode -t connector
- сведения о разъемах контроллеров периферийных устройств.dmidecode -t slot
- сведения о разъемах PCI/PCI-Express❤4
Команда less
Команда less позволяет задействовать одноименную утилиту, предназначенную для постраничного вывода содержимого текстовых файлов значительного объема. Она похожа на команду more, но имеет больше функций, которые, тем не менее, могут потребоваться далеко не всем пользователям. Утилита особенно удобна для быстрого открытия текстовых файлов, так как не загружает их содержимое полностью.
Базовый синтаксис команды выглядит следующим образом:
Команда и назначение
Команда less позволяет задействовать одноименную утилиту, предназначенную для постраничного вывода содержимого текстовых файлов значительного объема. Она похожа на команду more, но имеет больше функций, которые, тем не менее, могут потребоваться далеко не всем пользователям. Утилита особенно удобна для быстрого открытия текстовых файлов, так как не загружает их содержимое полностью.
Базовый синтаксис команды выглядит следующим образом:
$ less [параметры] имя-текстового-файла
Команда и назначение
Клавиша со стрелкой вниз, Enter, e, j
Перемещение на одну строку к концу файлаКлавиша со стрелкой вверх, y, k
Перемещение на одну строку к началу файлаПробел, f
Перемещение на одну страницу к концу файлаb
Перемещение на одну страницу к началу файла/текст
Поиск текста по направлению к концу файла?текст
Поиск текста по направлению к началу файлаn
Повторение предыдущего поискаN
Повторение предыдущего поиска в обратном направленииHome, g
Переход к первой строке файлаNg
Переход к строке файла номер NEnd, G
Переход к последней строке файлаHome, p
Переход к началу файлаNp
Переход к позиции файла в N процентовq
Завершение работы утилитыh
Вывод информации о доступных командах❤1
Nginxpwner - это простой инструмент для поиска распространенных неправильных конфигураций и уязвимостей Nginx.
Install:
Install using Docker
Run the image
https://github.com/stark0de/nginxpwner
Install:
cd /opt
git clone https://github.com/stark0de/nginxpwner
cd nginxpwner
chmod +x install.sh
./install.sh
Install using Docker
git clone https://github.com/stark0de/nginxpwner
cd nginxpwner
sudo docker build -t nginxpwner:latest .
Run the image
sudo docker run -it nginxpwner:latest /bin/bash
https://github.com/stark0de/nginxpwner
👍2❤1
Проверка портов
Проверить порты можно с помощью следующих команд:
nmap: Nmap («Network Mapper») – это инструмент с открытым исходным кодом для исследования сети и аудита безопасности. Он был разработан для быстрого сканирования больших сетей.
netstat: Утилита netstat позволяет увидеть открытые в системе порты, а также открытые на данный момент сетевые соединения.
https://telegra.ph/Proverka-portov-09-17
Проверить порты можно с помощью следующих команд:
nc: Netcat
– простая утилита Unix, которая считывает и записывает данные через сетевые соединения, используя протокол TCP или UDP.nmap: Nmap («Network Mapper») – это инструмент с открытым исходным кодом для исследования сети и аудита безопасности. Он был разработан для быстрого сканирования больших сетей.
telnet
: Утилита telnet используется для интерактивного взаимодействия с другим хостом по протоколу TELNET.netstat: Утилита netstat позволяет увидеть открытые в системе порты, а также открытые на данный момент сетевые соединения.
ss
: Утилита ss — это современная альтернатива для команды netstat. В отличие от netstat, которая берет информацию из каталога /proc, утилита ss напрямую связывается со специальной подсистемой ядра Linuxlost
: Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые.https://telegra.ph/Proverka-portov-09-17
Выводим список файлов в домашней директории без использования ls или его алиасов
1. dir
2. printf
3. echo
3. vim
4. rm
5. rsync
6. grep
7. file
8. stat
9. head
10. getfacl
11. git
12. cat
13. lsattr
1. dir
dir -aA ~
2. printf
printf "%s\n" ~/* ~/.*
3. echo
echo -e 'echo \t\ty\b\b\b\b\b\b\b' | bash -i
echo -e 'echo \t\ty\b\b\b\b\b\b\b' | sh -i
3. vim
vim ~
4. rm
yes "n" | rm -i $HOME/* $HOME/.* 2>&1|grep -o "$HOME[^']*"
(echo y; yes n) | rm -ir ~ 2>&1 | sed -E -e "s/(rm:[^']+)|\?//g"
5. rsync
rsync --list-only ~/
6. grep
grep -l '.*' ~/* ~/.* 2>/dev/null || grep -L '.*' ~/* ~/.* 2>/dev/null
7. file
file ~/* ~/.*
8. stat
stat ~/* ~/.*|grep "/home"|awk '{print $2}'
stat -c "%A %G:%U %s %x %n" * \.*
stat *|awk '/File:/{print $2}'
9. head
head -n 0 -v ~/* ~/.*|awk '{print $2}'
10. getfacl
getfacl ~/* ~/.* | grep "# file" | awk '{print $3}'
11. git
git init ~/ ; curr=`pwd`; cd ~ ; git status; rm -rf .git; cd $curr ; curr=''
12. cat
cat ~ |strings |xargs -IX sh -c 'test -e X && echo X'
13. lsattr
lsattr ~/* ~/.* 2>&1 | grep -Po '/.*'
❤2👍2