Примеры типовых операций в bash-скриптах
1.Ввод-вывод, перенаправление
Не забываем, что для того, чтоб скрипт можно было запустить, надо изменить права доступа к нему, добавив возможность исполнения файла, например командой
chmod a+x script.sh
2.Арифметические действия, циклы по кол-ву раз
3.Разного рода проверки
4.Работа с FTP в скрипте.
5.Работа с telnet в скрипте.
Примечание: в этом случае root логинится без пароля, если нужен пароль, то надо добавить после echo "root" еще одно эхо с паролем.
Прочее полезное.
1.Ввод-вывод, перенаправление
#!/bin/bash
# Любой shell-скрипт всегда начинается со строчки #!/bin/bash (или #!/bin/sh)
# Комментарии всегда начинаются со знака #
# Для того, чтоб вывести на экран сообщение, используем команду ECHO
echo "hello, world"
# а это пример форматированного вывода... почти как в Си
printf "форматированный вывод десять=%d строка=%s float=%f шестнадцатиричное_число=0x%X\n" 10 "строка" 11.56 234
# пример чтения ввода с клавиатуры
read A
echo $A
printf "
вы только что ввели слово: %s\n" "$A"
#перенаправление, конвейеры, получение результата вывода другой программы
# пример генерации пароля из 10 букв
PASSWORD1=`cat /dev/urandom | tr -d -c 'a-zA-Z0-9' | fold -w 10 | head -1`
echo Password=$PASSWORD1
#кавычки вида `` дают результат вывода на экран того, что внутри них (т.е. выполняется
#программа или скрипт, написанные внутри таких кавычек и результат, выводимый ими на
#стандартный вывод является результатом операции "обратные кавычки"
#в данном случае результатом является вывод конвейера из нескольких программ.
#операция | обозначает конвейер. Т.е. в нашем примере:
#cat /dev/urandom выводит на стд.вывод содержимое файла /dev/urandom (спец.файл для генерации псевдослуч.чисел)
#tr осуществляет трансляцию,т.е. заменяет одни байты другими (это нужно, чтоб избежать появления в пароле непе-
#чатаемых символов)
#fold разбивает то, что ей пришло на стд.ввод на строки длиной 10 символов и выводит это на стд.вывод
#head -1 выводит первую строчку того, что ей пришло на стандартный ввод.
# или так:
PASSWORD2=`cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c10`
echo Password=$PASSWORD2
Не забываем, что для того, чтоб скрипт можно было запустить, надо изменить права доступа к нему, добавив возможность исполнения файла, например командой
chmod a+x script.sh
2.Арифметические действия, циклы по кол-ву раз
#!/bin/bash
A="10"
B="5"
C=`expr $A + $B`
printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C"
# пример цикла по i
I=0
while [ $I -lt 15 ]
do
printf "0x%02x " "$I"
I=`expr $I + 1`
done
echo
3.Разного рода проверки
#!/bin/bash
# пример проверки существования файла
# создаем файл test1
touch test1
# проверяем существование файла test1
if [ -f test1 ] ; then
echo "файл test1 существует"
fi
# проверяем несуществование файла test2
if ! [ -f test2 ] ; then
echo "файл test2 не существует"
fi
# краткая справка по другим опциям команды [ ]
# -d filename директория существует
# -f filename файл существует
# -L filename символьная ссылка существует
# -r, -w, -x файл доступен для чтения, записи или выполнения
# -s filename файл существует и имеет ненулевую длину
# f1 -nt f2 f1 новее чем f2
# f1 -ot f2 f1 старше чем f2
4.Работа с FTP в скрипте.
#!/bin/bash
ADDRESS=192.168.1.150
USER=root
PASSWORD=root
ftp -n -p ADDRESS <<EoF
user USER PASSWORD
cd /usr/bin
put my_cool_program
quit
EoF
exit 0
5.Работа с telnet в скрипте.
#!/bin/bash
(
sleep 1
echo "root"
echo "cd /tmp"
echo "ls"
sleep 1
echo "quit"
) | telnet 192.168.1.150
Примечание: в этом случае root логинится без пароля, если нужен пароль, то надо добавить после echo "root" еще одно эхо с паролем.
Прочее полезное.
#!/bin/bash
# пример цикла по множеству значений
for A in раз два три четыре пять
do
echo "$A,"
done
echo "вышел заяц погулять"
echo
❤2👍2
Пример 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="[email protected]"
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
Регулярные выражения Bash
Программа grep — это основной инструмент для работы с регулярными выражениями.
Самый простой случай использования grep — поиск строк, содержащих фиксированную подстроку. В следующем примере grep вывел все строки, содержащие последовательность
https://telegra.ph/Regulyarnye-vyrazheniya-Bash-11-01
Программа grep — это основной инструмент для работы с регулярными выражениями.
Самый простой случай использования grep — поиск строк, содержащих фиксированную подстроку. В следующем примере grep вывел все строки, содержащие последовательность
nologin
:
grep nologin /etc/passwd
Output:
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
games:x:5:60:games:/usr/games:/usr/sbin/nologin
...
https://telegra.ph/Regulyarnye-vyrazheniya-Bash-11-01
Telegraph
Регулярные выражения Bash
Одним из принципов Unix-систем является широкое использование текстовых данных: конфигурационные файлы, входные и выходные данные программ в *nix часто организованы в виде обычного текста. Регулярные выражения — это мощный инструмент для манипуляции текстовой…
❤2
Создаем логические тома LVM на Linux
Система хранения данных – один из тех кардинальных компонентов, без которых ваш сервер не может обойтись, и поэтому требует к себе пристального внимания, несмотря ни на что.
Это краткое руководство по внедрению LVM на вашем linux-сервере или рабочей станции.
https://telegra.ph/Sozdaem-logicheskie-toma-LVM-na-Linux-10-09
Система хранения данных – один из тех кардинальных компонентов, без которых ваш сервер не может обойтись, и поэтому требует к себе пристального внимания, несмотря ни на что.
Это краткое руководство по внедрению LVM на вашем linux-сервере или рабочей станции.
https://telegra.ph/Sozdaem-logicheskie-toma-LVM-na-Linux-10-09
❤2
Шпаргалка по скриптам Bash
Основы написания скриптов на Bash
Условные операторы
Циклы Bash
Арифметические операторы
Арифметические условные операторы
Операторы сравнения строк
Основы написания скриптов на Bash
Условные операторы
Циклы Bash
Арифметические операторы
Арифметические условные операторы
Операторы сравнения строк
🔥3❤1
Как провести Тех. обслуживание сервера с уведомлением пользователей?
Для начала создаем пустой файл
Переходим к уведомлениям, возможно кто-то в данный момент работает в терминале.
Воспользуемся утилитой wall.
Wall — утилита командной строки, которая отображает сообщение на терминалах всех вошедших в систему пользователей.
Запускаем команду:
Все кто подключен к серверу, получают сообщение:
И неважно что делает человек и где находится, сообщение появится у него на экране. Через wall можно спамить определенным группам пользователей.
В указанное время запускаем ассасина:
Выгнали всех с сервера, кроме root’а и проводим технические работы, удаляем /etc/nologin.
Wall можно заменить например на такое:
Но тут сообщение уйдет конкретному пользователю user. Конечно, если по какой-то причине, в системе отсутствует wall, можно и через цикл выгрести всех юзеров и через echo отправить им уведомление.
write - утилита, позволяющая отправить сообщение другому пользователю, который имеет сессию в этой же системе.
Или так:
Для начала создаем пустой файл
/etc/nologin
. Включаем возможность заходить под root
. Теперь только root
сможет авторизоваться по ssh
. Переходим к уведомлениям, возможно кто-то в данный момент работает в терминале.
Воспользуемся утилитой wall.
Wall — утилита командной строки, которая отображает сообщение на терминалах всех вошедших в систему пользователей.
Запускаем команду:
wall "... текст сообщения ..."
Все кто подключен к серверу, получают сообщение:
... текст сообщения ...
И неважно что делает человек и где находится, сообщение появится у него на экране. Через wall можно спамить определенным группам пользователей.
В указанное время запускаем ассасина:
pkill -9 -u `who | awk '{print $1}'| grep -v root|head -1
Выгнали всех с сервера, кроме root’а и проводим технические работы, удаляем /etc/nologin.
Wall можно заменить например на такое:
echo "какой-то текст" | write user
Но тут сообщение уйдет конкретному пользователю user. Конечно, если по какой-то причине, в системе отсутствует wall, можно и через цикл выгрести всех юзеров и через echo отправить им уведомление.
write - утилита, позволяющая отправить сообщение другому пользователю, который имеет сессию в этой же системе.
Или так:
echo "какой-то текст" > /dev/pts/1
❤2
Утилита динамического мониторинга процессов Nmon
Это утилита измерения и настройки производительности. Она может отображать информацию о ЦП, оперативной памяти, сети, дисках (в виде мини графиков или числовых данных), файловых системах, NFS, самых нагружающих процессах, ресурсах.
Устанавливается командой:
Для запуска утилиты необходимо выполнить команду:
https://telegra.ph/Utilita-dinamicheskogo-monitoringa-processov-Nmon-03-11
Это утилита измерения и настройки производительности. Она может отображать информацию о ЦП, оперативной памяти, сети, дисках (в виде мини графиков или числовых данных), файловых системах, NFS, самых нагружающих процессах, ресурсах.
Устанавливается командой:
sudo pamcan -S nmon
Для запуска утилиты необходимо выполнить команду:
nmon
https://telegra.ph/Utilita-dinamicheskogo-monitoringa-processov-Nmon-03-11
❤2
Как работает HTTPS?
Безопасный протокол передачи гипертекста
(HTTPS) - это расширение протокола передачи гипертекста (HTTP). HTTPS передает зашифрованные данные с использованием транспортного уровня безопасности (TLS). Если данные будут перехвачены в Интернете, все, что получит угонщик, - это двоичный код.
Как шифруются и дешифруются данные?
Шаг 1 - Клиент (браузер) и сервер устанавливают TCP-соединение.
Шаг 2 - Клиент отправляет серверу " client hello". Сообщение содержит набор необходимых алгоритмов шифрования (наборов шифров) и последнюю версию TLS, которую он может поддерживать. Сервер отвечает " server hello", чтобы браузер знал, может ли он поддерживать алгоритмы и версию TLS.
Затем сервер отправляет SSL-сертификат клиенту. Сертификат содержит открытый ключ, имя хоста, дату истечения срока действия и т. д. Клиент проверяет сертификат.
Шаг 3. После проверки SSL-сертификата клиент генерирует ключ сессии и шифрует его с помощью открытого ключа. Сервер получает зашифрованный ключ сеанса и расшифровывает его с помощью закрытого ключа.
Шаг 4 - Теперь, когда клиент и сервер владеют одним и тем же сеансовым ключом (симметричное шифрование), зашифрованные данные передаются по защищенному двунаправленному каналу.
Почему HTTPS переключается на симметричное шифрование при передаче данных? Есть две основные причины:
1. Безопасность: Асимметричное шифрование работает только в одну сторону. Это означает, что если сервер попытается отправить зашифрованные данные обратно клиенту, любой сможет расшифровать их с помощью открытого ключа.
2. Ресурсы сервера: Асимметричное шифрование добавляет довольно много математических накладных расходов. Оно не подходит для передачи данных в длительных сессиях.
Безопасный протокол передачи гипертекста
(HTTPS) - это расширение протокола передачи гипертекста (HTTP). HTTPS передает зашифрованные данные с использованием транспортного уровня безопасности (TLS). Если данные будут перехвачены в Интернете, все, что получит угонщик, - это двоичный код.
Как шифруются и дешифруются данные?
Шаг 1 - Клиент (браузер) и сервер устанавливают TCP-соединение.
Шаг 2 - Клиент отправляет серверу " client hello". Сообщение содержит набор необходимых алгоритмов шифрования (наборов шифров) и последнюю версию TLS, которую он может поддерживать. Сервер отвечает " server hello", чтобы браузер знал, может ли он поддерживать алгоритмы и версию TLS.
Затем сервер отправляет SSL-сертификат клиенту. Сертификат содержит открытый ключ, имя хоста, дату истечения срока действия и т. д. Клиент проверяет сертификат.
Шаг 3. После проверки SSL-сертификата клиент генерирует ключ сессии и шифрует его с помощью открытого ключа. Сервер получает зашифрованный ключ сеанса и расшифровывает его с помощью закрытого ключа.
Шаг 4 - Теперь, когда клиент и сервер владеют одним и тем же сеансовым ключом (симметричное шифрование), зашифрованные данные передаются по защищенному двунаправленному каналу.
Почему HTTPS переключается на симметричное шифрование при передаче данных? Есть две основные причины:
1. Безопасность: Асимметричное шифрование работает только в одну сторону. Это означает, что если сервер попытается отправить зашифрованные данные обратно клиенту, любой сможет расшифровать их с помощью открытого ключа.
2. Ресурсы сервера: Асимметричное шифрование добавляет довольно много математических накладных расходов. Оно не подходит для передачи данных в длительных сессиях.
❤5👍1
Как найти и убить процессы, занявшие порт в Linux
📌 Что делает эта команда:
-
-
-
💡 Альтернатива с
-
-
-
⚠️ Будь аккуратен, особенно с
fuser -k 8080/tcp
📌 Что делает эта команда:
-
fuser
— показывает, какие процессы используют файл или сокет;-
-k
— убивает найденные процессы;-
8080/tcp
— порт, который проверяем (можно заменить на свой).💡 Альтернатива с
lsof
:
kill -9 $(lsof -t -i:8080)
-
lsof -i:8080
— находит процессы, слушающие порт;-
-t
— выводит только PID;-
kill -9
— принудительно завершает процессы.⚠️ Будь аккуратен, особенно с
kill -9
— он не даёт процессу корректно завершиться.👍3❤1
Примеры типовых операций в bash-скриптах
Собрал для вас полезные кусочки Bash-кода, которые часто нужны при написании скриптов: арифметика, проверки, FTP, Telnet, циклы и т.д.
📌 Арифметика и цикл по количеству раз:
📌 Проверки файлов:
📌 Работа с FTP (без интерактива):
📌 Работа с Telnet:
⚠️ Если требуется пароль — добавь ещё
📌 Цикл по множеству значений:
Не забудь дать права на исполнение скрипта:
Собрал для вас полезные кусочки Bash-кода, которые часто нужны при написании скриптов: арифметика, проверки, FTP, Telnet, циклы и т.д.
📌 Арифметика и цикл по количеству раз:
#!/bin/bash
A="10"
B="5"
C=`expr $A + $B`
printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C"
# Цикл по числам от 0 до 14 (в 16-ричном формате)
I=0
while [ $I -lt 15 ]
do
printf "0x%02x " "$I"
I=`expr $I + 1`
done
echo
📌 Проверки файлов:
#!/bin/bash
# Создаем файл
touch test1
# Проверка существования файла
if [ -f test1 ]; then
echo "файл test1 существует"
fi
# Проверка отсутствия файла
if ! [ -f test2 ]; then
echo "файл test2 не существует"
fi
# Краткая шпаргалка:
# -d file — директория
# -f file — обычный файл
# -L file — символьная ссылка
# -r/-w/-x — права: чтение/запись/выполнение
# -s file — файл существует и не пустой
# f1 -nt f2 — f1 новее, чем f2
# f1 -ot f2 — f1 старше, чем f2
📌 Работа с FTP (без интерактива):
#!/bin/bash
ADDRESS=192.168.1.150
USER=root
PASSWORD=root
ftp -n -p $ADDRESS <<EoF
user $USER $PASSWORD
cd /usr/bin
put my_cool_program
quit
EoF
exit 0
📌 Работа с Telnet:
#!/bin/bash
(
sleep 1
echo "root"
echo "cd /tmp"
echo "ls"
sleep 1
echo "quit"
) | telnet 192.168.1.150
⚠️ Если требуется пароль — добавь ещё
echo "mypassword"
сразу после echo "root"
📌 Цикл по множеству значений:
#!/bin/bash
for A in раз два три четыре пять
do
echo "$A,"
done
echo "вышел заяц погулять"
Не забудь дать права на исполнение скрипта:
chmod a+x script.sh
❤2👍1
📌 Как проверить, какие процессы используют диск в Linux?
Всем доброо вечера! Сегодня разберёмся с ситуацией, когда диск в системе нагружен, а причина не ясна. Как узнать, какие процессы активно читают/пишут данные?
1. Используем
Это удобная утилита, показывающая процессы, активно работающие с диском. Установить её можно так:
Запускаем команду:
Можно добавить флаг
2. Анализируем с
Утилита
Здесь
3. Используем
Чтобы узнать, какие файлы открыты процессами на диске:
Например, чтобы посмотреть файлы в
4.
Хотите увидеть, какие файлы изменяются? Запустите:
Всем доброо вечера! Сегодня разберёмся с ситуацией, когда диск в системе нагружен, а причина не ясна. Как узнать, какие процессы активно читают/пишут данные?
1. Используем
iotop
Это удобная утилита, показывающая процессы, активно работающие с диском. Установить её можно так:
# Для Debian/Ubuntu:
sudo apt install iotop
# Для RHEL/CentOS/AlmaLinux/Rocky:
sudo dnf install iotop
Запускаем команду:
sudo iotop
Можно добавить флаг
-o
, чтобы показать только активные процессы:
sudo iotop -o
2. Анализируем с
pidstat
Утилита
pidstat
из пакета sysstat
поможет увидеть нагрузку на диск со стороны процессов:
sudo pidstat -d 1
Здесь
-d
— мониторинг I/O, а 1
— обновление раз в секунду.3. Используем
lsof
Чтобы узнать, какие файлы открыты процессами на диске:
sudo lsof +D /путь/к/директории
Например, чтобы посмотреть файлы в
/var/log
:
sudo lsof +D /var/log
4.
fatrace
– в реальном времени Хотите увидеть, какие файлы изменяются? Запустите:
sudo fatrace
👍2❤1