Примеры оберток скриптов: Использование команд Ping и Host

watch 6m, 45s
views 2

08:53, 18.03.2024

Содержание статьи
arrow

  • Преимущества оберток сценариев оболочки
  • Пример: Создание обертки для сценариев оболочки
  • Инструменты поиска и устранения неисправностей: Команды Ping и Host
  • Кастомизированная обёртка для Ping
  • Кастомизированная обертка для Host
  • Использование оригинальных команд Ping и Host
  • Передача аргументов командной строки через обертку скриптов Bash
  • Подведем итоги

Понимание пользователями команд *nix может быть достигнуто с помощью оберток скриптов. Обертка - это функция, сценарий или псевдоним скрипта, который содержит утилиту или системную команду.

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

Отправка 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 "Выполняем поиск DNS для \"$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
}

Подведем итоги

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

Поделиться

Была ли эта статья полезной для вас?

Популярные предложения VPS

-7.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
Unlimited
wKVM-SSD 4096 Windows

23.1

При оплате за год

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
60 GB HDD
Bandwidth
Bandwidth
Unlimited
KVM-HDD 2048 Linux

7.7

При оплате за год

-10%

CPU
CPU
2 Epyc Cores
RAM
RAM
1 GB
Space
Space
10 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 1024 Linux

7.2

При оплате за год

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB HDD
Bandwidth
Bandwidth
Unlimited
KVM-HDD 4096 Linux

15

При оплате за год

-10%

CPU
CPU
2 Xeon Cores
RAM
RAM
512 MB
Space
Space
10 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 512 Linux

5.2

При оплате за год

-21.5%

CPU
CPU
2 Xeon Cores
RAM
RAM
2 GB
Space
Space
75 GB SSD
Bandwidth
Bandwidth
300 GB
wKVM-SSD 2048 HK Windows

26

При оплате за год

-10%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
200 GB HDD
Bandwidth
Bandwidth
300 Gb
KVM-HDD HK 8192 Linux

20.56

При оплате за год

-20.8%

CPU
CPU
6 Xeon Cores
RAM
RAM
16 GB
Space
Space
150 GB SSD
Bandwidth
Bandwidth
10 TB
wKVM-SSD 16384 Metered Windows

100

При оплате за год

-5%

CPU
CPU
3 Xeon Cores
RAM
RAM
1 GB
Space
Space
40 GB HDD
Bandwidth
Bandwidth
Unlimited
wKVM-HDD 1024 Windows

12.1

При оплате за год

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
Keitaro KVM 4096
OS
CentOS
Software
Software
Keitaro

При оплате за месяц

Другие статьи на эту тему

cookie

Принять файлы cookie и политику конфиденциальности?

Мы используем файлы cookie, чтобы обеспечить вам наилучший опыт работы на нашем сайте. Если вы продолжите работу без изменения настроек, мы будем считать, что вы согласны получать все файлы cookie на сайте HostZealot.