- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Тайм-менеджмент для системных администраторов - Лимончелли Томас
Шрифт:
Интервал:
Закладка:
Эта команда позволяет вам делать то, что недоступно в большинстве графических интерфейсов, например сообщать об авторских правах, указывать имя автора и т. д.
Она хорошо встраивается в JJAT-файл (в DOS) или в сценарий оболочки UNIX/Linux.
Вот пример сценария makeimage1, в котором используется эта команда:
#!/bin/bash
mkisofs — D -l — J -r — L -f — P "Limoncelli" — V 'date — u +%m%d' $*
Конструкция 'date — u +%m%d' создает метку тома, содержащую текущую дату.
Я долго не мог создавать хорошие сценарии, потому что не знал, как обрабатывать параметры командной строки. Расскажу, как следует копировать их в сценарий.
Конструкция $* в сценарии означает «любые элементы командной строки». Если вы введете:
$ makeimage1 cdrom/
то последовательность $* будет заменена на cdrom/.
Поскольку $* работает и с несколькими аргументами, вы можете ввести:
$ makeimage1 cdrom/ dir1/ dir2/
В этом случае вместо $* будут подставлены все три аргумента. Команда mkisofs сольет (merge) все три каталога на CD-ROM. Если вы хотите указать конкретные элементы командной строки, пишите $1, $2 и т. д. В нашем примере $1 будет соответствовать cdrom/, а $2 — dir1/.
Еще одной причиной, не позволявшей мне писать хорошие сценарии, было мое неумение обрабатывать флаги командной строки, например scriptname — q file1.txt. Если сценарий, который требовалось написать, был настолько сложен, что требовал учета флагов командной строки, я использовал другой язык или вообще отказывался от создания сценария. Оказывается, в bash есть функция getopt, которая выполняет синтаксический разбор. Однако руководство по bash написано не совсем понятно. В нем сказано, как работает getopt, но не объясняется, как пользоваться этой функцией. Наконец, я нашел подходящий пример и с тех пор периодически копирую его. Неважно, как он работает. Чтобы воспользоваться им, вам совсем необязательно понимать, что он делает и почему. А выглядит он так:
args='getopt ab: $*'
if [$?!= 0]
then
echo "Usage; command [-a] [-b file.txt] file1 file2…"
exit -1
fi
set — $args
for i
do
case "$i"
in
-a)
FLAGA=1
shift
;;
-b)
ITEMB="$2"; shift
shift
;;
-)
shift; break
;;
esac
done
Предполагается, что есть некая команда с флагами — а и — b. Второй флаг особый, потому что за ним должен следовать аргумент, например — b file.txt. Из первой строчки понятно, что за командой getopt следуют буквы, которые могут быть флагами. После флага, которому требуется дополнительный аргумент, стоит двоеточие. Далее мы видим оператор case (выбор) для каждого возможного аргумента. Код оператора либо устанавливает флаг, либо устанавливает флаг и сохраняет аргумент.
А что такое $2? И какой смысл в — )? И что делает set? И как поживает Наоми? Все это вы сможете узнать потом. А сейчас воспользуйтесь образцом, и он будет работать.
(Ну ладно. Если вы вправду хотите в этом разобраться, прочитайте «Advanced Bash-Scripting Guide» (Расширенное руководство по написанию скриптов bash) по адресу http://www.tldp.org/LDP/abs/html.)
Теперь я приведу более развернутый пример, иллюстрирующий некоторые дополнительные возможности. Во-первых, в нем определяется функция usage, предназначенная для вывода справочной информации. Интересная особенность этой функции — команда echo, растянутая на несколько строк. Неплохо, не так ли? bash не возражает. Во-вторых, в этом сценарии проверяется наличие минимального количества (MINITEMS) элементов командной строки после обработки аргументов. Наконец, сценарий демонстрирует обработку флагов, переопределяющих умолчания.
Пожалуйста, пользуйтесь этим кодом, если вам понадобится преобразовать простой сценарий в сценарий, обрабатывающий параметры и флаги:
#!/bin/bash
MINITEMS=1
function usage
{
echo "
Usage: $0 [-d] [-a author] [-c file.txt] [-h] dir1 [dir1…]
-d debug, don't actual run command
-a author name of the author
-c copyright override default copyright file
-h this help message
"
exit 1
}
# Задание умолчаний:
DEBUG=false
DEBUGCMD=
AUTHOR=
COPYRIGHT=copyright.txt
# Обработка аргументов командной строки
# с возможным переопределением умолчаний
args='getopt da: c:h $*'
if [$?!= 0]
then
usage
fi
set — $args
for i
do
case "$i"
in
-h)
usage
shift
;;
-a)
AUTHOR="$2"; shift
shift
;;
-c)
COPYRIGHT="$2"; shift
shift
;;
-d)
DEBUG=true
shift
;;
-)
shift; break;;
esac
done
if $DEBUG; then
echo DEBUG MODE ENABLED.
DEBUGCMD=echo
fi
# Проверка наличия минимального количества элементов
# командной строки
if $DEBUG; then echo ITEM COUNT = $#; fi
if [$# — lt "$MINITEMS"]; then
usage
fi
# Если первый аргумент особый, запомнить его:
# ТНЕIТЕМ="$1"; shift
# Клонируйте эту строчку для каждого элемента,
# который хотите сохранить.
# Не забудьте при этом откорректировать значение
# переменной MINITEMS.
# Если вы хотите обработать остальные элементы,
# делайте это здесь:
# for i in $*; do
# echo Looky! Looky! I got $i
# done
if [! -z "$COPYRIGHT"];
then
if $DEBUG; then echo Setting copyright to: $COPYRIGHT; fi
CRFLAG="-copyright $COPYRIGHT"
fi
LABEL='date — u +%Y%m%d'
$DEBUGCMD mkisofs — D -l — J -r — L -f — P "$AUTHOR" — V $LABEL $CRFLAG $*
Построение длинной командной строки
Самый лучший способ научиться сцеплять команды UNIX/Linux в один длинный канал — заглядывать через плечо того, кто этим занимается. Сейчас я попробую научить вас делать это, создав на ваших глазах небольшую утилиту.
♥ Книга «Think UNIX» (Думайте в духе UNIX), Que, — отличный учебник по объединению инструментов UNIX/Linux в длинные команды.
Самой мощной технологией, представленной в UNIX/Linux, является возможность объединить несколько команд аналогично тому, как наращивают садовый шланг для поливки. Если у вас есть программа, которая преобразует входной текст в верхний регистр, и программа, сортирующая строки в файле, то вы можете сцепить их друг с другом. В результате вы получите команду для преобразования строк в верхний регистр и их вывода в заданном порядке. Все, что от вас требуется, — это поставить символ «|» между командами. Выходная информация одной команды поступит на вход следующей:
$ cat файл | toupper | sort
Тем, кто не знаком с UNIX/Linux, сообщу, что cat — это команда, выводящая файл. Программу toupper я написал для преобразования текста в верхний регистр, a sort — программа, сортирующая строки текста. Все они прекрасно стыкуются.
Теперь напишем более сложную утилиту. Это будет программа, определяющая, какой компьютер в вашей локальной сети наиболее вероятно заражен червем. Программа будет представлять собой один длинный канал.
Звучит неожиданно? Все, что будет делать наша программа, — это искать подозрительные на заражение компьютеры. Иными словами, она выведет список хостов, нуждающихся в более внимательном осмотре. Тем не менее, ваши коллеги будут удивлены, уверяю вас.
Программа не заменит вам хорошее антивирусное обеспечение, но я выбрал этот пример как хорошую иллюстрацию некоторых рудиментарных приемов программирования оболочки. Кроме того, вы узнаете кое-что новое о работе сетей. Когда мы закончим, в ваших руках будет простой инструмент, которым вы сможете пользоваться для диагностики этой конкретной проблемы в своей сети. С помощью этой программы мне удалось убедить руководство в необходимости купить настоящее антивирусное программное обеспечение.

