Monthly Archive for March, 2008

Программируй на Unix Shell! Освой /bin/sh за 7 дней!

Эффективно ли используете свое время?

  • Вы используете Unix системы?
  • Вы периодически выполняете рутинные задачи?
  • У Вас не получаете их автоматизировать?

Если ваш ответ “Да”, то Вы пришли точно по адресу.

Курс “Программируй на Unix Shell” позволит Вам сэкономить свое время и силы!

Бывало ли так, что вы вручную мучались с какой-то проблемой один или два дня?

Этого бы могло и не произойти, если бы Вы свободно владели бы программированием на shell.

Сэкономьте свое время и, в конце концов, деньги — выучите программирование на shell, начните спокойно разбираться в написании скриптов и вы увидите, как облегчится ваша жизнь.

Не надоело ли вам вручную делать одни и те же задачи по нескольку раз?

Если надоело — благодарю этому курсу вы научитесь писать скрипты, которые можно запускать автоматом (при помощи cron) и которые могут выполнять часть вашей периодической рутинной работы.

Содержание курса:

7 основных лекций с учебным материалом по оболочке /bin/sh и 12 бонусов с примерами и ответами на вопросы.

Пароль для доступа к архиву.

Основной курс

[free] Каст #1 - Вводный материал

  • План занятий

[$] Каст #2 - Базовые понятие shell

  • Как происходит раскрытие переменных?
  • Как интерпретируются переменные внутри одинарных и двойных кавычек ?
  • Как использовать подстановку “ ?
  • Как соединять несколько команд вместе ?
  • Пустая команда
  • Как сравнивать значения в shell?
  • Какие операторы есть в shell? Как они выглядят? Как они работают?
  • Домашнее задание

[$] Каст #3 - Ввод-вывод в shell, использование subshell

  • Как перенаправлять ввод-вывод в shell?
  • Как использовать here-documents?
  • Как группировать ввод-вывод нескольких команд?
  • Как объединять несколько команд в конвейер?
  • Какие подводные камни есть при использовании subshell?
  • Использование команды read и цикла while
  • Домашнее задание

[$] Каст #4 - Команды case, eval и эмуляция массивов в shell

  • Как работает команда case?
  • Как работает команда eval?
  • Как эмулировать массивы данных в shell?
  • Домашнее задание

[$] Каст #5 - Команда sed

  • Опции -n, -e, -E
  • Как адресовать строки в sed?
  • Какие есть базовые команды sed?
  • Примеры использования команды sed
  • Домашнее задание

[$] Каст #6 - Команда awk

  • Как писать программы на awk ?
  • Блоки команд, блоки BEGIN, END
  • Как адресовать поля в строке?
  • Условия обработки строк
  • Переменные awk
  • Вывод информации в awk

[free] Каст #7 - Что делать дальше?

  • Циклы по массиву в awk
  • Какие книги стоит почитать?
  • Какие задачи можно и нужно автоматизировать при помощи shell?
  • Какие задачи не стоит выполнять при помощи shell?

Бонусы:

[$] Бонус1: Анализ лога squid и блокировка пользователей при превышении лимита траффика

  • подробный разбор работы скрипта, запускающегося из cron
  • На что следует обратить внимание при запуске скрипта из cron?
  • Разбор чепочки команд
  • Как стоит делать подстановку переменных внутри строки?

[$] Бонус2: Запуск программ на выполнение, exec, встроенные переменные shell

  • exec, команда .
  • встроенные переменные
  • сдвиг позиционных аргументов

[free] Бонус3: Написание CGI программ на shell

  • Как использовать shell скрипты в качестве CGI программ?
  • Как принимать входные аргументы?
  • Как отдавать данные в браузер?
  • Зачем можно использовать shell скрипты, как CGI программы?

[$] Бонус4: Как удаленно запускать shell скрипты при помощи ssh

  • Как выполнять удаленные скрипты?
  • Как перенаправляются стандартный ввод и выво программ, запущенных через ssh?
  • Какие применения есть удаленному вызову скриптов?
  • Как выполнить скрипт, не передавая файл с ним на другой хост?

[$] Бонус5: Как удаленно (через ssh) ограничить выполнение только определенных команд, установка ssh соединения без запроса пароля

  • Как настроить ssh, чтоб он принимал бы соединения пользователем root?
  • Как настроить ssh, чтоб он не запрашивал пароль?
  • Как ограничить исполняемые через ssh команды (для повышения безопасности)?

[$] Бонус6: Истории возникновения Unix, хакеры, Jargon File, о хакерах и художниках (Paul Graham)

  • Почувствуйте обстановку, в которой создавались Unix системы

[$] Бонус7: Написание ограниченной оболочки для пользователей

  • Как ограничить список команд , которые может выполнять пользователь?
  • На что стоит обращать внимание при написании ограниченной оболочки?

[$] Бонус 8: Как поставить сторожевой таймер, чтоб скрипты не выполнялись бы вечно

  • Как предотвратить зависание скриптов?
  • Как гарантировать, что скрипт завершенится в заранее известное время?

[$] Бонус9: Ответы на вопросы

  • поиск символа в строке при помощи case
  • как передать данные в awk ?
  • программы awk
  • сравнение строк с шаблоном

[free] Бонус10: Алис Блонди и Гаспар Чилингаров представляют совмесный каст — блондинка и сисадмин :)

  • без комментариев, нужно слушать ;)

[free] Бонус11: Суровые юникс администраторы - какие инструменты вам нужны для администрирования Unix.

  • Օбязательно к прослушиванию!
  • Какие иструменты вам нужно иметь для администрорования Unix?
  • Чем отличаются афроамегритянские админы от xUSSR админов?

[$] Бонус12: Ответы на вопросы - 2

  • Как строить график в shell?
  • Как обрабатывать перевод строки в sed?
  • Как решить задание по awk (с командой cal.) ?
  • Как поменять активный раздел в FreeBSD?

[$] Бонус13: “Счастливый сисадмин” — совместно KA6AH и Гаспар Чилингаров

  • Цените ли Вы свое время?
  • Что делать с кучей дел?
  • У стресса и скуки — общая причина ?

[free] Бонус14: Программирование на shell в экспремальных условиях - Гаспар Чилингаров

  • Как программировать на shell, если нет вспомогательных программ типа grep, cut и так далее?
  • Как эмулировать многие программы ТОЛЬКО при помощи shell?

Как купить это ВСЁ?!

  1. Стоимость коробки + абонемент на год составляет 12900р.
    1. Вам высылается коробка со следующими материалами:
      • печатные текстовые руководства, составленные на основе кастов + примеры использования команд
      • домашние задания
      • подсказки для решения домашних заданий
      • решения домашних заданий
      • аудио CD с записями кастов
      • дополнительные бонусные диски с аудио, текстами, файлами домашних заданий и т.д.
      • Книжку “Установка веб сервера на FreeBSD” (цена 6$) бесплатно
      • Инсталлятор FreeBSD 6.3 и все доступные пакеты (цена 30$) бесплатно - рекомендуется для установки на производственные сервера
      • Инсталлятор FreeBSD 7.0 и все доступные пакеты (цена 30$) бесплатно - рекомендуется для изучения системы и на менее ответственные машины
      • недокументированные бонусы (я включаю самые интересные на данный момент бонусы и информацию )
    2. Сразу же после оплаты вы получаете доступ ко ВСЕМ материалам круса в электронном виде.
    3. Абонемент на услугу ‘консультации по shell программированию на 1 год (цена 11000р) бесплатно — вы можете задавать мне любые вопросы по программированию на shell. Вы присылаете свой вопрос по почте и я даю вам рекомендации, как решить эту пробему или как поступать с данной задачей. Имейте всегда под рукой справочную службу для решения ваших проблем. Количество вопросов в течении месяца НЕ ОГРАНИЧЕНО. Стоимость отдельной годовой подписки на этот сервис 11000р/год. Включено в коробочную версию БЕСПЛАТНО.
  2. Стоимость коробки составляет 6997р.
    1. Вам высылается коробка со следующими материалами:
      • печатные текстовые руководства, составленные на основе кастов + примеры использования команд
      • домашние задания
      • подсказки для решения домашних заданий
      • решения домашних заданий
      • аудио CD с записями кастов
      • дополнительные бонусные диски с аудио, текстами, файлами домашних заданий и т.д.
      • Книжку “Установка веб сервера на FreeBSD” (цена 6$) бесплатно
      • Инсталлятор FreeBSD 6.3 и все доступные пакеты (цена 30$) бесплатно - рекомендуется для установки на производственные сервера
      • Инсталлятор FreeBSD 7.0 и все доступные пакеты (цена 30$) бесплатно - рекомендуется для изучения системы и на менее ответственные машины
    2. Сразу же после оплаты вы получаете доступ ко ВСЕМ материалам круса в электронном виде.
  3. сделать предоплату СЕЙЧАС и купить ее с 50% скидкой за 2950р. тогда вы получаете СЕЙЧАС все аудио файлы и получите доступ к файлам текстовых материалов ПОСЛЕ сбора всей коробки - вы покупаете ТОЛЬКО ЭЛЕКТРОННУЮ версию, без печатных материалов (это хорошая возможность сэкономить);

По предварительной записи, пока коробка подготавливается, можно купить коробку со СКИДКОЙ.

Первые 10 9 8 7 экземпляров все еще ждут своего владельца:
*не надоело упускать возможности?:))))

  • Саму коробку за 6000р - если вы оплачиваете прямо СЕЙЧАС
  • Коробку + абонемент на год за 9950р - если вы оплачиваете прямо СЕЙЧАС

Оплата!

  • при помощи Webmoney — переведите на рублевый кошелек R374057138343 с пометкой “bin sh, коробка” и ОБЯЗАТЕЛЬНО пишете в назначении платежа СВОЙ e-mail.
  • Yandex.Деньги — переведите на мой кошелек необходимую сумму с пометкой “bin sh, коробка” и ОБЯЗАТЕЛЬНО пишете в назначении платежа СВОЙ e-mail.Для того, чтоб узнать номер кошелька напишите почту по адресу nm@web.am
  • Кредитные карточки и банковский платеж (wire transfer) — тоже возможно, для уточнения метода платежа свяжитесь со мной по адресу nm@web.am.

90 дней 180 дней для оценки материала, 100% гарантия возврата денег!

Я предлагаю вам 90 дней 180 дней (это целых полгода) 100% гарантии. Вы можете получить продукт, прослушать его и если он вам не понравится или вы посчитаете, что он вам не подходит — вы можете возвратить его мне без каких-либо возражений! Даже если вам не понравится размер фонта или цвет обложек! Без препятствий, без вопросов, без обвинений, просто возврат. Я уважаю ваше и свое время — поэтому если этот продукт вам не понравится я удалю вас из базы наших клиентов, чтоб мы не тратили время зазря в дальнейшем. Надеюсь на ваше понимание.

Shell programming: отжиг на тему шелл :)

Качать обязательно!

Сам каст можно найти здесь.

Shell programming: на десерт

На сутки (до 23:00 по москве 27 марта) выкладываю запись второго каста с нашего тренинга.

Он посвящен, догадайтесь чему? Правильно — shell!

Содержимое каста:

1.Базовые понятия
1.Раскрытие переменных / подстановки в /bin/sh
1.переменные/присвоение/арифметические операции
2. ”, “”, без кавычек
3. “
4. ;
5. :
2.Операторы shell
1.команды сравнения (test, []), -eq, -ne, -ge, -le, -gt, -lt, -a, -o, -f, -d, -s, -z, =, !=, >, <, ()
2.if/while/for
1. if [ ]
2. if command
3. while , while read, white read <<EOF

4. for VAR in “

3.Домашнее задание

Калькулятор -

Код:

 

> ./accum
Enter Acc:
10
Accumulator value is 10
Enter operation:
* 5
Accumulator value is 50
Enter operation:
- 12
Accumulator value is 38
Enter operation:
/ 2
Accumulator value is 19
q
Quitting
>

Линк на запись с тренинга по shell программированию - будет жить сутки, потом умрет ;)

UPDATE: линк умер :) зато есть бонус ;)

Shell programming - все кандидаты — вылетели

Все кандидаты на вылетание — их набралось аж целых шестеро,  были сегодня отчислены за невыполненное первое домашнее задание.

Жаль конечно, но видимо на этот раз нам не по пути.

Увидимся в следующий раз :)

Небольшой отжиг от меня :)

Небольшой отжиг от меня :)

7 способов улучшить ваши shell скрипты на /bin/sh

Для новичков в shell программировании :)
Несколько приемов для того, чтоб сделать свои скрипты компактнее, быстрее и правильней:

1. Упрощение конструкции с if
Конструкцию

if команда1
then
команда2
fi

можно заменить просто на команда1 && команда2

2. Упрощение конструкции с if !

Конструкцию

if ! команда1
then
команда2
fi

можно заменить просто на команда1 || команда2

3. Если вы используете шаблоны или подстановку аргументов в shell

Если вы используете шаблоны (скажем, *) или подстановку аргументов в shell при помощи “, то если их много shell не может сделать такую подстановку. Тогда стоит прибегнуть к помощи команды xargs.

Т.е. строчка

rm * в директории, которая содержит слишком много файлов, может превратиться в

ls | xargs rm

Или же
rm `find ./ -name pkg-descr` может превратиться в

find ./ -name pkg-descr | xargs rm

4. Ускорить grep
Если вы ищите какую-то строку в больший объемах данных при помощи grep, то стоит использовать fgrep — который позволяет искать только вхождения строк, а не регулярных выражений — но и работает быстрее на 10-20%.

5. Пишем условия правильно

Для того, чтоб при проверке условий не появлялось бы ошибок при неправильном пользовательском вводе, скажем если INPUT пустая строка

if [ $INPUT = test ]; then … fi

то стоит применять либо вариант с дописыванием одного символа с обоих сторон сравнения

if [ x$INPUT = xtest ]; then … fi
либо брать переменную в двойные кавычки
if [ "$INPUT" = test ]; then … fi

6. Чтоб не дать команде выводить что-либо на экран

Можно использовать перенаправление стандартного вывода и стандартного потока ошибок в /dev/null

ping -c foo.bar > /dev/null 2>/dev/null

После этого уже можно проверять код завершения этой программы.

7.Осторожно фильтруем список выполняемых команд

Если вы из скрипта хотите отослать сигнал завершения или какой-либо другой группе команд и используете для этого строчку типа

kill -9 `ps -ax | grep PROCESS_NAME | cut -c1-5 `

то вы случайно можете убить и процесс grep и получить неправильные результаты. Поэтому обязательно переписывайте такие команды вот так:

kill -9 `ps -ax | grep PROCESS_NAME | grep -v grep | cut -c1-5`

Это исключит саму команду grep из списка убиваемых процессов.

Shell programming: подробный план кастов

Подробный план кастов такой. Отписывайтесь, комментируйте :)

     

  1. Базовые понятия (45-50 минут)

    1. Раскрытие переменных / подстановки (15 мин)

      1. переменные/присвоение/арифметические операции

      2. ‘, “”, без кавычек

      3. ;

      4. :

    2. Операторы shell

      1. команды сравнения (test, []), -eq, -ne, -ge, -le, -gt, -lt, -a, -o, -f, -d, -s, -z, =, !=, >, <, () (10 мин)

      2. if/while/for (15 мин)

        1. if [ ]

        2. if command

        3. цикл while , while read, white read <<EOF

        4. цикл for VAR in “

    3. Домашнее задание (5-10 мин)

      1. простейший калькулятор

      2. на 4 — учитывать неправильный ввод в калькуляторе

      3. на 4 — рисовать график

      4. на 5 — рисовать график функций и оси координат

  2. Ввод-вывод (55-60 минут)

    1. Ответ на Д/З, общие ошибки/вопросы (15 минут)

    2. Новый материал

      1. перенаправление ввода-вывода (10 минут),

        1. >, >>, <. <<

      2. как группировать стандартный вывод нескольких команд (5 минут), subshell

        1. субшелл — (cmd; cmd)

        2. чтение переменных

        3. присвоение переменных

        4. cmd | субшелл | cmd | cmd

        5. какие подводные камни при использовании subshell (10-15 минут)

        6. ( субшелл ) & - остающиеся процессы

      3. команда read использование в цикле (5 минут)

        1. cmd | while read …

        2. подмена IFS

      4. отдать д/з — (10 минут)

        1. простейший аналог newsyslog (читать/парсить файл) — на 3

        2. на 4 — реализовать нормальную ротацию файлов (с посылкой сигналов)

        3. на 5 — лимит на количество файлов в ротации

  3. Дополнительные материалы (55 минут)

    1. Ответ на Д/З, общие ошибки/вопросы (20 минут)

    2. команда case (15 мин)

      1. как эмулировать grep/cut и так далее

    3. команда eval (10 мин)

      1. как эмулировать массивы

      2. как эмулировать ассоциативные массивы

    4. д/з (10 минут)

      1. выводить информацию о пользователе из /etc/passwd

      2. на 5 — решить задачу (выбирать несколько колонок — подробное описание в файле)

  4. программирование на sed (45-50 минут)
    1. Ответ на Д/З, общие ошибки/вопросы (15-20 минут)

    2. разбор sed (20 минут)

      1. адресация строк (/xxx/, /xxx/…/xxx/, !/xxx/)

      2. команды sed (p, d, s)

      3. как комбинировать команды sed

    3. д/з (10 минут)

      1. анализ лог файла — получить список наиболее посещаемых URL

      2. анализ лог файла — получить top 10 ссылающихся URL

  5. программирование на awk (45 минут)

    1. Ответ на Д/З, общие ошибки/вопросы (15 минут)

    2. разбор awk (20 минут)

      1. блоки команд, BEGIN, END

      2. адресация полей в строке

      3. условия выполнения, адресация строк, условия

      4. переменные

      5. вывод информации

    3. д/з (10 минут)

      1. на 3 — фильтрация логов

      2. на 4 — подсчет статистики по логам

      3. на 5 — ротация вывода команды cal (аналог ncal)

  6. Заключительный (35 минут)

    1. Ответ на вопросы (20 минут)

    2. What’s next (15 минут)

      1. какие книжки стоит почитать

      2. какие вещи стоит попытаться автоматизировать в системе сначала?

      3. Какие признаки задач, которые НЕ решаются на shell за разумное время?

  7. Бонус - пока не скажу, но что-то вкусное (25 минут)

7 примеров хитрого использования shell

По программированию на shell существует много пособий и учебников, но в этой статье я хотел бы поговорить о нескольких приемах, которые часто либо не используются, либо воспринимаются неправильно. Особенно это касается новичков в shell программировании

1. Создание lock файла
Очень часто нужно бывает выполнять скрипт, который может делать непредсказуемые вещи, если его запустить параллельно. Особенно часто это бывает, когда скрипт запускается из cron, а предыдущий его экземпляр не успел завершиться.

Вот пример скрипта, который создает lock файл, и если он присутствует — то вылетает с ошибкой.

Код:
#!/bin/sh
LOCKFILE=/tmp/mylockif [ ! –s $LOCKFILE ]; then # проверяем, что lock файл пустой
echo $$ > $LOCKFILE # записываем идентификатор процесса в lock файл
# все действия скрипта нужно поместить здесь
: > $LOCKFILE # обнуляем lock файл
exit 0
else
# как пример — отсылаем почту root, из-за того,
# что не скрипт не может быть запущен
echo “PID `cat $LOCKFILE` running” | mailx –s “$0 can’t run” root
exit 1
fi

Этот скрипт можно переписать, чтоб он пытался бы запуститься несколько раз с паузами (просто добавить while и sleep), либо чтоб он убивал бы ранее запущенный скрипт, если тот выполняется более N секунд.

2. ВСЕГДА проверяйте коды возврата
Всегда проверяйте, какой код возврата вам выдала запущенная вами программа или скрипт — так как это может повлиять на дальнейшую работу вашего скрипта. В /bin/sh код возврата находится в переменной $? .

3.Используйте код возврата
Вы можете проанализировать код возврата при помощи команды test (используя ее в виде квадратных скобок [ ] ) и выполнить правильную последовательность действий

Код:
if [ “$?” -eq ‘0’ ]; then echo ‘Я зиданчег’; else echo ‘Я не зиданчег’; fi

Не забывайте, что в shell положительный код возврата это 0, а все оставшиеся коды — это сообщение об ошибках.

Можно сразу передавать команды оператору if, а не анализировать код выхода, сохраненный в $?.

Код:
host=’127.0.0.1′
if ping -c 1 $host; then echo ‘Хост пингуецца’; else echo ‘Хост совсем неживой’; fi

4. Объединение вывода команд
Можно объединять вывод нескольких команд вместе. Вместо того, чтоб добавлять вывод нескольких команд в один и тот-же файл, можно использовать subshell — дочерний shell.

Код:
#!/bin/sh
(
echo ‘———————–’
cat /etc/motd
echo ‘———————–’
cat /etc/issue
echo ‘———————–’
) > /tmp/motd-issue

5.Другие приемы с subshell
При выполнении цепочки команд может быть очень полезным сперва поменять директорию, а потом только выполнять команду. Вот как это делается

Код:
tar cf - . | (cd /tmp/test && tar xpf -)


Если директории /tmp/test не существует, то и вторая команда tar не будет выполнена.

6.Запуск куска кода в фоновом режиме
Если вам нужно запустить кусок кода в фоновом режиме, то тоже можно использовать subshell

Код:
#!/bin/sh
echo ‘begin’
(echo ’subshell start’; sleep 5; echo ’subshell stop’)&
echo ‘end’

Кусочек кода (echo ’subshell start’; sleep 5; echo ’subshell stop’) будет выполняться в фоновом режиме до тех пор, пока не завершиться.

7.Использование команд через ssh

Есть огромное количество ситуаций, когда очень удобно пересылать данные и команды через ssh. Например, чтоб скопировать файлы и директории с одного компьютера на другой:

Код:
tar cf - ./dir | ssh $host “cd /dir/ && tar xpf –“

Или как вариант, запустить скрипт на удаленном хосте, не копируя его туда:

Код:
cat script.sh | ssh $host /bin/sh

Курс по shell программинг - бай-бай отстающие + план

Те, кто не отписались во-время

  • DiV
  • Алексей
  • rozhkov

Такова жизнь, товарищи, пролетаете с тренингом, как фанера над парижем. Ибо нужно было отписываться во-время - были 1 сутки времени.
И еще — шустрый товарищ с ником ‘ilyouha‘ тоже пролетает со свистом, потому что в посте с анонсом тренинга он не отписывался а почему то решил сразу полезть на форум. направляется в жестокий бан.

Итого на курс освободилось еще 3 2 1 бесплатное место.

Что нужно сделать для записи?

  1. Выполняете условия записи на тренинг, ставите отзыв.
  2. Отписываетесь в комментах к этой теме
  3. Регистрируетесь на форуме
  4. Качаете и слушаете каст.
  5. В комментах к ЭТОЙ же записи отписываетесь с ответами на следующие вопросы: (у вас должно получиться 9 ответов)
    • Зачем вы пришли на этот тренинг? Ваша цель
    • Что вы ожидаете от этого тренинга? Что вы хотите получить.
    • Что вы хотите решить, обучаясь на этом тренинге? Какая задача вас вынудила обучаться/записываться на тренинг.

Если сумеете выполнить эти 3 условия до 23:00 по москве 23 марта - отлично, вписываетесь на тренинг. Не успеваете — значит на не по пути.

План путина тренинга

  1. Базовые понятия (45-50 минут) (24 марта)

    1. Раскрытие переменных / подстановки (15 мин)

    2. Операторы shell

    3. Домашнее задание

  2. Ввод-вывод (55-60 минут) (25 марта)

    1. Ответ на Д/З, общие ошибки/вопросы (15 минут)

    2. Новый материал

      1. перенаправление ввода-вывода и все такое

    3. Домашнее задание

  3. Дополнительные материалы (55 минут) (26 марта)

    1. Ответ на Д/З, общие ошибки/вопросы

    2. команда case

    3. команда eval

    4. Домашнее задание

  4. программирование на sed (45-50 минут) (27 марта)
    1. Ответ на Д/З, общие ошибки/вопросы

    2. разбор sed

    3. Домашнее задание

  1. программирование на awk (45 минут) (28 марта)

    1. Ответ на Д/З, общие ошибки/вопросы

    2. разбор awk

    3. Домашнее задание

  2. Заключительный (35 минут) (29 марта)

  3. Бонусы (30-31 марта)

Shell programming: первое мини-домашнее задание

Качаем аудио файл, слушаем, выполняем домашнее задание.

Кто не успел отписаться до 24:00 по москве, 21 марта, пятница — тот пролетел с тренингом :)

Отписываемся на форуме здесь.