Примеры оберток скриптов: Использование команд 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

-10.2%

CPU
CPU
6 Xeon Cores
RAM
RAM
16 GB
Space
Space
150 GB SSD
Bandwidth
Bandwidth
100 Mbps
DDoS Protected SSD-KVM 16384 Linux

$ 143.27

$

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

-8.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
75 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-wKVM-SSD 2048 Windows

$ 43.56

$

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

-24.4%

CPU
CPU
2 Xeon Cores
RAM
RAM
1 GB
Space
Space
20 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 1024 HK Linux

$ 15.14

$

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

-22.2%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
50 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 4096 HK Linux

$ 38.44

$

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

-10%

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 4096 Linux

$ 30.17

$

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

-9.4%

CPU
CPU
8 Epyc Cores
RAM
RAM
32 GB
Space
Space
200 GB NVMe
Bandwidth
Bandwidth
Unlimited
wKVM-NVMe 32768 Windows

$ 119.74

$

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

-7.2%

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

$ 24.46

$

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

CPU
CPU
10 Epyc Cores
RAM
RAM
64GB
Space
Space
400 GB NVMe
Bandwidth
Bandwidth
Unlimited
Keitaro KVM 65536
OS
CentOS
Software
Software
Keitaro
$

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

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
30 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 2048 Linux

$ 9.67

$

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

-10%

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

$ 6.06

$

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

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

cookie

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

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