Архив метки: Скрипты

👥 Как создавать многострочные комментарии в shell скриптах

При написании shell скриптов важно добавлять комментарии, чтобы объяснить цель и функции кода.

Комментарии в скриптах bash обозначаются символом хэша (#).

Однако вы можете захотеть написать многострочный комментарий, охватывающий несколько строк.

В этой статье мы рассмотрим, как создавать многострочные комментарии в сценарии оболочки.

Метод 1: Использование нескольких однострочных комментариев

Одним из способов создания многострочных комментариев в скриптах является использование нескольких однострочных комментариев.

Для этого в каждой строке используется хэш-символ (#), за которым следует текст комментария.

Вот пример:

#!/bin/bash



# Это многострочный комментарий

# который охватывает несколько строк

# и объясняет цель скрипта



echo "Hello, world!"

В этом примере мы используем три однострочных комментария для создания многострочного комментария, который объясняет цель скрипта.

Метод 2: Использование HereDoc

Другой способ создания многострочных комментариев в скриптах – это использование Here Documents.

Here Documents – это способ включить несколько строк текста в скрипт.

Вот пример:

#!/bin/bash



: <<'COMMENT'

Это многострочный комментарий

который охватывает несколько строк

и объясняет цель скрипта

COMMENT



echo "Hello, world!"

В этом примере мы используем Here Document для создания многострочного комментария, который занимает три строки.

Синтаксис Here-документа следующий : <<‘STRING’, где STRING – это разделитель, который отмечает конец Here-документа.

В данном случае мы используем COMMENT в качестве разделителя.

Метод 3: Использование команды :

Наконец, вы можете создавать многострочные комментарии в сценарии оболочки с помощью команды :.

Команда : – это команда, которая ничего не делает, но ее можно использовать для создания многострочного комментария.

Вот пример:

#!/bin/bash

: '

Это многострочный комментарий 

который охватывает несколько строк

и объясняет цель скрипта

'

echo "Hello, world!"

В этом примере мы используем команду : для создания многострочного комментария, который занимает три строки.

Текст комментария заключен в одинарные кавычки.

Заключение

Комментарии являются важной частью написания скриптов, поскольку они помогают объяснить цель и функции кода.

Используя методы, рассмотренные в этой статье, вы можете легко создавать многострочные комментарии, которые охватывают несколько строк.

Независимо от того, предпочитаете ли вы использовать несколько однострочных комментариев, Here Documents или команду :, эти методы помогут вам писать четкие и лаконичные комментарии в shell скриптах.

см. также:



2023-04-04T12:39:38
Скрипты

🐧 Скрипт Bash для мониторинга использования процессора и памяти на Linux

Использование памяти в Linux обычно измеряется объемом оперативной памяти, используемой определенным процессом.

Это можно отследить с помощью команды free, которая отображает общий объем памяти, используемую память и свободную память, доступную в системе.

Использование процессора в Linux обычно измеряется количеством ядер процессора, используемых определенным процессом.

Это можно отследить с помощью команды top, которая отображает количество ядер процессора и общее количество используемого процессорного времени.

В Linux можно отслеживать использование процессора и памяти с помощью скрипта Bash.

Это можно сделать с помощью инструментов командной строки top, free и ps.

Команда top отображает использование ресурсов всех запущенных процессов в системе, а команда free предоставляет более подробную информацию об использовании памяти.

Команда ps может быть использована для просмотра информации о конкретном процессе.

В этом руководстве вы узнаете:

  • Как отслеживать использование процессора и памяти с помощью скрипта bash

ЗНАЕТЕ ЛИ ВЫ?

Зомби-процессы не используют ЦП в Linux. Зомби-процесс – это процесс, который завершил выполнение, но все еще имеет запись в таблице процессов. Процесс по сути “мертв”, но еще не удален из таблицы процессов.

см. также:

🧟 Как найти и убить зомби-процессы в системах Linux

Скрипт Bash можно использовать для проверки производительности системы в реальном времени, а также для сбора статистики использования за определенное время.

Скрипт может собирать информацию об использовании из файла /proc/stat, а затем сохранять ее в файле лога.

Скрипт также можно настроить на отправку предупреждения по электронной почте, когда использование процессора или памяти превышает определенный порог.

Кроме того, скрипт можно использовать для запроса у системы такой информации, как модель процессора, использование и средние значения нагрузки.

С помощью этой информации скрипт может быть использован для создания отчетов и графиков, которые дают представление об использовании системы.

Простой скрипт непрерывного мониторинга процессора и памяти в Linux, как показано ниже, является отличным способом отслеживания производительности системы:

#!/bin/bash

# This script monitors CPU and memory usage



while :

do 

  # Get the current usage of CPU and memory

  cpuUsage=$(top -bn1 | awk '/Cpu/ { print $2}')

  memUsage=$(free -m | awk '/Mem/{print $3}')



  # Print the usage

  echo "CPU Usage: $cpuUsage%"

  echo "Memory Usage: $memUsage MB"

 

  # Sleep for 1 second

  sleep 1

done

Сохраните приведенный выше скрипт в текстовый файл, сделайте его исполняемым и запустите.

Ниже приведен терминальный вывод вышеуказанного скрипта мониторинга процессора и памяти.

Ниже перечислены другие инструменты/команды, которые можно использовать для мониторинга использования ЦП и памяти в системе Linux:

  • free: Эта команда показывает общий объем свободной и используемой физической памяти и памяти подкачки в системе, а также буферов и кэшей, используемых ядром.
  • top: Эта команда обеспечивает динамическое представление работающей системы в реальном времени. Она может отображать сводную информацию о системе, а также список задач, которыми в данный момент управляет ядро Linux.
  • htop: Это интерактивный просмотрщик процессов для Linux. Это приложение в текстовом режиме, которое отображает информацию о процессах в удобном для пользователя виде.
  • vmstat: Эта команда выдает информацию о процессах, памяти, подкачке, блочном вводе-выводе, ловушках и активности процессора.
  • ps: Эта команда используется для отображения информации о текущих запущенных процессах.
  • iostat: Эта команда сообщает статистику центрального процессора (CPU) и статистику ввода/вывода для устройств и разделов.

Заключение

Простой скрипт непрерывного мониторинга процессора и памяти в Linux является эффективным и надежным инструментом для мониторинга производительности системы.

Он позволяет системным администраторам эффективно и быстро контролировать производительность системы в режиме реального времени.

Скрипт легко настраивается и требует минимального обслуживания.

Его способность генерировать отчеты и оповещать системных администраторов делает его бесценным ресурсом для системного администратора.

см. также:



2022-12-15T10:46:51
Скрипты

⚓ Bash скрипт для проверки публичных репозиториев Github и уведомления о них

GitHub – ведущая компания по разработке программного обеспечения и контролю версий с помощью Git.

Он позволяет нам создавать как публичные репозитории, так и частные.

Оба варианта имеют свои преимущества.

Частные репозитории защищены аутентификацией, в то время как публичные репозитории доступны всем.

Иногда мы или наши команды создаем репозитории с публичным доступом, которые могут содержать конфиденциальные данные.

Хорошей идеей будет настроить скрипт, который будет уведомлять нас о репозиториях, оставленных в открытом доступе.

В этом руководстве мы покажем shell скрипт, который проверяет наличие всех публичных репозиториев под учетной записью GitHub и отправляет уведомление по электронной почте.

Скрипт может быть запланирован в crontab для автоматизации этого процесса.

🐍 Планирование выполнения скриптов Python с помощью Crontab

Предварительные условия

Этот скрипт использует утилиты командной строки Curl и SendEmail.

🖧 В чем разница между curl и Wget?

Поэтому убедитесь, что вы установили оба пакета в своей системе.

sudo apt install curl sendemail

Команда curl используется для вызова API GitHub, а SendEmail – для отправки электронной почты через SMTP-сервер.

Создание shell скрипта

Вы можете просто скопировать этот скрипт и записать его в файл в вашей системе.

Создайте скрипт в вашей системе и отредактируйте его в вашем любимом текстовом редакторе:

nano check-github-public-repos.sh

Скопируйте приведенное ниже содержимое и вставьте его в редактируемый файл.

#!/usr/bin/env bash



## Set your GitHub username or organization name

GITHUB_USER="itsecforuru"



## Temporary files and curl binary location

TEMP_FILE="/tmp/out.txt"

MAIL_LOG="/tmp/github-mail.log"

CURL_BIN="/usr/bin/curl"



## SMTP details for sending email notifications.



SMTP_HOST="email-smtp.us-east-1.amazonaws.com"

SMTP_PORT="587"

SMTP_USER="XXXXXXXXXXXXXXX"

SMTP_PASS="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

EMAIL_FROM="notification@example.com"

EMAIL_TO="your-email@example.com"





## Script begins here.



## Find out all the GitHub repositories that are publically accessible.

${CURL_BIN} -s https://api.github.com/users/${GITHUB_USER}/repos | grep "https://github.com/[a-zA-Z0-9-]*/[a-zA-Z0-9-]*.git" > ${TEMP_FILE}



## Send an email notification if a public repository found

if [ $? -eq 0 ]; then

echo -e "Админ" > ${MAIL_LOG}

echo -e "Мы нашли несколько публичных репозиториев в вашей учетной записи GitHub (${GITHUB_USER}) n" >> ${MAIL_LOG}

count=1

while read line; do

REPO_URL=`echo ${line} | cut -d":" -f2,3 | cut -d"," -f1`

echo "{count}. ${REPO_URL}" >> ${MAIL_LOG}

((count++))

done < ${TEMP_FILE}

echo -e "nn--nThanks" >> ${MAIL_LOG}



## Modify the email subject as per your convenience

EMAIL_SUBJECT="WARNING: Github Public Repo Found"



## Send the notification email. The system must have installed "SendEmail" (not Sendmail) 

## command on your system. 

cat ${MAIL_LOG} | sendemail -l /tmp/email.log 

-f ${EMAIL_FROM} 

-u ${EMAIL_SUBJECT} 

-t ${EMAIL_TO} 

-s ${SMTP_HOST}:${SMTP_PORT} 

-o tls=yes 

-xu ${SMTP_USER} 

-xp ${SMTP_PASS}

fi



## Uncomment below to print the email as output

#cat ${MAIL_LOG}

Обновите идентификатор “GITHUB_USER” на имя пользователя GitHub или организации.

Также обновите данные SMTP для получения уведомлений по электронной почте.

Нажмите “CTRL + O”, чтобы записать изменения, а затем “CTRL + X”, чтобы выйти из редактора.

Затем сделайте скрипт исполняемым с помощью следующей команды.

chmod +x check-github-public-repos.sh

Теперь ваш скрипт готов к запуску.

Вы можете просто выполнить свой скрипт прямо на терминале.

Чтобы вывести результаты на экране, вы можете раскомментировать последнюю строку.

При успешном выполнении, если скрипт нашел какой-либо публичный репозиторий в вашем аккаунте GitHub, вы получите уведомление по электронной почте на свой в почтовый ящик.

Планирование работы скрипта с помощью Crontab

Вы можете запланировать выполнение этого скрипта на день, неделю или два раза в неделю.

Следующий пример crontab будет запускать этот скрипт ежедневно в 12:00 утра.

## Check GitHub public repositories

0 0 * * * bash check-github-public-repos.sh

Заключение

Очень важно сохранять нашу тяжелую работу в безопасности.

Этот скрипт предупредит вас о публичных репозиториях в вашем аккаунте GitHub.

Вы можете изменить скрипт в соответствии с вашими требованиями.

Вы также можете внести свои улучшения в комментарии.

см. также:



2022-10-11T11:39:30
Скрипты

💳 Как проверить номер кредитной карты на Linux

Цель данного руководства – показать, как использовать скрипт оболочки Bash или программный код Python для проверки номера кредитной карты в системе Linux.

Ознакомьтесь с приведенными ниже примерами скриптов для проверки номеров кредитных карт из командной строки Linux.

Регулярные выражения для проверки номера кредитной карты – примеры на Bash и Python

Как вы уже догадались, для проверки номера кредитной карты в Linux можно использовать множество различных языков программирования.

Скрипт просто должен использовать регулярное выражение, чтобы убедиться, что присутствуют 16 цифр (вместе с пробелами или тире в некоторых случаях).

Другими словами, такие числа, как:

  • 1234 5678 1234 5678
  • 1234567812345678
  • 1234-5678-1234-5678

Два самых популярных инструмента для выполнения этой задачи в Linux – оболочка Bash и язык программирования Python.

Оба они способны проверять номера кредитных карт с помощью всего нескольких коротких строк кода.

Воспользуйтесь предпочтительным методом, приведенным ниже, и скопируйте наши примеры скриптов в свою систему, чтобы начать проверку номеров кредитных карт.

Пример Bash для проверки номеров кредитных карт

Bash-скрипт:

#!/bin/bash



# regexp to get a valid credit card number



echo $1 | grep -qE '^([0-9]{4}[- ]?){3}[0-9]{4}$'



if [ $? -eq 0 ]; then

	echo "$1 is a valid credit card number."

else

	echo "$1 is an invalid credit card number."

Выполнение скрипта Bash:

$ chmod +x validate_credit_card_number.sh



$ ./validate_credit_card_number.sh "1234 5678 1234 5678"

1234 5678 1234 5678 is a valid credit card number.



$ ./validate_credit_card_number.sh 1234567812345678

1234567812345678 is a valid credit card number.



$ ./validate_credit_card_number.sh 1234-5678-1234-5678

1234-5678-1234-5678 is a valid credit card number.



$ ./validate_credit_card_number.sh 1234-5678-1234-56786

1234-5678-1234-56786 is an invalid credit card number.



$ ./validate_credit_card_number.sh 1234-55678-1234-5678

1234-55678-1234-5678 is an invalid credit card number.

Пример на языке Python для проверки номеров кредитных карт

Скрипт Python:

import re

cc_list=['1234 5678 1234 5678',

'1234567812345678',

'1234-5678-1234-5678',

'1234-5678-1234-56786',

'1234-55678-1234-5678']

pattern = '^([0-9]{4}[- ]?){3}[0-9]{4}$'

for eachnumber in cc_list:

    result = re.match(pattern, eachnumber)

    if result:

        print(eachnumber+" is a valid credit card number.")

    else:

        print(eachnumber+" is an invalid credit card number.")

Выполнение скрипта Python:

$ python3 validate_credit_card_number.py



1234 5678 1234 5678 is a valid credit card number.



1234567812345678 is a valid credit card number.



1234-5678-1234-5678 is a valid credit card number.



1234-5678-1234-56786 is an invalid credit card number.



1234-55678-1234-5678 is an invalid credit card number.

Заключение

В этом руководстве мы узнали, как использовать скрипты Bash или Python для проверки номеров кредитных карт в системах Linux.

Поскольку используется только регулярное выражение, это оказывается довольно простой задачей для любого из этих языков программирования.

И, конечно, многие другие языки программирования способны справиться с этой задачей.

см. также:



2021-12-21T08:55:20
Скрипты

🔐 Скрипт для проверки данных SSL-сертификата

Приведенный ниже скрипт можно использовать для получения подробной информации о сертификате, и его можно использовать локально или удаленно.

Он называется ssl_validate.sh, но вы можете скопировать его содержимое в новый файл скрипта с любым именем, используйте chmod +x, чтобы сделать его исполняемым, а затем используйте его со следующим синтаксисом:

./ssl_validate.sh (или любое другое выбранное вами имя скрипта) server.company.com:443, где “server.company.com” – это полное доменное имя (FQDN) хоста, который вы хотите проверить, а 443 – это порт, который он прослушивает, связанный с SSL-сертификатом.

Вы должны убедиться, что у вас есть путь к этому серверу и порту, например, через правила брандмауэра.

Скрипт выдаст результат, подобный следующему, чтобы отобразить наиболее важные детали SSL-сертификата:

server.company.com:443 ; SSL ; CN: (CN сертификата SSL) ; Subject (Subject сертификата SSL) ; Issuer: (Issuer сертификата SSL) ; notBefore: (Дата создания SSL-сертификата) ; notAfter: (Дата истечения срока действия SSL-сертификата) ; DaysUntilExpiration: (Дни, оставшиеся до истечения срока действия SSL-сертификата) ; Errors: (Любые ошибки, связанные с SSL-сертификатом)

Собственно скрипт:

 delim=" ; "



export delim



serverport=${1}



export serverport



echo "#${serverport}"



date_today=$(date +%F)



datediff() {



d1=$(date -d "$1" +%s)



d2=$(date -d "$2" +%s)



echo $(( (d1 - d2) / 86400 )) days



}



export -f datediff



sslscan() {



local sp=${1}



tls_content=$(echo "Q" | openssl s_client -showcerts -connect ${serverport} 2>&1)



if [[ "$?" == 0 ]]; then



tls_errors=$(echo "${tls_content}" | grep -i error )



tls_cert_subject=$(echo "${tls_content}" | openssl x509 -noout -subject )



tls_cert_issuer=$(echo "${tls_content}" | openssl x509 -noout -issuer )



tls_cert_cn=$(echo "${tls_content}" | openssl x509 -noout -subject | sed -e "s/.*CN=([^/]*).*/1/" )



tls_cert_dates=$(echo "${tls_content}" | openssl x509 -noout -dates )



tls_cert_notafter_date=$(echo "${tls_cert_dates}" | grep notAfter |sed -e "s/notAfter=//" | tr -d 'n')



tls_cert_notbefore_date=$(echo "${tls_cert_dates}" | grep notBefor |sed -e "s/notBefore=//" | tr -d 'n')



tls_cert_datediff=$(datediff "${tls_cert_notafter_date}" "${date_today}")



echo -n "${serverport} ${delim} SSL"



echo -n " ${delim} CN:"



echo -n " ${tls_cert_cn}"



echo -n " ${delim} Subject:"



echo -n " ${tls_cert_subject}"



echo -n " ${delim} Issuer:"



echo -n " ${tls_cert_issuer}"



echo -n " ${delim} notBefore:"



echo -n " ${tls_cert_notbefore_date}"



echo -n " ${delim} notAfter:"



echo -n " ${tls_cert_notafter_date}"



echo -n " ${delim} DaysUntilExpiration:"



echo -n " ${tls_cert_datediff}"



echo -n " ${delim} Errors:"



echo -n " ${tls_errors}"



echo



else



tls_errors=$(echo "${tls_content}" | tr 'n' '/' | tr ' ' '_' )



status="ERROR: ${tls_errors}"



echo -n "${serverport} ${delim} ${status}"



echo



fi



}



export -f sslscan



timeout 3 bash -c "sslscan ${serverport}"



if [[ $? != 0 ]]; then



echo -n "${serverport} ${delim} ERROR: CONNECTION_TIMED_OUT"



echo



fi 

Заключение

Если возникнут вопросы или комментарии, прошу написать в поле комментариев.

см. также:



2021-09-14T13:07:01
Скрипты

🐍 Получение всех IP-адресов из подсети CIDR с помощью Python3

Я искал метод получения всех IP-адресов из подсети CIDR в Python3 и был приятно удивлен, когда заметил, что в Python3 есть встроенная библиотека, которая сделает это за вас.

Библиотека Python3 ‘ipaddress’ встроена в Python3 и работает отлично.

Вы можете “импортировать ipaddress” прямо в ваш код Python и использовать его дальше в вашем приложении.

Как это работает

Допустим, у нас есть CIDR, и мы хотим получить все IP-адреса из этого CIDR.

В своем коде я использовал фрагмент кода, который предоставляет список найденных IP-адресов.

import ipaddress

cidrx = '185.117.73.0/24'

set1 = ipaddress.ip_network(cidrx)

ip_list=[str(ip) for ip in set1]

for ipv4 in ip_list:

    print(ipv4)

IP-адреса вычисляются приведенным выше кодом Python, затем вычисленные IP-адреса сохраняются в списке ip_list, и итерация выводит каждый вычисленный IPv4-адрес на ваш терминал.

Сам код можно настроить таким образом, чтобы работать с вычисленными IP-адресами.

см. также:

🐍 Как парсить и скрейпить HTML с помощью Pyquery



2021-09-03T18:01:17
Скрипты