Дейв Тейлор - Сценарии командной оболочки. 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-е издание - читать книгу онлайн бесплатно, автор Дейв Тейлор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

№ 103. Массовое выполнение команд в многопроцессорной системе

Во времена, когда вышло первое издание этой книги, многоядерные или многопроцессорные системы были редкостью. В основном к таким системам относились серверы и большие ЭВМ. В наши дни большинство ноутбуков и настольных компьютеров оснащается многоядерными процессорами, позволяющими компьютерам решать несколько задач одновременно. Но некоторые программы не способны использовать дополнительные вычислительные ресурсы и выполняются только на одном ядре; чтобы задействовать несколько ядер, нужно запустить сразу несколько экземпляров программы.

Допустим, что у вас есть программа для преобразования изображений из одного формата в другой и вам требуется обработать большое количество файлов. Последовательное (поочередное, а не параллельное) преобразование всех файлов единственным процессом может занять много времени. Работа завершится намного быстрее, если разбить файлы между несколькими процессами, работающими параллельно.

Сценарий в листинге Б.3 демонстрирует, как распараллелить заданную команду по нескольким процессам, выполняющимся одновременно.

ПРИМЕЧАНИЕ

Если ваш компьютер оснащен одноядерным процессором или выбранная программа работает медленно по другим причинам, например из-за невысокой скорости доступа к жесткому диску, запуск сразу нескольких экземпляров программы только ухудшит производительность. Будьте осторожны, не запускайте слишком много процессов, так как это легко может застопорить маломощную систему. К счастью, даже Raspberry Pi имеет несколько ядер!

Код

Листинг Б.3.Сценарий bulkrun

··#!/bin/bash

··# bulkrun — выполняет обход файлов в каталоге и запускает несколько

··#·· процессов для их одновременной обработки.

··printHelp()

··{

····echo "Usage: $0 −p 3 −i inputDirectory/ −x \"command −to run/\""

картинка 611····echo −e "\t-p The maximum number of processes to start concurrently"

картинка 612····echo −e "\t-i The directory containing the files to run the command on"

картинка 613····echo −e "\t-x The command to run on the chosen files"

····exit 1

··}

картинка 614··while getopts "p: x: i: " opt

··do

····case "$opt" in

······p) procs="$OPTARG"····;;

······x) command="$OPTARG"··;;

······i) inputdir="$OPTARG";;

······?) printHelp··········;;

····esac

··done

··if [[-z $procs || −z $command || −z $inputdir]]

··then

картинка 615····echo "Invalid arguments"

····printHelp

··fi

··total= картинка 616$(ls $inputdir | wc −l)

··files="$(ls −Sr $inputdir)"

картинка 617··for k in $(seq 1 $procs $total)

··do

картинка 618····for i in $(seq 0 $procs)

····do

······if [[$((i+k)) −gt $total]]

······then

········wait

········exit 0

······fi

······file= картинка 619$(echo "$files" | sed $(expr $i + $k)"q;d")

······echo "Running $command $inputdir/$file"

······$command "$inputdir/$file"&

····done

картинка 620····wait

··done

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

Сценарий bulkrun принимает три аргумента: максимальное количество процессов, действующих в каждый конкретный момент времени картинка 621, каталог с файлами для обработки картинка 622и команду для запуска (в конец которой добавляется имя файла для обработки) картинка 623. После чтения пользовательских аргументов с помощью getopts картинка 624сценарий убеждается в наличии всех трех обязательных аргументов. Если любая из переменных −procs, command или inputdir — осталась неопределенной, сценарий выводит сообщение об ошибке картинка 625, текст справки и завершает выполнение.

После проверки переменных, необходимых для управления запуском параллельных процессов, сценарий приступает к выполнению фактической работы. Для начала определяется количество обрабатываемых файлов картинка 626, и их список сохраняется для дальнейшего использования. Затем сценарий входит в цикл for, который следит за количеством файлов, обработанных к текущему моменту. Команда seq картинка 627используется для организации итераций по всем файлам с шагом, равным максимальному числу процессов, которые могут выполняться параллельно.

Внутри находится еще один цикл for картинка 628, который следит за количеством процессов, запущенных к данному моменту. Этот внутренний цикл также использует команду seq для организации итераций от 0 до максимального числа процессов с шагом, по умолчанию равным 1. В каждой итерации внутренний цикл for извлекает новый файл из списка картинка 629, вызывая sed, чтобы вывести только требуемое имя файла из списка, сохраненного в начале сценария, и запускает указанную команду с этим файлом в фоновом режиме с применением знака &.

После запуска максимального количества процессов сценарий вызывает команду wait картинка 630, которая приостанавливает его выполнение до момента, когда завершатся все команды, запущенные в фоновом режиме. После того как wait завершится, вновь начинается процедура запуска процессов для обработки остальных файлов. Она похожа на процедуру выбора лучшей программы сжатия в сценарии bestcompress (сценарий № 34 в главе 4).

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

Пользоваться сценарием bulkrun очень просто. Ему нужно передать три аргумента: максимальное количество одновременно действующих процессов, каталог с файлами для обработки и запускаемую команду. Например, в листинге Б.4 показано, как изменить размеры изображений в каталоге, запустив одновременно несколько экземпляров утилиты mogrify из пакета ImageMagick.

Результаты

Листинг Б.4.Запуск команды bulkrun для параллельной обработки файлов изображений утилитой mogrify из пакета ImageMagick

$ bulkrun −p 3 −i tmp/ −x "mogrify −resize 50 %"

Running mogrify −resize 50 % tmp//1024-2006_1011_093752.jpg

Running mogrify −resize 50 % tmp//069750a6-660e-11e6-80d1-001c42daa3a7.jpg

Running mogrify −resize 50 % tmp//06970ce0-660e-11e6-8a4a-001c42daa3a7.jpg

Running mogrify −resize 50 % tmp//0696cf00-660e-11e6-8d38-001c42daa3a7.jpg

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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