Блоги сисадминов

BASH Tips&Tricks #0008: Голову с плеч!

Да-да, забудьте наконец об этой странной утилите, которая ещё и работает «как-то иначе» в некоторых менее популярных, чем Linux, реализациях *nix!
Почему даже одна head вам ни к чему, не говоря уже о двух и более?
Да потому что у нас есть sed, который умеет всё или почти всё, но остаётся при этом простым и чрезвычайно быстрым, что позволяет ему заменять целую тучу атомарных nix'овых утилит.
Ну вот, например…
Хотите первое поле 2-й строки CSV-файла, где разделителем служит (сюрприз!) — запятая?
Да нет ничего проще, чем сделать это одной командой, безо всяких глупых head'ов и медлительных awk, — вот:

sed -n '2{ s/,.*$//; p; q }' FILE

Да, и никогда не забывайте про жадный разбор регулярных выражений и фигурные скобки — данный пример наглядно показывает, чем бывает полезно и то, и другое.

Пожалуй, совсем не очевидным выглядит решение с помощью sed такой элементарной задачи, как «получить первые 5 строк файла»:

sed -n '1,5p; 6q' FILE

— с этим куда лучше справится head -5

Но, например, чуть менее элементарную задачу «вывести строки файла с 3-й по 10-ю, исключая 7-ю», sed решает куда нагляднее и элегантнее, нежели связка из доисторического локомотива head и «прицепного вагона» sed вместе:

sed -n '7b; 3,10p; 11q'


sed'у очень сложно заменить tail, поскольку не умеет вести отсчёт от конца файла, но head он заменяет весьма успешно.
Поэтому в следующий раз, когда вы подумаете использовать sed на вагонной сцепке c head, подумайте ещё раз и сделайте «состав» немного короче…

BASH Tips&Tricks #0007: Организуем "многозадачное" сжатие

К сожалению, утилита xz до сих пор не умеет и уже, как видно, никогда не научится сжимать в несколько потоков (см. соотв комментарий в man-странице). 7z с некоторыми типами алгоритмов, в т.ч. с горячо любимым мной PPM, тоже не умеет распараллеливаться (во всяком случае ключ -mmt не даёт желаемого результата).
Но ведь можно осуществить сжатие нескольких файлов параллельно несколькими процессами! Единственная «хитрость» здесь будет заключаться в том, что для получения определённого гарантированного результата («всё сжалось»), нужно всё-таки подождать, чтобы все процессы завершились к моменту дальнейшей обработки файлов или к моменту, когда скрипт должен завершиться.

Всё это делается примерно в таком стиле:

for f; do
 xz $f &
 pids+=" $!"
done

for pid in $pids; do
 wait $pid
done


Время выполнения последнего цикла будет соответствовать времени выполнения самого «длительного» процесса сжатия, а для тех процессов, которые уже завершатся к моменту, когда до них дойдёт очередь «ожидания», команда wait просто отработает как NOP (no-operation в intel assembler :)).
Заметьте, что между двумя циклами можно вставить практически всё, что угодно, так что одновременно со сжатием можно делать и ещё что-нибудь полезное.

Схема DUAConfigProfile (RFC4876) для OpenLDAP

Поскольку уже конвертированной схемы не нашлось, выкладываю свою.
Схема в частности пригодится для интеграции SUDO и LDAP при дословной реализации штатного README на эту тему. Хотя обязательной её назвать нельзя, поскольку в действительности SUDO работает с LDAP-каталогом и без неё.


Читать дальше

Microsoft спамит

Чудное письмо пришло сегодня:

"Отдел корпоративного лицензирования корпорации Майкрософт случайным образом выбрал 50000 
из более чем 3000000 участников программы корпоративного лицензирования для участия в опросе. 
Ваши ответы на вопросы в рамках данного опроса позволят нам узнать, каким образом Вы используете 
раздел лицензий веб-сайта VLSC (Volume Licensing Service Center), а также запланировать дальнейшие 
улучшения для более эффективного удовлетворения Ваших потребностей.  Предполагается, что опрос
займет не более 10 минут. Опрос будет доступен до 23:59 (стандартное тихоокеанское время) 7 мая 
(понедельник). Щелкните ссылку* ниже, чтобы перейти к опросу."

Ура, мне сделали одолжение и предложили поучаствовать в опросе. Похоже на письма вроде «Вы выиграли в лотерею миллион долларов».
А Вы стали бы «Щелкать ссылку»?

Менеджер пакетов для FreeBSD или немного о проекте pkgng

Исторически сложилось так, что во FreeBSD два пути установки ПО. Первый идеологически правильный, но уж очень медленный, это сборка ПО из коллекции портов. Плюсы этого метода в большая гибкость и уверенность в том что установлены самые свежие версии, минус большие затраты времени. Настройка сервера в среднем занимает несколько дней, а если уж десктоп настраивать, так и неделю провозиться можно.
Второй путь — устанавливать готовые пакеты, плюсы -скорость развертывания… И на этом плюсы заканчиваются.Остаются сплошные минусы, неактуальный софт, конфликты версий и прочие радости.
Отдельный вопрос, это обновление ПО.
В дистрибутивах Linux эти вопросы решаются с помощью менеджеров пакетов apt-get, yum и т.п. Проект pkgng призван решить эту задачу в FreeBSD.


Читать дальше

Простой загрузчик таблицы маршрутизации, он же "пример на массивы"

Да, я в курсе, что есть некие другие средства для того, чтобы делать тоже самое.
Тем не менее, есть у меня некое подозрение, что мой скрипт делает это наиболее наглядным, прямолинейным и безопасным способом.
Собственно, он даже и вовсе ничего не меняет, он ведь просто «печатает» команды, которые нужно выполнить для того, чтобы привести текущую таблицу маршрутизации в полное соответствие с сохранённой. Сами команды пишутся на STDOUT, редкие отладочные сообщения — на STDERR.

Читать дальше

Как настроить прогноз погоды на IP телефоне Grandstream GXP 2110

Точнее на любых телефонах Grandstream GXP серии. В настройках нужно указать город для которого будет выводится прогноз, но нужно забить код города. Где его взять? Как оказалось опытным путем на сайте weather.aol.com. На сайте вводим в поле «Get Weather For:» название города по буржуйски, ищем свой город, тыкаем и видим ссылку вида
http://weather.aol.com/forecast/todays/russia/tambovskaya/tambov/id/rsxx0209

rsxx0209 и есть нужный код. Забиваем его в настройках:
Как настроить прогноз погоды на IP телефоне Grandstream GXP 2110
Заодно указываем, что прогноз нужен в цельсиях и применяем. Должно обновится через пару секунд.

Реестр номеров «Россвязи»

На хабре нашел интересный топик, про определение принадлежности номера телефона к оператору и региону, что будет полезно в работе. В теме есть ссылка на сайт «Россвязи», но там база в html формате, что не очень удобно. Я ее скачал и перевел в Excel формат и заодно в sql скрипт для вставки в MySQL базу. Может еще кому нужно. Хочу прикрутить к asterisk статистике.


Читать дальше

За что я люблю swatch?

И почему это не швейцарские часы, а вещь, которая гораздо проще, дешевле и надёжнее…
Хорошо, вот вам достаточно доходчивое объяснение.
1) Смотрим, что у нас в $HOME/.swatchrc:

watchfor /VZ QUOTA: disk softlimit exceeded/
 exec ssh my-pc zenity --info --text "$*"

2) Пишем команду:

$ swatch --daemon -t /var/log/messages

3) Видим сотню открывшихся одновременно окон zenity на своём my-pc'шнике :)

К чему это я?
Да пожалуй к тому, что если бы все OpenSource-утилиты были столь же просты и прямолинейны, как swatch, завтра бы уже наступил рай на Земле (а послезавтра он уже всем надоел бы и захотелось чего-нибудь нового).
Просто почитайте документацию к тому же logwatch, сравните её с документацией swatch и сделайте правильный выбор!

P.S. Частота выполнения действий (exec, mail и пр.) конечно же настраивается, то есть совершенно необязательно реагировать на все однотипные сообщения в логе — для этого в swatchrc можно задать threshold
Блоги