Оболочки → Регулярные выражения внутри bash
Занялся я как-то оптимизацией скорости работы своего скрипта. Алгоритм был уже вовсю отполирован, распараллелен и выполнялся уже более чем за сносное время. Лишь изредка, облизывая части кода, шебурша места, использующие внешние команды и приводя в благоухающую гармонию встроенными командами оболочки, обращал внимание на застоявшуюся роль труженика — потокового редактора sed, всё так же старательно обрабатывавшего регулярные выражения в моём расцветающем скрипте.
Существует множество мест, где люди грызут друг другу глотки и отстаивают честь своего любимого редактора в грозной войне sed vs awk vs grep vs …
Тем не менее, большинство знает, что замена вызовов внешних команд на внутренние зачастую значительно ускоряет критические места скрипта, заставляет улыбаться автора, тратя меньше его времени на ожидание за чашкой кофе «пока закончится обработка». Это, в некотором смысле, некоторая неадекватность, если он знает язык Си и может значительно ускорить программу переписыванием кода на Сях; но не следует сразу записывать его в сумасшедшие — некоторые скрипты довольно объемны для переноса кода и используют различные команды, заставляя код пухнуть от нахальных вставок системных вызовов exec().
Итак, как бы то ни было, разработчики bash третьей версии наделили нас возможностью пользоваться встроенными регулярными выражениями внутри команды [[ при помощи =~.
Большинство результатов на гугление про такую способность bash выносят один и тот же вердикт — «пользоваться регулярными выражениями внутри bash — моветон».
В данной статье я попытаюсь вынести вердикт, насколько всё плохо (а оно действительно как-то нехорошо).
Существует множество мест, где люди грызут друг другу глотки и отстаивают честь своего любимого редактора в грозной войне sed vs awk vs grep vs …
Тем не менее, большинство знает, что замена вызовов внешних команд на внутренние зачастую значительно ускоряет критические места скрипта, заставляет улыбаться автора, тратя меньше его времени на ожидание за чашкой кофе «пока закончится обработка». Это, в некотором смысле, некоторая неадекватность, если он знает язык Си и может значительно ускорить программу переписыванием кода на Сях; но не следует сразу записывать его в сумасшедшие — некоторые скрипты довольно объемны для переноса кода и используют различные команды, заставляя код пухнуть от нахальных вставок системных вызовов exec().
Итак, как бы то ни было, разработчики bash третьей версии наделили нас возможностью пользоваться встроенными регулярными выражениями внутри команды [[ при помощи =~.
Большинство результатов на гугление про такую способность bash выносят один и тот же вердикт — «пользоваться регулярными выражениями внутри bash — моветон».
В данной статье я попытаюсь вынести вердикт, насколько всё плохо (а оно действительно как-то нехорошо).
Системное администрирование → bash: Бэкап без лишнего ПО из песочницы
Бэкап важной информации — каждый системный администратор сталкивается с такой задачей. Задача казалось бы тривиальная и у многих читателей интереса не вызовет. Но, например, мне бы такая статья в определенный момент помогла бы весьма сильно, поэтому считаю, что этой статье быть.
Задача: Бэкап данных в локальную директорию и на отдельный сервер, с использованием минимума стороннего ПО, логированием и оповещением администратора в jabber при сбоях. Все основные функции большинства ПО для автоматического бэкапа, но без установки оного, а следовательно без его багов (что, собственно, и привело к подобной идее).
Задача: Бэкап данных в локальную директорию и на отдельный сервер, с использованием минимума стороннего ПО, логированием и оповещением администратора в jabber при сбоях. Все основные функции большинства ПО для автоматического бэкапа, но без установки оного, а следовательно без его багов (что, собственно, и привело к подобной идее).
Системное администрирование → Автоматизация обработки видео-файлов с web-камер средствами shell из песочницы
Понадобилось начальству в своё время организовать своими силами видео-наблюдение за некоторыми вещами и уложиться в минимальное финансирование. Задача автоматизировать это легла на плечи системного администратора, то есть – меня.
Дано: N – видео-камер D-Link 2102, физический двух-юнитовый сервер под сервер видео-наблюдения и удаленное файло-хранилище.
Результатом должна быть возможность пускать некоторых пользователей на сервер видеонаблюдения в онлайн режиме и организовать архив видеозаписей.
Под катом несколько скриптов, которые сильно помогли мне понять, как лучше писать код, зачем нужны многие вещи и как они решаются, а так же навести порядок в своей голове и очень надеюсь, что они помогут кому-то еще.
Проект писался достаточно сложно — настолько сильно я shell(bash) скрипты не изучал — не было надобности до этого.
Но, когда задача поставлена и в голове есть алгоритм решения — все скрипты были переделаны так, чтобы читая их через пол года у меня и моего преемника не было вопросов и желания переписать все с нуля.
UPD: пост периодически обновляется.
Дано: N – видео-камер D-Link 2102, физический двух-юнитовый сервер под сервер видео-наблюдения и удаленное файло-хранилище.
Результатом должна быть возможность пускать некоторых пользователей на сервер видеонаблюдения в онлайн режиме и организовать архив видеозаписей.
Под катом несколько скриптов, которые сильно помогли мне понять, как лучше писать код, зачем нужны многие вещи и как они решаются, а так же навести порядок в своей голове и очень надеюсь, что они помогут кому-то еще.
Проект писался достаточно сложно — настолько сильно я shell(bash) скрипты не изучал — не было надобности до этого.
Но, когда задача поставлена и в голове есть алгоритм решения — все скрипты были переделаны так, чтобы читая их через пол года у меня и моего преемника не было вопросов и желания переписать все с нуля.
UPD: пост периодически обновляется.
Linux для всех → Сохранение flash-video из кэша браузера
Представьте себе, вот открыли вы в браузере с десяток порно видео-роликов, они тем временем успели скачаться и вдруг оказалось, что браузер нужно закрывать. Что делать?
Сохранить все открытые в данный момент в браузере flv-видеоролики в отдельную директорию можно вот таким простым однострочным скриптом.
Сохранить все открытые в данный момент в браузере flv-видеоролики в отдельную директорию можно вот таким простым однострочным скриптом.
copy-cached-flv.sh
#!/bin/bash
lsof -n | grep /tmp/Flash | \
awk '{line = "/proc/" $2 "/fd/" $4; sub("[^0-9]*$","",line); print line}' | \
xargs -I '{}' cp -v '{}' -t "$@" --backup=t
Подкасты → Онлайн-концерт в облаках
Ресурс Appleinsider.ru запускает новый, не имеющий аналогов в российском интернет-сегменте проект по онлайн-трансляции живых выступлений как молодых музыкальных коллективов, так и именитых музыкантов. Периодичность мероприятия — около 2-х трансляций в месяц.
Первопроходцами 6 декабря стали Федор Чистяков & F4BAND (экс-солист группы НОЛЬ). Во время прямого эфира было около 300 человек, которые смогли оценить чистый студийный звук и атмосферу живого концерта.
Для этой трансляции компания Clodo выделила нам свои мощности и канал шириной 500 мегабит/секунду. Для довольно качественного битрейта потока в 128 килобит/сек это означало 4000 клиентов «в вакууме». Мы предполагали, что придет до 2000 слушателей и перестраховались, однако на этот раз не удалось достичь договоренности с партнерами и наши оценки аудитории оказались сильно заниженными. Попытка привести заинтересованный народ с хабра закончилась баном хабратоварища Dudlik.
Тем не менее, нам довольно успешно удалось провести концерт. Вкратце о технической реализации — мы использовали программу Icecast2 на нескольких серверах, с балансировкой нагрузки с помощью самописного bash-скрипта. Подробнее под катом.
Первопроходцами 6 декабря стали Федор Чистяков & F4BAND (экс-солист группы НОЛЬ). Во время прямого эфира было около 300 человек, которые смогли оценить чистый студийный звук и атмосферу живого концерта.
Для этой трансляции компания Clodo выделила нам свои мощности и канал шириной 500 мегабит/секунду. Для довольно качественного битрейта потока в 128 килобит/сек это означало 4000 клиентов «в вакууме». Мы предполагали, что придет до 2000 слушателей и перестраховались, однако на этот раз не удалось достичь договоренности с партнерами и наши оценки аудитории оказались сильно заниженными. Попытка привести заинтересованный народ с хабра закончилась баном хабратоварища Dudlik.
Тем не менее, нам довольно успешно удалось провести концерт. Вкратце о технической реализации — мы использовали программу Icecast2 на нескольких серверах, с балансировкой нагрузки с помощью самописного bash-скрипта. Подробнее под катом.
*nix → bash скрипт с поддержкой длинных (gnu-style) опций
Предстала на первый взгляд тривиальная задача: написать скрипт с различными опциями при запуске. Допустим нужно обработать всего две опции: name и dir. И задача действительно тривиальна при условии, что опции у нас короткие. Но если есть жгучее желание использовать длинные опции, то пиши пропало: getopts, который планировалось использовать изначально, в bash совсем на это не годится. Ненормальное программирование → Программирование в стиле Теремка
Перевод старался делать точным, насколько это возможно, и изменил лишь название компании, которая используется как пример, но по сфере деятельности и принципу работы в рознице схожа с той, что в оригинале.
Каждый блинчик в меню Теремка — всего лишь набор из примерно 8ми ингредиентов. С такой простой периодической таблицей элементов компания заработала 1.9 млрд долларов в прошлом году (нет, не Теремок, а всё-таки Taco Bell).
Чем больше я программирую и проектирую системы, тем больше я понимаю, что в множестве случаев можно достигнуть желаемого результата банально сочетая базовый набор инструментов, данный нам Unix. В конце концов, функциональность — это ценность, а код — это задолженность. Это утверждение обратно абсурднму тренду DevOps (разработчико-админов), исходя из которого системные администраторы начинают писать юнит-тесты и прочие вещи, чтобы помочь разработчикам, и гласит что программирование в стиле Теремка это разработчики, которые знают достаточно об администрировании (и Unix в целом) так, что они не изобретают велосипед, и приходят к простым и масштабируемым решениям.
Вот конкретный пример: представьте, вам нужно скачать и записать на диск миллионы веб-страниц для дальнейшей обработки. Как это сделать? Детки-крутышки скажут, что нужно написать распределённый паук на Clojure и запустить на EC2, коммуницируя с помощью SQS или 0MQ.
Каждый блинчик в меню Теремка — всего лишь набор из примерно 8ми ингредиентов. С такой простой периодической таблицей элементов компания заработала 1.9 млрд долларов в прошлом году (нет, не Теремок, а всё-таки Taco Bell).Чем больше я программирую и проектирую системы, тем больше я понимаю, что в множестве случаев можно достигнуть желаемого результата банально сочетая базовый набор инструментов, данный нам Unix. В конце концов, функциональность — это ценность, а код — это задолженность. Это утверждение обратно абсурднму тренду DevOps (разработчико-админов), исходя из которого системные администраторы начинают писать юнит-тесты и прочие вещи, чтобы помочь разработчикам, и гласит что программирование в стиле Теремка это разработчики, которые знают достаточно об администрировании (и Unix в целом) так, что они не изобретают велосипед, и приходят к простым и масштабируемым решениям.
Вот конкретный пример: представьте, вам нужно скачать и записать на диск миллионы веб-страниц для дальнейшей обработки. Как это сделать? Детки-крутышки скажут, что нужно написать распределённый паук на Clojure и запустить на EC2, коммуницируя с помощью SQS или 0MQ.
Системное администрирование → Управление большой группой хостов при помощи http запросов
Допустим мы имеем 100-150 клиентских машин (ну например информационных терминалов) и нам нужно периодически некоторой их части посылать команды на выполнение (обновление, очистка, перезагрузка и т.д.), можно использовать туннели l2tp, можно использовать ssh, но мы поступим проще! Будем использовать обычные get запросы к нашему серверу.

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

В данной статье мы рассмотрим самый просто пример реализации, но он легко доделывается и переделывается под личные нужды.
Системы управления версиями → vcprompt или сахарок для консоли
Данный зверь будет полезен тем, кто не пользуется GUI утилитами при работе с git, mercurial и т.д., а чувствует себя комфортно работая с ними из консоли.
vcprompt.com — python скрипт, который будет выводить основную информацию по версии VCS в текущей директории, если такова есть. Как то название VCS, текущую ветку, были ли изменения с последнего коммита и ещё несколько параметров, которые можно задать в формате вывода.
vcprompt.com — python скрипт, который будет выводить основную информацию по версии VCS в текущей директории, если такова есть. Как то название VCS, текущую ветку, были ли изменения с последнего коммита и ещё несколько параметров, которые можно задать в формате вывода.
Linux для всех → Как я делаю скриншоты в Linux
В этой заметке хочу увековечить свой велосипед, который я изобрёл для удобного создания скриншотов. Да, я знаю о существовании таких программ как shutter, но все они по тем или иным причинам мне неудобны, а так как был интерес и время, я занялся этой проблемой.