IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Linux  >

Экзамен LPI 201: Настройка работ и автоматическое выполнение заданий

Администрирование Linux, cредний уровень (LPIC-2) тема 213

developerWorks
На предыдущую страницуСтраница 4 из 7 На предыдущую страницу

Опции документа

Обсудить


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Заметки о скриптах

Внешние ресурсы

О awk, Perl, bash и Python существует большое количество отличных книг. Соавтор это руководства (естественно) рекомендует собственное издание, Text Processing in Python , в качестве хорошей стартовой точки по написанию скриптов на Python.

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

В Linux большинство обычных скриптов для системных администраторов пишутся на bash. Сам по себе bash имеет относительно мало встроенных возможностей, но зато может с легкостью использовать внешние программы (включая такие стандартные утилиты, как ls, find, rm и cd) и программы для обработки текстов (подобные тем, которые можно найти в GNU text utilities).



В начало


Эаметки о bash

Одной из наиболее полезных установок, которые можно включать в bash скрипты, применяемые для обработки заданий, является опция set -x, выводящая исполняемые команды на стандартный вывод ошибок STDERR. Это очень полезно при отладке скриптов, когда они не выполняют того, что от них ожидается. Другая полезная для тестирования опция -- set -n, которая помогает отследить синтаксические проблемы в скрипте без его реального исполненеия. Разумеется, у вас не возникнет потребности использовать -n при запуске программы через cron или at, но для запуска и проверки их работоспособности это может быть полезно.


Листинг 3. Простейшее задание для cron, запускающее bash скрипт
                    
      #!/bin/bash
      exec 2>/tmp/my_stderr
      set -x
      # functional commands here

В этом случае вывод на STDERR перенаправляется в файл и выводит запускаемые команды на STDERR. Последующее изучение этого файла может оказаться полезным.

Системное руководство man для bash конечно хорошее, но уж слишком большое. Наиболее интересными являются опции, доступные через встроенную команду set.

Обычной задачей програмирования для системного администрирования является процесс сбора файлов, как правило файлов, найденных по тем или иным критериям командой find. Однако, при наличии в именах файлов пробелов или символов перевода строки могут возникать проблемы. Большое количество процессов, использущих перебор в цикле и обработке имен файлов, могут исполняться некорректно при наличии пробельных символов в именах. Например, следующие две команды различаются:

% rm foo bar baz bam
% rm 'foo bar' 'baz bam'

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

К счастью, GNU версия команды find имеет опцию -print0, ограничивающую каждый результат NULL'ем; а команда xargs имеет соответствующую опцию -0 для обработки аргументов, разделенных NULL'ем. Совмещая и то и другое, вы можете удалить затерявшиеся файлы, содержащие в именах пробельные символы:


Листинг 4. Очистка имен файлов от пробелов
                    
      #!/bin/bash
      # Cleanup some old files
      set -x
      find /home/dqm \( -name '*.core' -o -name '#*' \) -print0 \
       | xargs -0 rm -f



В начало


Perl taint mode

Perl имеет удобную опцию -T для переключения в taint mode. В этом режиме Perl предпринимает некоторые предосторожности, связанные с повышением защищенности, главной из которых является накладывание ограничений на команды, связанными с внешним вводом. Если вы используете запуск через sudo, taint mode может быть включен по умолчанию, но более надежным является запуск ваших административных скриптов через:

#!/usr/local/bin/perl -T

Как только вы сделаете это, все аргументы командной строки, переменные окружения, информация о locale (см. perllocale), результаты работы системных вызовов (readdir(), readlink(), переменные shmread(), сообщения порождаемые msgrcv(), поля password, gcos и shell, возвращаемые getpwxxx()) и ввод из всех файлов, помеченных как "tainted". Такие данные не могут использоваться прямо или косвенно любыми командами, ни запускаемыми через вложенный вызов командного интерпретатора, ни в любой команде, модифицирующей файлы, каталоги или процессы, за некоторыми исключениями.

Существует возможность провести отмену taint-режима (untaint) для отдельных внешних переменных через исчерпывающую проверку по определенным образцам:


Листинг 5. Untainting внешних переменных окружения
                    
      if ($data =~ /^([-\@\w.]+)$/) {
         $data = $1;                     # $data now untainted
      } else {
         die "Bad data in $data";      # log this somewhere
      }



В начало


Пакеты Perl CPAN

Одна из полезнейших вещей, доступных в Perl, -- это наличие стандартного механизма для установки дополнительных пакетов; он называется Comprehensive Perl Archive Network (CPAN). RubyGems обладает аналогичной функциональностью. Python, к несчастью, пока не обладает механизмом автоматической установки, но зато имеет достаточно широкий набор в комплекте поставки. Более простые языки, подобные bash и awk, не имеют возможностей для установки расширений, подобных описанным выше.

Страницы руководства man по команде cpan -- это хорошая отправная точка, особенно если перед вами стоит задача, которая, как вы думаете, во многом уже решена другими. Кандидатами таких модулей могут являться те, что вы можете найти на CPAN.

cpan может работать в интерактивном режиме и режиме командной строки. Единожды сконфигурированный (запустите интерактивный режим и в ходе первого такого запуска у вас будут запрошены опции конфигурации), cpan отслеживает взаимозависти и загружает их автоматически. Например, положим перед вами стоит задача, которая требует обработки конфигурационных файлов в формате YAML (yaml Ain't Markup Language). Установка поддержки для YAML так же проста, как:

% cpan -i YAML # maybe with 'sudo' first

После установки ваши скрипты могут включать use YAML; в начале файла. Это позволяет вам использовать все возможности, предоставленные разработчиком пакета.



В начало



На предыдущую страницуСтраница 4 из 7 На предыдущую страницу
    IBM в России Конфиденциальность Контакты