Как проверить контрольную сумму SHA с помощью bash скрипта
Во многих случаях контрольная сумма SHA предоставляется как есть, файл контрольной суммы содержит только контрольную сумму. Это создает проблему для стандартных служб, поскольку они ожидают имя файла, связанное с заданной контрольной суммой, используя формат GNU или BSD.
Решение заключается в создании простого скрипта оболочки, который будет выполнять дополнительные шаги для проверки контрольной суммы SHA.
🔨 bash_help
Во многих случаях контрольная сумма SHA предоставляется как есть, файл контрольной суммы содержит только контрольную сумму. Это создает проблему для стандартных служб, поскольку они ожидают имя файла, связанное с заданной контрольной суммой, используя формат GNU или BSD.
Решение заключается в создании простого скрипта оболочки, который будет выполнять дополнительные шаги для проверки контрольной суммы SHA.
#!/bin/bashОн автоматически проверит контрольную сумму SHA (в стиле GNU или BSD). Вы будете проинформированы в случае возникновения проблем.
# verify file checksum from a file
# checksum algorithms
algorithms=( 1 224 256 384 512 512224 512256 )
# file to check
file="$1"
# execute when there is one parameter
if [ "$#" -eq "1" ]; then
# check if file exist
if [ -f "${file}" ]; then
# find checksum file
for algorithm in "${algorithms[@]}"; do
if [ -f "${file}.sha${algorithm}" ]; then
echo "Found SHA${algorithm} checksum"
words="$(wc -w < ${file}.sha${algorithm})"
# verify checksum and pass the exit code
if [ "$words" == "1" ]; then
shasum --algorithm $algorithm --check <(echo $(cat ${file}.sha${algorithm})\ \ $file)
exit $?
elif [ "$words" == "2" ] || [ "$words" == "4" ]; then
shasum --algorithm $algorithm --check ${file}.sha${algorithm}
exit $?
fi
fi
done
fi
fi
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16😐11✍5🔥4
Сканирование подсети
В этом примере bash скрипт просканирует сеть на предмет хостов, подключенных по IP-адресам 10.1.1.1 – 255.
Скрипт выведет сообщение Хост с с IP: IP-адрес поднят, если команда ping была успешной.
Не стесняйтесь изменять скрипт для сканирования диапазона ваших хостов.
🔨 bash_help
В этом примере bash скрипт просканирует сеть на предмет хостов, подключенных по IP-адресам 10.1.1.1 – 255.
Скрипт выведет сообщение Хост с с IP: IP-адрес поднят, если команда ping была успешной.
Не стесняйтесь изменять скрипт для сканирования диапазона ваших хостов.
#!/bin/bashВыполнение:
is_alive_ping()
{
ping -c 1 $1 > /dev/null
[ $? -eq 0 ] && echo Хост с IP: $i поднят.
}
for i in 10.1.1.{1..255}
do
is_alive_ping $i & disown
done
./bash_ping_scan.shВывод:
Хост with IP: 10.1.1.1 поднят.
Хост with IP: 10.1.1.4 поднят.
Хост with IP: 10.1.1.9 поднят.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🔥9😐8✍7
Уведомление по почте, когда сервер не работает
Скрипт отправит электронное письмо на указанный адрес электронной почты, когда ping не может достичь места назначения.
Системный администратор может регулярно выполнять этот скрипт с использованием планировщика cron.
Сначала скрипт использует команду ping для проверки связи с хостом или IP-адресом, указанным в качестве аргумента.
В случае, если это место назначения недоступно, будет использована команда mail для уведомления системного администратора об этом событии.
🔨 bash_help
Скрипт отправит электронное письмо на указанный адрес электронной почты, когда ping не может достичь места назначения.
Системный администратор может регулярно выполнять этот скрипт с использованием планировщика cron.
Сначала скрипт использует команду ping для проверки связи с хостом или IP-адресом, указанным в качестве аргумента.
В случае, если это место назначения недоступно, будет использована команда mail для уведомления системного администратора об этом событии.
#!/bin/bashВыполнение:
for i in $@
do
ping -c 1 $i &> /dev/null
if [ $? -ne 0 ]; then
echo "`date`: ping не прошел, $i хост лежит !" | mail -s "$i хост лежит!" admin@itsecforu.ru
fi
done
./check_hosts.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍14✍2
Создаём логи мониторинга
Это модифицированная версия предыдущего примера. Если в системе не настроена почта, скрипт создаст файл логов.
Ядро скрипта заключено в бесконечный цикл while, который настроен на выполнение проверки ping каждый час (3600 секунд).
Измените скрипт в соответствии с вашими потребностями.
Удалите бесконечный цикл while, если вы собираетесь использовать этот скрипт с планировщиком cron.
🔨 bash_help
Это модифицированная версия предыдущего примера. Если в системе не настроена почта, скрипт создаст файл логов.
Ядро скрипта заключено в бесконечный цикл while, который настроен на выполнение проверки ping каждый час (3600 секунд).
Измените скрипт в соответствии с вашими потребностями.
Удалите бесконечный цикл while, если вы собираетесь использовать этот скрипт с планировщиком cron.
#!/bin/bash
LOG=/tmp/mylog.log
SECONDS=3600
EMAIL=admin@itsecforu.ru
for i in $@; do
echo "$i-UP!" > $LOG.$i
done
while true; do
for i in $@; do
ping -c 1 $i > /dev/null
if [ $? -ne 0 ]; then
STATUS=$(cat $LOG.$i)
if [ $STATUS != "$i-DOWN!" ]; then
echo "`date`: ping неудачен, $i хост лежит!" |
mail -s "$i хост лежит!" $EMAIL
fi
echo "$i-DOWN!" > $LOG.$i
else
STATUS=$(cat $LOG.$i)
if [ $STATUS != "$i-UP!" ]; then
echo "`date`: пинг прошел, $i Хост подня!" |
mail -s "$i Хост поднят !" $EMAIL
fi
echo "$i-UP!" > $LOG.$i
fi
done
sleep $SECONDS
done
Выполнение:./check-server-status.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥9✍4😐1
Автоматизация начальной настройки веб-сервера
Наверняка, у многих есть собственные веб серверы. Настройка нового сервера с нуля — достаточно нудное и времяубивающее трудоемкое занятие не только для новичка, но и для бывалых.
А если к тому же по долгу службы вам приходится настраивать по несколько серверов в неделю/месяц, то невольно начинаешь задумываться об автоматизации этого процесса. Хочу поделиться bash скриптом, который я использую для начальной настройки RedHat / CentOS серверов.
Скрипт рассчитан на настройку RedHat Enterprise Linux (CentOS) версий 5 и 6, но может быть легко адаптирован для других систем.
Итак, ввиду большого количества комментариев в коде, приведу только краткое описание.
**Подключение репозиториев
**Устанавка минимального набора утилит, необходимых для нормальной работы системы, а также зависимостей для новых программ
**Настройка SSHD
**Установка NTPD, выбор временной зоны, синхронизация даты
**Монтирование
**Установка и обновление CPANminus как замены CPAN
**Отключение ненужных сервисов из автозагрузки
Большинство операций скрипт выполнит самостоятельно, но некоторые действия со стороны пользователя все же необходимы. Например, ввод данных для создания SSL сертификата и подтверждение установки Virtualmin.
🖼️ Ссылка на скрипт
🔨 bash_help
Наверняка, у многих есть собственные веб серверы. Настройка нового сервера с нуля — достаточно нудное и времяубивающее трудоемкое занятие не только для новичка, но и для бывалых.
А если к тому же по долгу службы вам приходится настраивать по несколько серверов в неделю/месяц, то невольно начинаешь задумываться об автоматизации этого процесса. Хочу поделиться bash скриптом, который я использую для начальной настройки RedHat / CentOS серверов.
Скрипт рассчитан на настройку RedHat Enterprise Linux (CentOS) версий 5 и 6, но может быть легко адаптирован для других систем.
Итак, ввиду большого количества комментариев в коде, приведу только краткое описание.
**Подключение репозиториев
epel
, ius
, nginx
. Обновление пакетов**Устанавка минимального набора утилит, необходимых для нормальной работы системы, а также зависимостей для новых программ
**Настройка SSHD
**Установка NTPD, выбор временной зоны, синхронизация даты
**Монтирование
/tmp
и /dev/shm
c атрибутами noexec
и nosuid
**Установка и настройка Virtualmin, CSF Firewall, MySQL 5.5, PHP 5.4, Nginx, Postfix, SaslAuth, phpMyAdmin**Установка и обновление CPANminus как замены CPAN
**Отключение ненужных сервисов из автозагрузки
Большинство операций скрипт выполнит самостоятельно, но некоторые действия со стороны пользователя все же необходимы. Например, ввод данных для создания SSL сертификата и подтверждение установки Virtualmin.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17😐15✍4🔥4
Использование двойных кавычек для ссылки на переменные
Кавычки, ограничивающие строки, нужны для предотвращения интерпретации специальных символов, которые могут находиться в строке или в названиях переменных (за исключением некоторых специальных знаков). Использование двойных кавычек при обращении к переменным предотвращает разбиение строк при наличии в них пробелов на слова, а также — другие возможные сбои.
Проделайте пример ниже:
🔨 bash_help
Кавычки, ограничивающие строки, нужны для предотвращения интерпретации специальных символов, которые могут находиться в строке или в названиях переменных (за исключением некоторых специальных знаков). Использование двойных кавычек при обращении к переменным предотвращает разбиение строк при наличии в них пробелов на слова, а также — другие возможные сбои.
Проделайте пример ниже:
#!/bin/bash
#let script exit if a command fails
set -o errexit
#let script exit if an unsed variable is used
set -o nounset
words="I love bash"
echo "Words without double quotes"
for word in $words; do
echo "$word"
done
echo
echo "Words with double quotes"
for word in "$words"; do
echo "$word"
done
exit 0
Сохраните и закройте файл, затем — запустите его при помощи следующей команды:$ ./<your-file-name>.sh
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19✍5🔥2
Что такое Bashfuscator?
Bashfuscator – это модульный и расширяемый фреймворк для обфускации Bash, написанный на языке Python 3.
Он предоставляет множество различных способов сделать однострочные фразы или скрипты Bash гораздо более сложными для понимания.
Это достигается за счет генерации запутанного, рандомизированного кода Bash, который во время выполнения оценивается по исходному вводу и выполняется.
Bashfuscator позволяет легко генерировать сильно обфусцированные команды и скрипты Bash как из командной строки, так и в виде библиотеки Python.
Для работы Bashfuscator требуется Python 3.6+.
🖼️ Как установить
🔨 bash_help
Bashfuscator – это модульный и расширяемый фреймворк для обфускации Bash, написанный на языке Python 3.
Он предоставляет множество различных способов сделать однострочные фразы или скрипты Bash гораздо более сложными для понимания.
Это достигается за счет генерации запутанного, рандомизированного кода Bash, который во время выполнения оценивается по исходному вводу и выполняется.
Bashfuscator позволяет легко генерировать сильно обфусцированные команды и скрипты Bash как из командной строки, так и в виде библиотеки Python.
Для работы Bashfuscator требуется Python 3.6+.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16✍4🔥3
Горячие клавиши Bash
Работа с Bash была бы не такой удобной без горячих клавиш, которые позволяют упростить множество действий. Рассмотрим основные сочетания, некоторые из них вы и так используете каждый день:
Tab - автодополнение, наберите начало команды или пути и нажмите Tab, если такая команда только одна оболочка ее дополнит. Если доступно несколько вариантов, нажмите два раза Tab чтобы их увидеть;
Стрелка вверх - предыдущая команда в истории;
Стрелка вниз - следующая команда в истории;
Ctrl+R - поиск по истории. Просто нажмите эту кнопку и начните вводить нужную команду;
Ctrl+G - выйти из режима поиска;
Alt+. - предыдущее слово последней команды;
Ctrl+L - очистить вывод терминала;
Ctrl+A - перейти в начало строки;
Ctrl+E - в конец строки;
Ctrl+K - удалить символы начиная от курсора и к концу команды;
Ctrl+U - удалить символы от курсора до начала команды;
Ctrl+W - удалить все символы этого слова слева;
Ctrl+Y - удалить все символы этого слова справа;
Ctrl+S - остановить вывод на экран;
Ctrl+Q - возобновить вывод на экран.
Это все основные сочетания клавиш, которые вам понадобятся чтобы пользоваться bash. Конечно, существуют и другие, но эти основные.
🔨 bash_help
Работа с Bash была бы не такой удобной без горячих клавиш, которые позволяют упростить множество действий. Рассмотрим основные сочетания, некоторые из них вы и так используете каждый день:
Tab - автодополнение, наберите начало команды или пути и нажмите Tab, если такая команда только одна оболочка ее дополнит. Если доступно несколько вариантов, нажмите два раза Tab чтобы их увидеть;
Стрелка вверх - предыдущая команда в истории;
Стрелка вниз - следующая команда в истории;
Ctrl+R - поиск по истории. Просто нажмите эту кнопку и начните вводить нужную команду;
Ctrl+G - выйти из режима поиска;
Alt+. - предыдущее слово последней команды;
Ctrl+L - очистить вывод терминала;
Ctrl+A - перейти в начало строки;
Ctrl+E - в конец строки;
Ctrl+K - удалить символы начиная от курсора и к концу команды;
Ctrl+U - удалить символы от курсора до начала команды;
Ctrl+W - удалить все символы этого слова слева;
Ctrl+Y - удалить все символы этого слова справа;
Ctrl+S - остановить вывод на экран;
Ctrl+Q - возобновить вывод на экран.
Это все основные сочетания клавиш, которые вам понадобятся чтобы пользоваться bash. Конечно, существуют и другие, но эти основные.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍50✍14🔥6
Подготовка эффективной среды для написания bash сценариев
Если вам приходится писать bash скрипты или вы только планируете этим заняться, данная статья написана для вас.
Bash, он же возрождённый shell, является по-прежнему одним из самых популярных командных процессоров и интерпретаторов сценариев. Как бы его ненавидели и не пытались заменить, всё равно он присутствует вокруг нас и никуда не собирается исчезать.
Начнем с выбора среды разработки, именно она позволяет объединять различные аспекты написания программы, повышая продуктивность за счет объединения общих действий по написанию программного обеспечения в одном приложении.
Консольные текстовые редакторы. Vim, Emacs и Nano - классическая троица, сейчас уже редко кто использует на рабочих станциях как основной инструмент, но vi и nano незаменимы для быстрого редактирования файлов в удаленных ssh сессиях. Если вы еще не работали с ним, рекомендую освоить такие вещи как поиск, замена и форматирование, хотя бы в nano.
Графические текстовые редакторы. Mousepad, Gedit, Notepad++ и т.п. Легковесные редакторы, с подсветкой синтаксиса, автозаменой и прочим, что уже есть в консольных редакторах, но они всё еще не являются полноценной интегрированной средой разработки.
IDE. Geany, Atom, IntelliJ IDEA, Sublime Text и Visual Studio Code - это уже полноценные и расширяемые среды разработки. Долгие годы я пользовался Geany и пробовал все перечисленные варианты, но только с появлением VSCode мне удалось сменить основную IDE для большинства задач.
Далее в статье про утилиты и расширения, настройку окружения и многое другое.
🖼️ Дочитать статью
🔨 bash_help
Если вам приходится писать bash скрипты или вы только планируете этим заняться, данная статья написана для вас.
Bash, он же возрождённый shell, является по-прежнему одним из самых популярных командных процессоров и интерпретаторов сценариев. Как бы его ненавидели и не пытались заменить, всё равно он присутствует вокруг нас и никуда не собирается исчезать.
Начнем с выбора среды разработки, именно она позволяет объединять различные аспекты написания программы, повышая продуктивность за счет объединения общих действий по написанию программного обеспечения в одном приложении.
Консольные текстовые редакторы. Vim, Emacs и Nano - классическая троица, сейчас уже редко кто использует на рабочих станциях как основной инструмент, но vi и nano незаменимы для быстрого редактирования файлов в удаленных ssh сессиях. Если вы еще не работали с ним, рекомендую освоить такие вещи как поиск, замена и форматирование, хотя бы в nano.
Графические текстовые редакторы. Mousepad, Gedit, Notepad++ и т.п. Легковесные редакторы, с подсветкой синтаксиса, автозаменой и прочим, что уже есть в консольных редакторах, но они всё еще не являются полноценной интегрированной средой разработки.
IDE. Geany, Atom, IntelliJ IDEA, Sublime Text и Visual Studio Code - это уже полноценные и расширяемые среды разработки. Долгие годы я пользовался Geany и пробовал все перечисленные варианты, но только с появлением VSCode мне удалось сменить основную IDE для большинства задач.
Далее в статье про утилиты и расширения, настройку окружения и многое другое.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19✍3🔥3
Устанавливаем обновления безопасности
Скрипт, который проверяет и устанавливает доступные обновления безопасности:
🔨 bash_help
Скрипт, который проверяет и устанавливает доступные обновления безопасности:
#!/bin/bash
# Update the package repository
apt update
# Install available security updates
apt upgrade -y --security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26😐22✍6🔥6
Скрипт по поиску строк одного файла в другом файле
- Файл в котором делаем поиск указываем во второй переменной.
(Можно убрать якоря, чтобы успешный результат считался не только по полному match строки.)
🔨 bash_help
./str_existance.sh to_find.txt where_find.txt
- Файл из которого берем строки для поиска указываем в первой переменной.- Файл в котором делаем поиск указываем во второй переменной.
(Можно убрать якоря, чтобы успешный результат считался не только по полному match строки.)
#!/bin/bash
cat $1 | while read sw
do
RESULT=$(grep ^"$sw"$ $2)
if [[ "$RESULT" == "" ]]; then
echo $sw";"not_exist
else
echo $sw";"exist
fi
done
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25✍13🔥6😐2
Включаем и настраиваем файерволл
Скрипт, который настраивает и включает файерволл:
🔨 bash_help
Скрипт, который настраивает и включает файерволл:
#!/bin/bash
# Install the necessary packages
apt update
apt install -y ufw
# Allow SSH connections
ufw allow ssh
# Enable the firewall
ufw enable
Please open Telegram to view this post
VIEW IN TELEGRAM
😐35👍8✍5🔥3
Скрипт Bash для мониторинга журнала Messages (Warning, Error и Critical) в Linux
В настоящее время на рынке доступно множество инструментов для мониторинга с открытым исходным кодом для мониторинга производительности систем Linux. Они отправляют уведомление по электронной почте, когда система достигает указанного порогового значения.
Они контролируют всё, например, использование ЦП, использование памяти, использование подкачки, использование дискового пространства и многое другое.
Если у вас всего несколько систем и вы хотите их контролировать, то написание небольшого скрипта оболочки может облегчить вашу задачу. В этом уроке мы добавили скрипт оболочки для отслеживания сообщений в системе Linux.
Этот скрипт проверит «warning, error и critical» в файле /var/log/messages и запустит письмо с указанным идентификатором электронной почты, если будет найдено что-либо связанное с ним.
Если какие-либо данные строки найдены в файле «/var/log/messages» для вчерашней даты, скрипт отправит оповещение по электронной почте на указанный идентификатор электронной почты.
Примечание. Вам необходимо изменить идентификатор электронной почты на свой. Кроме того, вы можете изменить пороговое значение использования памяти в соответствии с вашими требованиями.
Он будет работать каждый день в 7 часов.
🔨 bash_help
В настоящее время на рынке доступно множество инструментов для мониторинга с открытым исходным кодом для мониторинга производительности систем Linux. Они отправляют уведомление по электронной почте, когда система достигает указанного порогового значения.
Они контролируют всё, например, использование ЦП, использование памяти, использование подкачки, использование дискового пространства и многое другое.
Если у вас всего несколько систем и вы хотите их контролировать, то написание небольшого скрипта оболочки может облегчить вашу задачу. В этом уроке мы добавили скрипт оболочки для отслеживания сообщений в системе Linux.
Этот скрипт проверит «warning, error и critical» в файле /var/log/messages и запустит письмо с указанным идентификатором электронной почты, если будет найдено что-либо связанное с ним.
Если какие-либо данные строки найдены в файле «/var/log/messages» для вчерашней даты, скрипт отправит оповещение по электронной почте на указанный идентификатор электронной почты.
Примечание. Вам необходимо изменить идентификатор электронной почты на свой. Кроме того, вы можете изменить пороговое значение использования памяти в соответствии с вашими требованиями.
# vi /opt/scripts/os-log-alert.shУстановите разрешение на запуск у файла os-log-alert.sh.
#!/bin/bash
#Set the variable which equal to zero
prev_count=0
count=$(grep -i "`date --date='yesterday' '+%b %e'`" /var/log/messages | egrep -wi 'warning|error|critical' | wc -l)
if [ "$prev_count" -lt "$count" ] ; then
# Send a mail to given email id when errors found in log
SUBJECT="WARNING: Errors found in log on "`date --date='yesterday' '+%b %e'`""
# This is a temp file, which is created to store the email message.
MESSAGE="/tmp/logs.txt"
TO="2daygeek@gmail.com"
echo "ATTENTION: Errors are found in /var/log/messages. Please Check with Linux admin." >> $MESSAGE
echo "Hostname: `hostname`" >> $MESSAGE
echo -e "\n" >> $MESSAGE
echo "+------------------------------------------------------------------------------------+" >> $MESSAGE
echo "Error messages in the log file as below" >> $MESSAGE
echo "+------------------------------------------------------------------------------------+" >> $MESSAGE
grep -i "`date --date='yesterday' '+%b %e'`" /var/log/messages | awk '{ $3=""; print}' | egrep -wi 'warning|error|critical' >> $MESSAGE
mail -s "$SUBJECT" "$TO" < $MESSAGE
#rm $MESSAGE
fi
$ chmod +x /opt/scripts/os-log-alert.sh
Наконец добавьте cronjob, чтобы автоматизировать этот скрипт.Он будет работать каждый день в 7 часов.
# crontab -e
0 7 * * * /bin/bash /opt/scripts/os-log-alert.sh
Примечание. Вы будете получать уведомления по электронной почте каждый день в 7 часов, что относится к вчерашним логам.Please open Telegram to view this post
VIEW IN TELEGRAM
✍19👍9🔥4😐4
Проверка паролей на надёжность
Скрипт, который проверяет и применяет надежные пароли:
🔨 bash_help
Скрипт, который проверяет и применяет надежные пароли:
#!/bin/bash
# Check all users' passwords for strength
for user in $(cut -d: -f1 /etc/passwd); do
# Check the password for strength
if ! grep -qP '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})' <(grep "^$user:" /etc/shadow); then
# If the password is not strong, force the user to change it
change -d 0 "$user"
fi
done
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14✍12🔥4
Функции
Часто используемые, повторяющиеся блоки имеет смысл выделять в отдельные функции, чтобы при необходимости их запускать, передавая параметры.
Определение функции выглядит следующим образом:
Самый простой пример скрипта, содержащего объявление и вызов функции будет выглядеть так:
Скрипт вызывает функцию, передавая ей на вход параметры, которые были переданы ему самому при вызове. Далее проверяется код завершения функции и выдается соответствующая ошибка, если код не равен 0, иначе выдается сумма, сохраненная в переменной s. Протестируем скрипт:
Для того, чтобы объявить переменную локальной, используется слово
Объединим все воедино, создав на основе рассмотренных ранее структур следующий скрипт
В данном скрипте мы объявили 5 функций:
Удалить все файлы .dat в текущей директории
Создать указанное количество файлов
Удалить файлы больше определенного размера
Вывести список всех файлов текущей директории
Запустить скрипт, выдающий информацию о планетах
Отобразить погоду по коду указанного города
🔨 bash_help
Часто используемые, повторяющиеся блоки имеет смысл выделять в отдельные функции, чтобы при необходимости их запускать, передавая параметры.
Определение функции выглядит следующим образом:
<имя_функции>() {Первый вариант ближе к синтаксису языка С и считается более переносимым, во втором варианте круглые скобки можно не указывать. Также может отсутствовать оператор return, если функция не возвращает значения.
<команды>
return <число>
}
function <имя_функции>() {
<команды>
return <число>
}
Самый простой пример скрипта, содержащего объявление и вызов функции будет выглядеть так:
#!/bin/bashМы объявили функцию
f() {
echo Test
}
f
f
, которая выводит слово Test
, и затем вызвали её:test@osboxes:~$ ./script6.shТак же, как и скрипт, функция может принимать параметры и использовать их, ссылаясь по номеру (
Test
$1
, $2
, …, $N
). Вызов функции с параметрами в скрипте осуществляется так:<имя функции> <параметр1> <параметр2>… <параметрN>Функция может возвращать результат своего выполнения (код завершения) в виде числового значения в диапазоне от 0 до 255. Принято считать, что если функция возвращает 0, то она выполнилась успешно, во всех остальных случаях значение содержит код ошибки. Чтобы получить код завершения функции в скрипте, необходимо обратиться к переменной
$?
. Добавив параметры и возвращаемое значение, получим следующий скрипт:#!/bin/bashЗдесь мы создали функцию summ, которая принимает 2 параметра и с помощью регулярного выражения ^[0-9]+$ проверяет, является ли каждый из переданных параметров числом. В случае, если первый параметр не число, то код завершения функции будет 1, если второй параметр не число, то код завершения функции будет 2. Во всех остальных случаях функция вычисляет сумму переданных параметров, сохраняя результат в глобальной переменной s.
summ() {
re='^[0-9]+$'
if ! [[ $1 =~ $re ]] ; then
return 1
elif ! [[ $2 =~ $re ]] ; then
return 2
else
s=$(($1 + $2))
return 0
fi
}
summ $1 $2
case $? in
0) echo "The sum is: $s" ;;
1) echo "var1 is not a nubmer" ;;
2) echo "var2 is not a nubmer" ;;
*) echo "Unknown error" ;;
esac
Скрипт вызывает функцию, передавая ей на вход параметры, которые были переданы ему самому при вызове. Далее проверяется код завершения функции и выдается соответствующая ошибка, если код не равен 0, иначе выдается сумма, сохраненная в переменной s. Протестируем скрипт:
test@osboxes.org:~$ ./script7.sh abc 123
var1 is not a nubmer
test@osboxes.org:~$ ./script7.sh 234 def
var2 is not a nubmer
test@osboxes.org:~$ ./script7.sh 10 15
The sum is: 25
По умолчанию переменные объявляются глобальными, т.е. видны в любом блоке скрипта. Переменные, объявленные как локальные, имеют ограниченную область видимости, и видны только в пределах блока, в котором они были объявлены. В случае с функцией это означает, что локальная переменная "видна" только в теле функции, в которой она была объявлена.Для того, чтобы объявить переменную локальной, используется слово
local
, например local loc_var=123
. Важно отметить, все что переменные, объявляемые в теле функции, считаются необъявленными до тех пор, пока эта функция не будет вызвана.Объединим все воедино, создав на основе рассмотренных ранее структур следующий скрипт
В данном скрипте мы объявили 5 функций:
clearFilesДалее реализован бесконечный цикл с помощью оператора while с условием true, в который вложен оператор выбора в зависимости от нажатой клавиши, а также вызов функции menu для отображения списка доступных действий. Данный скрипт в интерактивном режиме позволяет выполнить следующие действия:
genFiles
delFiles
showWeather
menu
Удалить все файлы .dat в текущей директории
Создать указанное количество файлов
Удалить файлы больше определенного размера
Вывести список всех файлов текущей директории
Запустить скрипт, выдающий информацию о планетах
Отобразить погоду по коду указанного города
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23✍8🔥3
Планировщик заданий cron
В случае, когда есть необходимость периодического запуска скриптов, полезно использовать планировщик cron, он позволяет задать расписание запуска скрипта и не требует присутствия администратора.
Просмотр заданий пользователя выполняется командой
Например, для того, чтобы в 10 и 30 минут каждого часа каждый день месяца весь год по будням запускать команду, нужно указать следующее:
🔨 bash_help
В случае, когда есть необходимость периодического запуска скриптов, полезно использовать планировщик cron, он позволяет задать расписание запуска скрипта и не требует присутствия администратора.
Просмотр заданий пользователя выполняется командой
crontab –l
. Для редактирования и создания новых задания используется команда crontab –e
. Строки для запуска команд планировщика в файле конфигурации cron имеют следующий формат:m h dom mon dow command parametersГде
m
– минута, h
– час, dom
– день месяца, mon
– месяц, dow
– день недели, command
– команда, parameters
– список параметров. Например, для того, чтобы в 10 и 30 минут каждого часа каждый день месяца весь год по будням запускать команду, нужно указать следующее:
10,30 * * * 1-5 command parameter1 parameter2Более простой пример, каждые 15 минут выполнять команду:
*/15 * * * * commandСоздадим скрипт для резервного копирования домашней директории пользователя, который будет создавать новый файл бэкапа при каждом запуске:
#!/bin/bashПоставим скрипт на выполнение каждый день в 22:00, выполнив команду
USER=`whoami`
BACKUP_DIR=/tmp/backup_${USER}
BACKUP_FILE=${USER}_$(date +%Y%m%d%M%H%S).tgz
mkdir -p $BACKUP_DIR
cd /
tar -zcf $BACKUP_DIR/$BACKUP_FILE home/$USER
crontab -e
и добавив с помощью открывшегося редактора строку:00 22 * * * ./backup_home.shПроверить, что задача добавлена в планировщик, можно командой crontab -l:
test@osboxes.org:~$ crontab -lВ результате каждый день в 22:00 будет создаваться резервная копия домашней директории пользователя (в приведенном примере для демонстрации запуск скрипта выполняется каждую минуту):
00 22 * * * ./backup_home.sh
test@osboxes.org:~$ cd /tmp/backup_test/Нужно отметить, что директория
test@osboxes:/tmp/backup_test$ ll
total 80
drwxrwxr-x 2 test test 4096 Feb 16 16:38 ./
drwxrwxrwt 17 root root 4096 Feb 16 16:30 ../
-rw-rw-r-- 1 test test 4431 Feb 16 16:30 test_20210216301601.tgz
-rw-rw-r-- 1 test test 4431 Feb 16 16:31 test_20210216311601.tgz
-rw-rw-r-- 1 test test 4431 Feb 16 16:32 test_20210216321601.tgz
-rw-rw-r-- 1 test test 4431 Feb 16 16:33 test_20210216331601.tgz
-rw-rw-r-- 1 test test 4431 Feb 16 16:34 test_20210216341601.tgz
test@osboxes:/tmp/backup_test$
/tmp
в примере использована исключительно для тестов, т.к. она предназначена для хранения временных файлов, и использовать её для хранения резервных копий нельзя. Правильное место размещения бэкапов может подсказать системный администратор.Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😐8✍4🔥4
Скрипт для создания OpenVPN сервера, или как один админ удаленку облегчал
Доброго дня, товарищи! Во время пандемии у всех был выбор, что использовать для организации удаленного доступа. Я выбрал OpenVPN. Чтобы помочь другим, (в первую очередь себе, конечно), был написан скрипт для простой установки сервера Ovpn на centos 8 с нуля, без заморочек.
Весь скрипт комментирован, а также настроен на общение с пользователем. Это очень облегчает понимание.
Вкратце. Создается пользователь openvpn, нужен в основном для обмена клиентскими конфигами, чтобы не давать лишнего доступа по ssh\ftp тем, кому нужно их скачать.
Проверки на число добавлены для уменьшения ошибок “на дурака”. Дополнительных утилит самый минимум
В этом скрипте selinux настраивается, а не отключается. Из настроек пользователя остаются несколько строк файла vars, а также порт, протокол, ip-адрес, и количество пользователей. Ко всем вопросам пользователю, есть пояснение. Остальная установка проходит по стандартной процедуре настройки OpenVPN сервера. Хотел сделать silent режим, но думаю это уже лишнее. Готовые файлы конфигурации складываются в папку /home/openvpn/ ready_conf. Они уже готовы к использованию.
🖼️ Ссылка на скрипт
🔨 bash_help
Доброго дня, товарищи! Во время пандемии у всех был выбор, что использовать для организации удаленного доступа. Я выбрал OpenVPN. Чтобы помочь другим, (в первую очередь себе, конечно), был написан скрипт для простой установки сервера Ovpn на centos 8 с нуля, без заморочек.
Весь скрипт комментирован, а также настроен на общение с пользователем. Это очень облегчает понимание.
Вкратце. Создается пользователь openvpn, нужен в основном для обмена клиентскими конфигами, чтобы не давать лишнего доступа по ssh\ftp тем, кому нужно их скачать.
Проверки на число добавлены для уменьшения ошибок “на дурака”. Дополнительных утилит самый минимум
В этом скрипте selinux настраивается, а не отключается. Из настроек пользователя остаются несколько строк файла vars, а также порт, протокол, ip-адрес, и количество пользователей. Ко всем вопросам пользователю, есть пояснение. Остальная установка проходит по стандартной процедуре настройки OpenVPN сервера. Хотел сделать silent режим, но думаю это уже лишнее. Готовые файлы конфигурации складываются в папку /home/openvpn/ ready_conf. Они уже готовы к использованию.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥7✍4😐2
Список полезных команд
Список встроенных команд интерпретатора:🔨 bash_help
Список встроенных команд интерпретатора:
help
Помощь по команде: <команда> --help
Мануал по команде: man <команда>
Версия команды: <команда> --version
Список доступных оболочек: cat /etc/shells
Список пользователей и их оболочек: cat /etc/passwd
Текущая директория: pwd
Список файлов текущей директории: ls -la
Текущий пользователь: id
Переменные среды: set
Версия ОС: cat /etc/os-release
Версия ядра: uname -a
Получить привилегии суперпользователя: sudo su -
Установка программы в Debian: apt install mc
Посмотреть утилизацию(загрузку): top
Свободное место: df -h
Сколько занимает директория: du -ks /var/log
Конфигурация сетевых интерфейсов: ifconfig -a
Объем оперативной памяти: free -m
Информация о блочных устройствах(дисках): lsblk
Информация о процессорах: cat /proc/cpuinfo
Список установленных пакетов: apt list --installed
Список и статус сервисов: service --status-all
Перезапуск сервиса: service apache2 restart
Скачать файл: wget https://www.gnu.org/graphics/gplv3-with-text-136x68.png
Получить веб-страницу по URL: curl https://www.google.com
Показать задания планировщика: crontab -l
Редактировать задания планировщика: crontab -e
Вывести новые сообщения в системном логе: tail -f /var/log/syslog
Подсчитать количество строк в выводе команды: <команда> | wc -l
Изменить права доступа к файлу (разрешить выполнение всем): chmod a+x <файл>
Список процессов: ps -ef
Проверить, запущен ли процесс: ps -ef | grep <процесс>
Перейти в предыдущий каталог: cd -
Завершить процесс (сигнал kill): kill -9
Удаление файла: rm <имя файла>
Удаление директории: rm -rf <имя
директории>
Редактировать файл: nano <имя_файла>
Топ 10 процессов по использованию памяти: ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -nr | head
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39😐11✍4🔥4
Удаляем ненужные нам файлы и директории с компьютера
Мы напишем скрипт, который удаляет ненужные нам файлы и директории с компьютера.
🔨 bash_help
Мы напишем скрипт, который удаляет ненужные нам файлы и директории с компьютера.
#!/bin/bash
# массив, в котором мы храним ключевые слова для поиска, например:
search_arr=(WetTrains LedForm WyChart)
# информируем о своих действиях
echo Find and delete files and folders contains $search_arr
# для каждого ключевого слова
for item in ${search_arr[*]}
do
echo Find and remove *$item*
# найдем все файлы и папки, которые это слово содержат,
# не обращая внимания на регистр, и удалим их рекурсивно
sudo find / -iname -name "*$item*" -exec rm -rv {} \;
done
# далее то, что не является частью удаления, но может стать хорошим дополнением
# скачиваем при помощи утилиты wget необходиммые архивы
wget "https://download.wettrains.com/wychart-confessional-xxxx.x.x.tar.gz"
wget "https://download.wettrains.com/LedForm-xxxx.x.x.tar.gz"
# перемещаем их в папку со всяким барахлом
sudo mv LedForm-xxxx.x.x.tar.gz /opt/
sudo mv wychart-cofessional-xxxx.x.x.tar.gz /opt/
# распаковываем архивы
cd /opt/ && sudo tar -xzvf LedForm-xxxx.x.x.tar.gz
cd /opt/ && sudo tar -xzvf wychart-confessional-xxxx.x.x.tar.gz
Часто нужно что-то удалить, например для того, чтобы освободить лишнее место. Чтобы начать пользоваться этой штукой, нужно просто сделать ее исполняемой и запустить:chmod +x brainduck.shТак же можно поставить ее в расписание, чтобы она запускалась, например, один раз в 00:00 каждый первый день нового месяца:
./brainduck.sh
0 0 1 * * ~/scripts/brainduck.shИзменяя значения внутри массива search_arr можно найти разные области для применения данного механизма. Можно чистить кеш, удалять временные файлы, логи программ, сами программы. Используйте этот скрипт только если вы точно понимаете, что делаете и чего хотите добиться, потому как при использовании определенных ключевых слов он может удалить системные файлы
Please open Telegram to view this post
VIEW IN TELEGRAM
✍14👍6😐5🔥4
Чтение файла построчно на Bash
Для простоты понимания будем использовать простой текстовый файл с именем
1. Использование команды read с циклом while
Создайте и откройте простой файл скрипта с помощью следующей команды:
И, наконец, выполните скрипт:
🔨 bash_help
Для простоты понимания будем использовать простой текстовый файл с именем
LHB.txt
.1. Использование команды read с циклом while
Создайте и откройте простой файл скрипта с помощью следующей команды:
nano read.shИ вставьте следующие строки:
#!/bin/bash
file="LHB.txt"
while read -r line; do
echo -e "$line\n"
done <$file
• file=”LHB.txt”
: Указывает, с каким файлом вы хотите работать, в данном случае это LHB.txt.• while read -r line; do
: Запускает цикл while и читает строки одну за другой, пока не останется ни одной строки для чтения, а флаг -r предотвратит обратную косую черту в строках.• echo -e “$line\n”
: Будет выведена каждая строка, и каждая будет отделена одной пустой строкой.• done < “$file”
: Перенаправляет ввод из указанного файла в цикл while.И, наконец, выполните скрипт:
./read.sh2. Использование команды cat с циклом while
#!/bin/bash
cat LHB.txt | while IFS= read -r line; do
echo "$line"
echo # Print a blank line
done
• cat LHB.txt |
: Читает содержимое файла LHB.txt и передает его в piped другим аргументом.• while IFS= read -r line; do
: Читает строки одну за другой из файла LHB.txt и. IFS используется для сохранения ведущих и завершающих пробельных символов.• echo “$line”
: Выводит строку, хранящуюся в переменной line.Please open Telegram to view this post
VIEW IN TELEGRAM
✍20👍12🔥6😐1