Приклади обгорток скриптів: Використання команд Ping та Host

Приклади обгорток скриптів: Використання команд Ping та Host

12:57, 18.03.2024

Зміст статті
arrow

  • Переваги обгорток скриптів
  • Приклад: Створення обгортки для скрипта 
  • Засоби для усунення несправностей: Команди ping та host
  • Кастомізована обгортка для Ping
  • Кастомізована обгортка для host
  • Використання оригінальних команд Ping і Host
  • Передача аргументів командного рядка через обгортку скриптів Bash
  • Підсумки

Зрозумілість для користувачів команд *nix можна досягти за допомогою обгорток сценаріїв командного інтерпретатора. Обгортка - це функція оболонки, сценарій оболонки або alias, який містить утиліту або системну команду.

Unix і Linux-подібні ОС можуть запускати 64-розрядні і 32-розрядні версії програм. Це означає, що ви можете написати скрипт-обгортку, і він вибере і виконає потрібну версію 64-бітної або 32-бітної апаратної платформи. У високопродуктивному середовищі можна знайти сотні скриптів-обгорток, написаних на Python, Shell та Perl, для керування та надсилання завдань, усунення несправностей, резервного копіювання, налаштування спільного сховища, використання кластерів тощо.

У цій статті ми вирішили поділитися нашим практичним досвідом і пояснити, як створюється обгортка скрипта, щоб покращити основний інструмент для усунення несправностей.

Переваги обгорток скриптів

  • Запуск і виклик потрібного завдання.
  • Налаштування команд *nix.
  • Допомагає в HPC, наукових дослідженнях та кластерному середовищі.
  • Це ідеальний варіант для економії часу.
  • Передача аргументів за замовчуванням стороннім програмам або двійковим файлам.
  • Обгортки ідеально підходять для команд або інструментів, які потребують системного контролю, індивідуальних налаштувань середовища або параметрів подання завдання.

Приклад: Створення обгортки для скрипта 

Наступний скрипт запустить java-додаток kvminit, перенаправляючи логи до файлу і налаштовуючи оточення системи:

export JAVA_HOME=${JAVA_HOME:-/usr/java}
export CLASSPATH="/home/vivek/apps/java/class
exec ${JAVA_HOME}/bin/java kvminit "$@" &>/var/log/kvm/logfile

Іншим прикладом скрипта-обгортки є функціонування шляхом зупинки/запуску клієнта або nfs-сервера:

_me=${0##*/}          # Server or client?
_server="/etc/init.d/rpcbind /etc/init.d/rpcidmapd /etc/init.d/nfslock /etc/init.d/nfs" # list of server init scripts
_client="/etc/init.d/rpcbind /etc/init.d/rpcidmapd /etc/init.d/nfslock" # list of client init scripts
_action="$1"        # stop / start / restart
# activate all scripts with stop or start or restart
runme(){
           local i="$1"
          local a="$2"
           for t in $i
           do
                          $t $a
           done

usage(){
           echo "$_me stop|restart|start|reload|status";
           exit 0
}
[ $# -eq 0 ] && usage
# main logic
case $_me in
           nfs.server) runme "$_server" "$_action" ;;
           nfs.client) runme "$_client" "$_action" ;;
           *) usage
esac

Засоби для усунення несправностей: Команди ping та host

Основними інструментами для усунення несправностей для системних адміністраторів є команди host і ping.

  • Команда host корисна для визначення проблем з DNS. Можна отримати дані про записи sys для певних IP-адрес і водночас імена хостів, щоб усунути проблеми з DNS.
  • Команди ping потрібні для визначення зв'язку між пристроями у віддаленій або локальній мережі.

Кастомізована обгортка для Ping

Відправлення пінг-запиту до домену, видаливши протокол, ім'я користувача, urls:pass за допомогою системного /bin/ping, має такий вигляд:

ping(){
           local t="$1"
           local _ping="/bin/ping"
           local c=$(_getdomainnameonly "$t")
           [ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
           $_ping $c
}

Кастомізована обгортка для host

Для системи пошуку Dns у /usr/bin/host використовуйте наступне:

host(){
           local t="$1"
           local _host="/usr/bin/host"
           local c=$(_getdomainnameonly "$t")
           [ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."
           $_host $c

Використання оригінальних команд Ping і Host

Вам потрібно створити скрипт оболонки, який називається $HOME/scripts/wrapper_functions.lib і заповнити всі 3 функції, як показано тут:

_getdomainnameonly(){
           local h="$1"
           local f="${h,,}"
           # delete protocol part of name
    f="${f#http://}"
    f="${f#https://}"
           f="${f#ftp://}"
           f="${f#scp://}"
           f="${f#scp://}"
           f="${f#sftp://}"
           # delete username or/and username:password part of hostname
           f="${f#*:*@}"
           f="${f#*@}"
           # delete all /foo/xyz.html*
           f=${f%%/*}
           # Reveal only domain name
           echo "$f"
}
ping(){
           local t="$1"
           local _ping="/bin/ping"
           local c=$(_getdomainnameonly "$t")
           [ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
           $_ping $c
}
host(){
           local t="$1"
           local _host="/usr/bin/host"
           local c=$(_getdomainnameonly "$t")
           [ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."
           $_host $c
}

Після цього відредагуйте $HOME/.bashrc, додавши наступний рядок:

 source $HOME/scripts/wrapper_functions.lib

Збережіть файл зі змінами і ви зможете перевірити, чи все працює належним чином.

Передача аргументів командного рядка через обгортку скриптів Bash

_getdomainnameonly(){
           local h="$1"
           local f="${h,,}"
           # delete protocol part of name
    f="${f#http://}"
    f="${f#https://}"
           f="${f#ftp://}"
           f="${f#scp://}"
           f="${f#scp://}"
           f="${f#sftp://}"
           # delete username or/and username:password part of hostname
           f="${f#*:*@}"
           f="${f#*@}"
           # delete all /foo/xyz.html*
           f=${f%%/*}
           # Reveal only domain name
           echo "$f"
}
ping(){
           local array=( $@ )                     
           local len=${#array[@]}     
           local host=${array[$len-1]}
           local args=${array[@]:0:$len-1}
           local _ping="/bin/ping"
           local c=$(_getdomainnameonly "$host")
           [ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
           # pass host and args
           $_ping $args $c
}
host(){
           local array=( $@ )
           local len=${#array[@]}
           local host=${array[$len-1]}
           local args=${array[@]:0:$len-1}
           local _host="/usr/bin/host"
           local c=$(_getdomainnameonly "$host")
           [ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."
           $_host $args $c
}

Підсумки

Ми поділилися функціями та невеликим скриптом, який може виконувати операції для досягнення необхідних результатів. Для створення іншого функціоналу вам потрібно мати наявні двійкові файли та повторно використовувати код.

views 6m, 46s
views 2
Поділитися

Чи була ця стаття корисною для вас?

Популярні пропозиції VPS

Інші статті на цю тему

cookie

Чи приймаєте ви файли cookie та політику конфіденційності?

Ми використовуємо файли cookie, щоб забезпечити вам найкращий досвід роботи на нашому сайті. Якщо ви продовжуєте користуватися сайтом, не змінюючи налаштувань, вважайте, що ви згодні на отримання всіх файлів cookie на сайті HostZealot.