Weekend mechanics -- Выходные под капотом вашего
Linux'а |
||||||||||||||||
Добро пожаловать на майский выпуск WM[ ** Этот выпуск посвящается моему хорошему другу Natalie Wakelin, перед которой я в неоплатном долгу за оказанные мне поддержку и помощь. Она была моей путеводной звездой и верным другом, и не смотря на то, что она ни слова не понимает из всей этой "технической абракадабры" -- я всё-таки решил посвятить статью ей! Огромное спасибо, Natalie!! :-) ** ] Что за песни пели сирены Взято: "Убийство на улице Морг" -- Эдгар Аллан По [1] Да, да, я знаю. Спасибо, большое спасибо. Довольно аплодисментов. Я вернулся :-) Серьёзно, прошу извинить меня за растянувшиеся на пару месяцев "каникулы", которые устроил себе LWM[2]. Я неожиданно совершил затяжной прыжок в мир свободы и университетской жизни, а адаптация к этому оказалась для меня сложнее, чем ожидалось. Но что было, то было..... Хочу заметить (для таких внимательных глаз, как ваши), что эпиграф статьи описывает принципы использования Linux'а в целом. В самом деле: сколь бы странной не казалась возникшая проблема, вряд ли она находится за пределами возможного и не может быть решена. В этом мне неоднократно приходилось убеждаться на собственном опыте :-) Кроме основной работы в университете, я активно помогал решать проблемы группы пользователей Linux в Ганте (Hants LUG, http://www.hants.lug.org.uk), участвуя в этом и лично, и "виртуально" через почтовую рассылку. Это было очень увлекательно и позволило мне не только учить, но и многому научиться самому! Так. Думаю, для одного месяца такой преамбулы более чем достаточно. Читайте и наслаждайтесь. Или я не прав? Краткое введение: SquidЧто есть Squid?Те из вас, кто читал сентябрьский номер LG, помнят, что я писал статью об использовании Apache. Я получил несколько неплохих откликов (спасибо всем, кто прислал свои комментарии). Я подумал, что будет неплохо написать небольшой "букварь" по squid. Для тех, кто не в курсе, Squid (http://www.squid-cache.org) (не путайте с морским созданием, родственником цефалоподов) -- это программа, работающая под Linux и выполняющая функции proxy-сервера Интернет. Почему он так называется? Очевидно потому что (цитирую: "все нормальные имена уже заняты"). Squid обрабатывает туннельные интернет-запросы, посылаемые через машину, тоже именуемую proxy-сервер. Дополнительно он предоставляет возможность фильтровать определённые web-страницы, соответственно позволяя или блокируя их просмотр пользователем. Это осуществляется при помощи ACL (Access Control Lists -- списки контроля доступа). Более подробно об этом мы поговорим позже. ИнсталляцияИнсталляция squid не слишком сложна. Он поддерживается в большинстве дистрибутивов (RedHat, SuSE, Caldera, Debian и т.д.), так что я уверен, что вы обязательно найдёте его на своих компакт-дисках. Если ваш Linux-дистрибутив поддерживает RPM-пакеты, то вы можете проверить установлен ли squid на вашей машине вот такой командой: rpm -qa | grep -i squid[11] Если пакет установлен, то rpm вернёт вам примерно такую строку (или что-то на неё похожее): squid2-2.2.STABLE5-190 Если же squid не установлен, то его можно поставить с компакт-дисков дистрибутива. [3] Если по какой-то причине на компакт-дисках вашего дистрибутива squid не оказалось, или вы используете дистрибутивы Linux'а (такие как Debian или Slackware), которые не поддерживают формат пакетов RPM, то загрузите "тарбол" (.tgz или .tar.gz) с исходным кодом proxy-сервера: http://www.squid-cache.org/download. Для установки squid из "сырцов" распакуйте "тарбол" в "/tmp" и выполните следующие команды: 1. Если вы сейчас не зарегистрированы как пользователь "root", то воспользуйтесь либо su, либо sudo, либо авторизуйтесь в системе как root через отдельную консоль 2. cd /tmp 3. tar xzvf ./имя_пакета_squid.tar.gz -- [или возможно .tgz] 4. Теперь запустите скрипт конфигурации: ./configure 5. После того, как он без ошибок закончит свою работу , введите make && make install для компиляции и установки файлов, относящихся к squid. Обычно при установке из RPM-пакета файлы squid размещаются по директориям /usr/bin /etc /etc/squid (возможно, использовалось в RH 5.0) /var/squid/log/ [/usr/local/etc] -- может устанавливаться, как "симлинк" на /etc Если же вы собрали squid из исходников, то файлы располагаются иначе: [4] /etc /etc/squid (возможно, использовалось в RH 5.0) /usr/local/bin /var [/usr/local/etc] -- может устанавливаться, как "симлинк" на /etc В принципе, всё это не играет особой роли, за исключением тех случаев, когда требуется расположить файлы как-то по-особенному. Теперь, когда вы установили squid, давайте перейдём к следующему разделу, а именно, к его настройке. НастройкаИтак, вы установили squid и слегка удивлены...."И это всё?" Если бы это было так, мой дорогой читатель. Увы нет....нам предстоит сделать ещё массу вещей, прежде чем в наших руках окажется старый добрый (и к тому же работающий) proxy-сервер. Теперь наши усилия должны быть сосредоточены на /etc/squid.conf[12]. Этот файл содержит все настройки squid и, учитывая, что нам придётся его редактировать, советую сделать резервную копию. Хотя бы так cp /etc/squid.conf /etc/squid.conf.orig После чего запустить ваш любимый редактор и приступить к редактированию squid.conf На самом деле, попытка использовать оригинальный файл /etc/squid.conf без внесения исправлений ни к чему хорошему не приведёт. Прежде чем у нас получится поднять и запустить proxy-сервер, в конфигурационном файле необходимо сделать множество изменений. На первый взгляд может показаться, что этот файл длиною в несколько миль. Но вашу задачу облегчат комментарии, которые вставлены везде, где только возможно. Во-первых, нужно сообщить squid'у IP-адрес вашей машины и номер порта, на котором он будет "слушать" запросы. В squid.conf вы найдёте вот такую закомментированную строку: #http_port 3128 Раскомментируйте её, удалив символ "решётки" (#). По умолчанию выбран порт 3128. Тем не менее, вы можете задать squid'у слушать другой порт!! На своей машине я указал такие параметры: http_port 10.1.100.1:8080 Это заставляет squid "слушать" пакеты, приходящие на адрес 10.1.100.1, порт 8080. Прежде чем выбирать номер порта, убедитесь, что он не занят другим приложением. Это самая часто встречаемая ошибка при настройке squid. Движемся дальше. В процессе настройки конфигурационного файла важной опцией является cache_mem. Она определяет количество оперативной памяти, которую может использовать proxy-сервер для кеширования. Я просто раскомментировал эту строку и оставил значение по умолчанию -- 8 Мб. Далее следуют опции, указывающие процент минимального и максимального уровня заполнения дискового кеша. При достижении уровня cache_swap_high, начинается ускоренный процесс удаления данных из кеша. Процесс прекращается при уровне заполнения cache_swap_low. #cache_swap_low 90 #cache_swap_high 95 Я раскомментировал и изменил эти строки. Указанные мною значения были выбраны исходя из того, что в моём распоряжении был жесткий диск на 60 Гб: cache_swap_low 97 cache_swap_high 98 Так....пока всё хорошо. Мы сообщили squid'у на каком порту и для какого адреса он должен слушать приходящие пакеты, сколько памяти он может использовать и какую долю объема дискового кеша (в процентах) он может занимать, прежде чем начнёт удалять старую информацию. Замечательно! Если вы внесли все изменения, о которых я говорил, то самое время сохранить их. Следующая и предпоследняя опция, которую я менял, была одной из наиболее важных -- она определяла местоположение и размер подкаталогов дискового кеша. Настроил я её вот так: cache_dir /var/squid/cache 100 16 256 Что и о чём тут говорит? "/var/squid/cache" указывает на путь к дисковому кешу с максимальным размером в 100 Мб, содержащему 16 подкаталогов верхнего уровня, каждый из которых в свою очередь содержит 256 подкаталогов. Последнее, что нужно "подкрутить" в этом файле, прежде чем переходить к настройке фильтров, это использование регистрационных журналов. Следующими за опциями настройки кеша (cache_dir) идут опции, описывающие расположение регистрационных журналов (логов). Как правило, squid пишет информацию в четыре журнала:
Каждый из журналов имеет в работе proxy-сервера своё собственное назначение. Обычно я "веду" только два из них -- access log и cache log (журналы доступа и использования кеша). По здравому размышлению, остальные мне просто не нужны. :-) Журнал доступа (access log) регистрирует все запросы, которые делает пользователь (т.е. на какой сайт он хочет попасть, какой файл скачать и т.д.). Когда я учился в школе, мне было не очень интересно, кто и куда пытался попасть. Теперь же я рекомендую всем сисадминам включать эту опцию -- этот журнал очень важен. Итак, я сделал следующее (расскоментировав соответствующие строки): cache_access_log /var/squid/logs/access.log cache_log /var/squid/logs/cache.log Рекомендую вам оставить пути к файлам журналов как есть. Обычно я оставляю большинство опций в squid.conf закомментированными. Существует множество ключей, подходящих для различных ситуаций. Каждая опция хорошо (я бы сказал, избыточно) документирована, поэтому, если вы захотите выяснить, что она делает, то прочтите соответствующие комментарии в squid.conf.[5] Фильтрация (контроль доступа)В этом разделе мы продолжаем рассматривать "/etc/squid.conf" и я собираюсь подробнее остановиться на контроле доступа (access control). Контроль доступа предоставляет системному администратору способ проконтролировать какие пользователи, через какие IP-адреса, порты и т.д. могут подключатся к proxy-серверу. Такой контроль может быть удобен в больших сетях. Обычно ACL (Access Control Lists -- списки контроля доступа) содержат следующие настройки:
Все правила контроля доступа имеют следующий формат: acl acl_config_name type_of_acl_config values_passed_to_acl В конфигурационном файле squid.conf найдите строку: http_access deny all После неё добавьте следующее: acl weekendmechnetwork 10.1.100.1/255.255.255.0 http_access allow weekendmechnetwork Вы можете изменить имя ACL-правила "weekendmechnetwork" на любое другое по вашему выбору. В нашем случае правило с именем "weekendmechnetwork" используется для определения IP-адреса 10.1.100.1 (proxy-сервер) с сетевой маской 255.255.255.0 Таким образом, "weekendmechnetwork" является именем, ассоциируемым с клиентом сети. Строка "http_access allow weekendmechnetwork" говорит, что для клиента "weekendmechnetwork" разрешён доступ через http-протокол. Следующее, что мы должны сделать -- разрешить доступ в Интернет определённым клиентам. Этот приём используется в случае, когда доступ к Интернет должны получить не все пользователи в сети, а только часть из них. Кроме того, что мы уже добавили в squid.conf, мы можем добавить примерно следующее: acl valid_clients src 192.168.1.2 192.168.1.3 192.168.1.4 http_access allow valid_clients http_access deny !valid_clients Эти правила разрешают клиентам с IP-адресами из группы "valid_clients" доступ по протоколу http (http_access allow valid_clients) и запрещают его для для клиентов, чей IP-адрес не входит в группу "valid_clients" (http_access deny !valid_clients). Если вы хотите разрешить доступ в Интернет любой машине, то объявите следующее правило: http_access allow all В дальнейшем мы можем расширить список правил, говоря squid'у, какое из ACL-правил будет активно в определённое время. Например: 1. acl clientA src 192.168.1.1 2. acl clientB src 192.168.1.2 3. acl clientC src 192.168.1.3 4. acl morning time 08:00-12:00 5. acl lunch time 12:30-13:30 6. acl evening time 15:00-21:00 7. http_access allow clientA morning 8. http_access allow clientB evening 9. http_access allow clientA lunch 10. http_access allow clientC evening 11. http_access deny all [ ** N.B. При создании правил, не забудьте опустить номера строк. Я добавил их, чтобы сделать понятнее дальнейшие объяснения -- Thomas Adam ** ] Строки 1-3 задают имена ACL-правил, которыми
идентифицируются машины. Но мы можем применять ACL-правила, запрещая доступ к URL, соответствующим заданным регулярным выражениям. Хорошо "зашвырнуть" такие запросы в корзину для мусора или, что более корректно, в "&>/dev/null" :-) Чтобы сделать это, мы можем определить новые именованные ACL-правила, содержащие регулярные выражения. Например: 1. acl naughty_sites url_regex -i sex 2. http_access deny naughty_sites 3. http_access allow valid_clients 4. http_access deny all [ ** И опять напоминаю -- не используйте номера строк!! ** ] Строка 1 настраивает связь между словом
"sex" и ACL-правилом под именем
"naughty_sites""; ключ url_regex
указывает на тип правила, т.е. оно проверяет совпадение между
шаблоном и URL. Ключ -i устанавливает режим поиска
без учёта регистра. Хммм... Думаю, вы задаёте себе вопрос...."как определить несколько регулярных выражений?" Что ж, ответ прост....вы можете их разместить в отдельном файле. Предположим, вы хотите фильтровать слова sex porn teen и блокировать доступ к тем URL, в которых они встречаются. Вы можете добавить их в файл (каждое слово на отдельной строке), назовём его: /etc/squid/bad_words.regex Теперь в "/etc/squid.conf" укажите следующее: acl bad-sites url_regex -i "/etc/squid/bad_words.regex" http_access deny bad_sites http_access allow valid_clients http-access deny all Это делает нашу жизнь намного проще! :-) В случае необходимости вы сможете добавлять в этот файл новые слова. Существует более простой способ фильтрации с использованием регулярных выражений и доменных имён -- это программа SquidGuard. Но об этом чуть позже..... Инициализация SquidТеперь мы переходим к более важной части -- запуску squid. К сожалению, если вы впервые столкнулись со squid, то вам придётся "перелопатить" несколько опций, используемых при его запуске. Большая часть ключей, как правило используемых при запуске squid, представлена в таблице.
А это полный список существующих ключей: Usage: squid [-dhsvzCDFNRVYX] [-f config-file] [-[au] port] [-k signal] -a port Установить номер HTTP-порта (по умолчанию: 3128). -d level Записывать отладочную информацию в stderr. -f file Использовать конфигурационный файл, вместо /etc/squid.conf -h Напечатать справочное сообщение. -k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse Разобрать [parse] конфигурационный файл, затем послать сигнал запущенной копии (исключая -k parse) и выйти. -s Включить запись в syslog. -u port Определить номер ICP-порта (по умолчанию: 3130), 0 - отключить. -v Показать номер версии. -z Создать swap-директории -C Не обрабатывать критические сигналы (fatal signals). -D Отключить начальные тесты DNS. -F Заново загрузить все мета-данные прежде, чем приступить к выполнению запросов. -N Запустить squid в не-демон режиме. -R Не устанавливать REUSEADDR на порт. -V Виртуальный хост httpd-акселератор. -X Включить отладочный режим. -Y Возвращать только UDP_HIT или UDP_MISS_NOFETCH при быстрой перезагрузке. Если вы запускаете squid первый раз, то запустите его под правами root'а с ключом "-z": squid -z Это создаёт кеш на диске. Теперь вы можете выполнить команду: squid Вот и всё!! Теперь в вашем распоряжении находится работающий proxy-сервер. Краткое введение: SquidGuardЧто такое SquidGuard?SquidGuard -- внешняя программа переадресации ("редиректор"), с помощью которой squid осуществляет фактическую пересылку пришедших к нему запросов. Задача SquidGuard'а -- лучшее управление процессом фильтрации, чем это делает сам Squid. Хочу сразу заметить, что использовать SquidGuard при построении простых фильтров не имеет смысла. УстановкаSquidGuard можно найти на http://www.squidguard.org/download (забавно, правда?). Этот сайт содержит много информации о том, как его настраивать. Как и Squid, SquidGuard можно скачать в двух форматах -- rpm и .tar.gz. Если ваш дистрибутив поддерживает пакеты RPM, установить его можно так: su - -c "rpm -i ./SquidGuard-1.2.1.noarch.rpm" Если же формат RPM не поддерживается, то можно скачать и откомпилировать исходники, вот так: tar xzvf ./SquidGuard-1.2.1.tgz ./configure make && make install Файлы будут установлены в "/usr/local/squidGuard/" НастройкаПрежде чем мы начнём править конфигурационный файл "/etc/squidGuard.conf", требуется внести небольшие изменения в конфигурационный файл нашего старого друга "/etc/squid.conf". Найдите в нём такое место: #redirect_program none Раскомментируйте строку и замените слово "none" на путь к главному файлу SquidGuard. Если не знаете, где он -- воспользуйтесь командой: whereis squidGuard после чего впишите нужные путь и имя файла. Выглядеть это будет примерно так: redirect_program /usr/local/bin/squidGuard Сохраните файл и перезагрузите squid: squid -k reconfigure Это заставит его заново перечитать конфигурационный файл. Хорошо. Теперь начинается самое интересное. Указав squid'у, что мы будем фильтровать приходящие к нему запросы с помощью внешней программы переадресации, мы должны определить соответствующие правила: Основной конфигурационный файл SquidGuard -- это "/etc/squidGuard.conf". Выглядит он примерно так: ------------------- logdir /var/squidGuard/logs dbhome /var/squidGuard/db src grownups { ip 10.0.0.0/24 # диапазон 10.0.0.0 - 10.0.0.255 # И user foo bar # идентификаторы foo и bar } src kids { ip 10.0.0.0/22 # диапазон 10.0.0.0 - 10.0.3.255 } dest blacklist { domainlist blacklist/domains urllist blacklist/urls } acl { grownups { pass all } kids { pass !blacklist all } default { pass none redirect http://localhost/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u } } ------------------- Теперь разберём каждую секцию отдельно: logdir /var/squidGuard/logs dbhome /var/squidGuard/db Первая строка указывает каталог, где будет размещаться файл журнала, и создаёт его, если он не существует. Вторая строка описывает каталог баз(ы) данных, в которых будут храниться имена запрещённых сайтов, регулярные выражения для фильтров и прочее. src grownups { ip 10.0.0.0/24 # диапазон 10.0.0.0 - 10.0.0.255 # И user foo bar # ident foo or bar } Этот блок настраивает сразу несколько параметров. Во-первых, src "grownups" определяет диапазон IP-адресов и пользователей, являющихся "членами" этого блока. Обычные "неопределенно-личные" идентификаторы "foo" и "bar" используются здесь в качестве примера. Следует заметить, что метка [TAG] user может использоваться, если идентифицирующий сервер [6] запущен на том же сервере, который перенаправляет запросы proxy-серверу, иначе оно будет недействительным. src kids { ip 10.0.0.0/22 # диапазон 10.0.0.0 - 10.0.3.255 } Этот раздел настраивает другой блок, называемый "kids". Он описывает только диапазон IP-адресов, без указания имён пользователей. Вы можете думать о grownups и kids, как о таких же именах ACL, определенных в "/etc/squid.conf". dest blacklist { domainlist blacklist/domains urllist blacklist/urls expression blacklist/expressions } Этот раздел кода важен, т.к. описывает список (dest), используемый конкретными фильтрами. В своей работе SquidGuard использует три основных способа фильтрации: 1. domainlist -- список доменов, каждый в отдельной строке, например: nasa.gov.org squid-cache.org cam.ac.uk 2. urllist -- список web-страниц с пропущенным префиксом "www.", например: linuxgazette.com/current cam.ac.uk/~users 3. expression -- слова (регулярные выражения) встречающиеся в URL: sex busty porn Последний блок кода: acl { grownups { pass all } kids { pass !blacklist all } default { pass none redirect http://localhost/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u } } Здесь, в разделе "grownups" acl-блока описывается разрешение на полный доступ к Интернет пользователям, входящим в группу "src grownups", вне зависимости от URL, наличия в их составе регулярных выражений и прочих ограничений, определённых в dest blacklist. Раздел "kids" разрешает пользователям, входящим в группу "src kids" получать результат любого запроса, за исключением подпадающих под правила из dest blacklists. В случае, если URL совпадает с одним из определений dest blacklists, запрос перенаправляется по адресу, определённому в секции default. В секцию default запрос перенаправляется в том случае, если его источник не принадлежит ни "grownups", ни "kids". При этом клиент попадает на web-страницу, , которая выглядит как страница с сообщением об ошибке. Переменные, приходящие вместе с командой переадресации, указывают тип запроса и другую информацию, которая может использоваться cgi-скриптом, например для создания специального сообщения об ошибке. Следует отметить, что для того, чтобы фильтрация работала, как минимум должен присутствовать следующий участок кода: default { pass none } С командой переадресации или без неё. Существует множество "навороченных" опций конфигурации, которые могут быть применены в этом файле. Примеры вы можете найти на http://www.squidguard.org/configuration. На этом введение в "основы" Squid и SquidGuard заканчивается. Дополнительную информацию можно найти по ссылкам, которые встречались в этой статье или на моём сайте: www.squidproxyapps.org.uk Keyfiles: удобный BASH-скрипт для резервного копированияДа, да. Я знаю, вы все думаете: "Что! Опять! Только не это! Ещё один скрипт для создания резервных копий!". Я пару раз слышал разговоры на эту тему в почтовой рассылке и подумал, почему бы и мне не поучаствовать в них.... Этот скрипт прост как "кусок хозяйственного мыла" [7] -- он использует конфигурационный файл (plain text), который содержит список файлов и директорий, с которых вы хотите сделать копии и упаковать в "за-gz-ипованный тарбол" в определённом месте. Те из вас, кто хорошо знаком с созданием скриптов на BASH'е найдут это немного забавным, но я надеюсь, что мои комментарии помогут тем, кто только пытается изучить программирование на BASH'е. ------------------- #!/bin/bash ################################################# #Keyfiles - tar/gzip configuration files # #Version: Версия 1.0 (черновик) # #Ackn: основан на идее Dave Turnbull # #Authour: Thomas Adam # #Date: Понедельник 28 мая 2001, 16:05 BST # #Website: www.squidproxyapps.org.uk # #Contact: [email protected] # ########################################Комментарии #Комментарии для Dave Turnbull. Чтобы он не заблудился :-). #объявление переменных configfile="/etc/keyfiles.conf" tmpdir="/tmp" wrkdir="/var/log/keyfiles" tarfile=keyfiles-$(date +%d%m%Y).tgz method=$1 #опции выбора операции submethod=$2 #дополнительные опции для "$1" quiet=0 #вывод отладочной информации (по умолчанию) cmd=`basename $0` #удаляем путь из имени файла optfiles="Usage: $cmd [--default (--quiet)] [--listconffiles] [--restore (--quiet)] [--editconf] [--delold] [--version]" version="keyfiles: Автор Thomas Adam, Версия 1.0 (Вторник 5 июня 2001, 23:42)" #проверка конфигурационного файла... if [ ! -e $configfile ]; then for beepthatbell in 1 2 3 4 5; do echo -en "\x07" done echo " " | mail -s "[Keyfiles]: отсутствует файл $configfile" $USER echo " [Ошибка!]: отсутствует файл $configfile" $USER exit -1 fi #проверяем существование рабочей директории, если её нет, то создаём [ ! -d $wrkdir ] && mkdir $wrkdir #проверка того, запущен ли скрипт без опций if [ -z $method ]; then echo $optfiles exit 0 fi #синтаксический разбор командной строки check_syntax () { case $method in --default) cmd_default ;; --listconffiles) cmd_listconffiles ;; --restore) shift 1 cmd_restore ;; --editconf) exec $EDITOR $configfile exit 0 ;; --delold) cd $wrkdir && rm -f ./*.old > /dev/null exit 0 ;; --version) echo $version exit 0 ;; --*|-*|*) echo $optfiles exit 0 ;; esac } #Вот теперь и начинается самое интересное..... #объявление функции используемой опцией "--default" cmd_default () { #пакуем все файлы, указанные в $configfile if [ $submethod ]; then tar -cZPpsf $tmp/$tarfile $(cat $configfile) &>/dev/null 2>&1 else tar -vcZPpsf $tmp/$tarfile $(cat $configfile) fi #если содержимое каталогов пусто...... if test $(ls -1 $wrkdir | grep -c -) = "0"; then mv $tmp/$tarfile $wrkdir exit 0 fi for i in $(ls $wrkdir/*.tgz); do mv $i $i.old done mv $tmp/$tarfile $wrkdir } #вывести список, содержащийся в $configfile cmd_listconffiles () { sort -o $configfile $configfile cat $configfile exit 0 } #восстановить файлы...... cmd_restore () { cp $wrkdir/keyfiles*.tgz / cd / #проверка флага тишины :-) if [ $submethod ]; then tar vzxfmp keyfiles*.tgz &>/dev/null 2>&1 rm -f /keyfiles*.tgz exit 0 else tar vzxfmp keyfiles*.tgz rm -f /keyfiles*.tgz exit 0 fi } #вызов головной функции check_syntax ------------------- Следует заметить, что основные изменения, которые вы можете делать в скрипте -- это изменять три переменные: configfile="/etc/keyfiles.conf" tmpdir="/tmp" wrkdir="/var/log/keyfiles" Тем не менее, мой скрипт достаточно "интеллектуален", чтобы проверить существование рабочей директории и в случае необходимости создать её. Вы должны убедится, что установили для файла со скриптом соответствующие права доступа: chmod 700 /usr/local/bin/keyfiles Самый важный файл -- конфигурационный. В моём случае он выглядит так: ------------------- /etc/keyfiles.conf /etc/rc.config /home/*/.AnotherLevel/* /home/*/.fvwm2rc.m4 /home/solent/ada/* /root/.AnotherLevel/* /root/.fvwm2rc.m4 /usr/bin/header.sed /usr/bin/loop4mail /var/spool/mail/* ------------------- Основные функции в скрипте базируются на утилите tar, которая использует конфигурационный файл, точнее шаблоны имен файлов [wildcards][8] указанные в нём. Обратите внимание, что каждый раз, когда скрипт выполняется, создаётся копия последнего архива, т.е. файл "keyfiles-DATE.tgz" (если он, конечно, существует) переименовывается в "keyfiles-DATE.tgz.old" прежде, чем будет создан новый. Всё, что вам нужно для восстановления данных из архива, мой скрипт уже знает -- последний созданный архив имеет расширение ".tgz". Благодаря этой особенности, я добавил в скрипт ещё одну опцию, которая удаляет из каталога $workdir все старые резервные копии -- "--delold". Для того, чтобы создать резервную копию, введите: keyfiles --default Если вы не хотите, чтобы в процессе работы скрипт выдавал какую-либо информацию, воспользуйтесь вторым ключом -- "--quiet"[9]: keyfiles --default --quiet Думаю, названия остальных опций программы говорят сами за себя. Предложенный вашему вниманию скрипт резервного копирования далёк от совершенства, существуют более удачные аналоги. Но, в любом случае, замечания и пожелания по поводу его работы приветствуются!! Обзор программы: NeditВернёмся назад, в те дни, когда когда прославленный основатель этого специализированного журнала John Fisk писал для этой колонки. Другой автор, Larry Ayers, имел обыкновение делать обзоры программ. Он кратко упомянул о программе Nedit. Но никогда рассматривал её более подробно. В таком случае, это сделаю я :-) Вот уже три года я использую Nedit. Всю работу я делаю в нём -- когда нахожусь в "иксах", как сейчас. Внешний вид Nedit вы можете увидеть на этом скриншоте. Эта программа обладает огромными возможностями. Наиболее популярная из них -- синтаксическая подсветка для языков программирования. Вот их список:
Если случается так, что вы пишете на языке программирования, который не перечислен выше, то вы можете сами написать для него шаблоны в виде регулярных выражений. Nedit также предоставляет развитый механизм поиска и замены, использующий всё те же шаблоны (регулярные выражения) как с учётом регистра, так и без него. Типичный пример окна диалога поиска/замены выглядит так: В нём имеется возможность формировать сложные запросы. Каждый из пунктов меню (имеется ввиду меню 1-го уровня), может быть "оторван" и расположен в отдельном окне. Это может быть полезно, если какой-то из пунктов приходится вызывать очень часто. Программа может быть загружена со множеством ключей, большинство из которых я использую, но мне ещё не удалось найти применение для всех опций, с которыми может быть запущен Nedit. Если вам этого мало, то учтите, что Nedit позволяет писать свои собственные макросы, так что вы можете сами создавать "супернавороченные" функции. Рекомендую эту программу всем и каждому. В то же время, не желая изобретать новый велосипед в стиле Emacs/Vim, я всё-таки считаю Nedit реальной заменой и альтернативой "X11-Emacs", пожирающему слишком много оперативной памяти!! :-) Вы можете скачать Nedit отсюда: www.nedit.orgПопробуйте и наслаждайтесь им :-) "А напоследок я скажу..."Ну что ж, пора и этому месяцу закончиться -- я не ожидал, что он будет таким длинным!! Мой академический год более-менее приближается к концу и в последних числах мая меня ждут экзамены. После них я буду свободен целое лето, достаточно, чтобы привести в порядок все мои идеи относительно Linux'а, поселившиеся у меня в мозгу ( -- после того, как Ben Okopnik промыл его) :-) До следующего месяца. Удачи и берегите себя. Любые комментарии и предложения можно отослать мне, не поленившись и щелкнув по ссылке: Примечания переводчика[Если у вас возникнет вопрос: "А почему ссылки не по порядку?", отвечу: "Вам шашечки или чтобы ехать?" ;-)][1]Перевод Р. Гальпериной, сборник рассказов Эдгара Аллана По, Москва, 1980, "Художественная литература". [2] LWM -- Linux Weekend Mechanic. [3] Для rpm-совместимых дистрибутивов: rpm -ivh полное_имя_пакета_squid Для обладателей ALT Linux Master 2.0 или/и Debian: apt-get install squid [4]Для этого достаточно "поиграть" с настройками конфигурационного скрипта configure (--prefix, --exec-prefix и т.п.). [5] Если вы с английским на "ты" или хотя бы на "вы". [6] Не могу сказать с уверенностью на все "сто", но, по моему, речь идёт о DNS-сервере. [7] Вообще-то я не уверен в том, есть ли в Объединенном Королевстве хозяйственное мыло. 8-) [8] Цитата из "Инсталляция Linux и первые шаги", автор М. Уэлш: "Ключевое свойство большинства оболочек Unix -- это способность ссылаться сразу более, чем на один файл, используя специальные символы ... так называемые "дикие карты" (wildcards)..." [9] Только не спутайте очерёдность ключей. [10] Автор немного забыл обновить свои автобиографические данные. Судя по всему, теперь он "обычный" студент "обычного" университета. И не исключено, что времени для игры на пианино у него сейчас меньше обычного. В любом случае спасибо ему за то, что нашёл время возобновить работу колонки LWM. 8-) [11] Хм... Проще будет воспользоваться командой: rpm -q squid [12]Либо /etc/squid/squid.conf [13] В скрипт пришлось внести небольшие изменения -- вряд ли вам нужно, чтобы он отсылал пять одинаковых сообщений о том, что не найден конфигурационный файл "/etc/keyfiles.conf". Thomas AdamМеня зовут Thomas Adam. Мне 18, и в настоящее время я готовлюсь к A-Levels (= вступительные экзамены в университет). Живу на маленькой ферме в округе Дорсет в Англии. Я большой энтузиаст Linux, и помогаю в школе со всеми делами, связанными с его повседневным использованием. Linux использую уже около шести лет. Когда я не работаю с Linux, то играю на пианино, люблю пешие прогулки и кататься на мотоцикле.[10] Copyright (C) 2002, Thomas Adam.
|
||||||||||||||||
Вернуться на главную страницу |