Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание

Тут можно читать онлайн Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Питер, год 2017. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2017
  • Город:
    СПб.
  • ISBN:
    978-5-496-03029-8
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - описание и краткое содержание, автор Дейв Тейлор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Сценарии командной оболочки помогают системным администраторам и программистам автоматизировать рутинные задачи с тех самых пор, как появились первые компьютеры. С момента выхода первого издания этой книги в 2004 году многое изменилось, однако командная оболочка bash только упрочила свои лидирующие позиции. Поэтому умение использовать все ее возможности становится насущной необходимостью для системных администраторов, инженеров и энтузиастов. В этой книге описываются типичные проблемы, с которыми можно столкнуться, например, при сборке программного обеспечения или координации действий других программ. А решения даются так, что их легко можно взять за основу и экстраполировать на другие схожие задачи.
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать книгу онлайн бесплатно, автор Дейв Тейлор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Как видите, имена переменных в сценарии начинаются с сокращений, полученных из наименований значений, возвращаемых программой netstat и сохраняемых в .netstatlog в конце сценария getstats картинка 461. К таким сокращениям относятся: snt, re, rec, dup, oo, creq, cacc и reto. В сценарии netperf к этим сокращениям добавляется окончание p, чтобы получить имена переменных, представляющих вещественные значения процентов от общего числа отправленных и полученных пакетов. Окончание pn добавляется к сокращениям, чтобы получить имена переменных, представляющих целочисленные версии процентов от общего числа отправленных и полученных пакетов. В сценарии netperf окончание ps обозначает переменную, представляющую усредненный процент, которая используется на финальной стадии вычислений.

Цикл while перебирает записи в файле .netstatlog , вычисляет четыре ключевых перцентиля (re, retr, dup и oo, которые представляют количество повторно отправленных пакетов, превышений таймаута при отправке, дубликатов и внеочередных (срочных) пакетов соответственно). Все это записывается во временный файл $stats , затем сценарий awk суммирует каждую колонку в $stats и вычисляет средние значения, деля суммы на количество записей в файле (NR).

Команда eval в строке картинка 462связывает все вместе. Комплект статистик ($stats), полученных циклом while, передается команде awk, которая использует сценарий в файле $awktmp для вывода последовательностей variable=value. Эти последовательности variable=value затем внедряются в командную оболочку инструкцией eval, в результате чего создаются переменные reps, retops, dupps и oops, представляющие среднее количество повторно отправленных пакетов, среднее количество таймаутов при повторной передаче, среднее количество пакетов-дубликатов и среднее количество внеочередных (срочных) пакетов соответственно. Затем текущие процентные значения можно сравнивать с этими усредненными величинами, чтобы выявлять настораживающие тенденции.

Запуск сценария

Для успешной работы сценарию netperf необходима информация в файле .netstatlog . Эта информация генерируется заданием crontab, автоматически вызывающим getstats с некоторой частотой. В современной системе OS X, Unix или Linux можно добавить в crontab следующую запись, изменив путь к сценарию, чтобы он соответствовал его местонахождению в вашей системе, естественно:

*/15 * * * * /home/taylor/bin/getstats

Она создает новую запись в файле журнала каждые 15 минут. Чтобы гарантировать определенные права доступа к файлу, лучше всего создать пустой файл вручную перед первым запуском getstats:

$ sudo touch /Users/taylor/.netstatlog

$ sudo chmod a+rw /Users/taylor/.netstatlog

Теперь программа getstats будет благополучно пыхтеть над исторической картиной работы сети в вашей системе. Для анализа файла журнала запустите сценарий netperf без аргументов.

Результаты

Для начала давайте рассмотрим содержимое файла .netstatlog , показанное в листинге 10.13.

Листинг 10.13.Последние три строки в файле. netstatlog, записанные заданием crontab, вызывающим сценарий getstats через регулярные интервалы

$ tail -3 /Users/taylor/.netstatlog

time=1063981801;snt=14386;re=24;rec=15700;dup=444;oo=555;creq=563;cacc=17;reto=158

time=1063982400;snt=17236;re=24;rec=20008;dup=454;oo=848;creq=570;cacc=17;reto=158

time=1063983000;snt=20364;re=24;rec=25022;dup=589;oo=1181;creq=582;cacc=17;reto=158

Выглядит хорошо. В листинге 10.14 приводятся результаты запуска сценария netperf.

Листинг 10.14.Запуск сценария netperf для анализа файла. netstatlog

$ netperf

Netstat is currently reporting the following:

··52170128 packets sent, with 16927 retransmits (0 %) and 2722 retransmit timeouts (0 %)

··20290926 packets received, with 129910 dupes (.600 %) and 18064 out of order (0 %)

·· 39841 total connection requests, of which 123 were accepted

Analyzing trends…

(Analyzed 6 netstat log entries for calculations)

Усовершенствование сценария

Вы наверняка заметили, что вместо удобочитаемого формата представления дат сценарий getstats сохраняет даты в файле .netstatlog в виде количества секунд, истекших с начала эпохи, то есть с 1 января 1970 года. Например, 1 063 983 000 секунд означают день в конце сентября 2003 года. Использование такого формата упрощает расширение этого сценария, давая возможность вычислять время, прошедшее между записями.

№ 78. Изменение приоритета процесса по его имени

В практике администрирования часто возникают ситуации, когда полезно изменить приоритет задачи, например: отдать серверу чата только «холостые» циклы системы, понизить приоритет MP3-плеера, не являющегося важным приложением, или процесса, выполняющего загрузку файла, острая необходимость в котором отпала, или, напротив, увеличить приоритет монитора CPU. Изменить приоритет процесса можно командой renice; однако она требует передать ей числовой идентификатор процесса, что вызывает дополнительные трудности. Намного более удобный подход реализован в сценарии (листинг 10.15), который по имени процесса определяет его числовой идентификатор и автоматически изменяет приоритет указанного приложения.

Код

Листинг 10.15.Сценарий renicename

#!/bin/bash

# renicename — изменяет приоритет задания по указанному имени.

user=""; tty=""; showpid=0; niceval="+1"·· # Инициализация

while getopts "n: u: t: p" opt; do

··case $opt in

····n) niceval="$OPTARG";;;

····u) if [! -z "$tty"]; then

··········echo "$0: error: −u and −t are mutually exclusive." >&2

··········exit 1

········fi

········user=$OPTARG;;

····t) if [! -z "$user"]; then

··········echo "$0: error: −u and −t are mutually exclusive." >&2

··········exit 1

········fi

········tty=$OPTARG;;

····p) showpid=1;;;

····?) echo "Usage: $0 [-n niceval] [-u user|-t tty] [-p] pattern" >&2

········echo "Default niceval change is \"$niceval\" (plus is lower" >&2

········echo "priority, minus is higher, but only root can go below 0)" >&2

········exit 1

··esac

done

shift $(($OPTIND — 1)) # Употребить все проанализированные аргументы.

if [$# −eq 0]; then

··echo "Usage: $0 [-n niceval] [-u user|-t tty] [-p] pattern" >&2

··exit 1

fi

if [! -z "$tty"]; then

··pid=$(ps cu −t $tty | awk "/ $1/ { print \\$2 }")

elif [! -z "$user"]; then

··pid=$(ps cu −U $user | awk "/ $1/ { print \\$2 }")

else

··pid=$(ps cu −U ${USER:-LOGNAME} | awk "/ $1/ { print \$2 }")

fi

if [-z "$pid"]; then

··echo "$0: no processes match pattern $1" >&2

··exit 1

elif [! -z "$(echo $pid | grep ' ')"]; then

··echo "$0: more than one process matches pattern ${1}:"

··if [! -z "$tty"]; then

····runme="ps cu −t $tty"

··elif [! -z "$user"]; then

····runme="ps cu −U $user"

··else

····runme="ps cu −U ${USER:-LOGNAME}"

··fi

··eval $runme | \

······awk "/ $1/ { printf \" user %-8.8s pid %-6.6s job %s\n\", \

······\$1,\$2,\$11 }"

··echo "Use −u user or −t tty to narrow down your selection criteria."

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Дейв Тейлор читать все книги автора по порядку

Дейв Тейлор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание отзывы


Отзывы читателей о книге Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание, автор: Дейв Тейлор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x