В недавно опубликованной статье «Три наблюдения о командной строке и путях в файловой системе» были рассмотрены некоторые особенности интерпретации командной строки оболочками в операционных системах Windows и Linux. Первое наблюдение было о том, что командные оболочки SH/BASH, в отличие от COMMAND/CMD, выполняют предварительную обработку параметров, содержащих шаблоны имён файлов. А в этой небольшой заметке приводится ещё одно наблюдение, демонстрирующее важность учёта предварительной обработки параметров-шаблонов командной оболочкой.
Запуск внешних процессов в Scala
5 min
8.7KВведение
В одном из моих домашних проектов требовалось написать небольшой менеджер внешних процессов. Приложение должно было уметь запускать внешний демон, периодически контролировать его состояние, когда нужно выключать, включать, менять настройки и т.д. Существуюший функционал в Java для подобных задач весьма скуден, а так как я одновременно разбирался со Scala'ой, то решил посмотреть: как у нее дела с этим. И я был приятно удивлен: Scala предлагает по моему мнению неплохое API для работы с внешними процессами.
В этой статье я хотел бы рассказать об этом подробнее.
+14
Как я в сериалы в консоли смотрю / bash-скриптинг
5 min
10KВы любите смотреть фильмы? Я — да: «Теория большого взрыва», «The IT Crowd», разное аниме… Все это очень затягивает.
Для просмотра всего этого добра я пользуюсь консольной версией самого всеядного медиаплеера mplayer. (Давайте воздержимся от холивара по поводу красноглазия и GUI vs консоль) Но вот незадача, для каждой новой серии приходится заново набирать длинную команду вроде такой:
Ясное дело, что я не набираю всю эту простыню с нуля, а просто стираю бэкспейсом до номера серии, пишу новый номер и табом дополняю до конца имени файла. Но это ведь долго и неудобно, можно промахнуться и стереть лишнего.
А еще часто смотрится несколько сериалов параллельно, по мере выхода новых серий. И помнить, на какой серии я остановился в прошлый раз, и с какими параметрами и ключами запускал mplayer, становится затруднительно. И поэтому я решил написать себе на шелле простую запускалку плеера, которая будет запоминать параметры, номер последнего просмотренного эпизода и уметь подставлять номер следующего в команду запуска.
Для просмотра всего этого добра я пользуюсь консольной версией самого всеядного медиаплеера mplayer. (Давайте воздержимся от холивара по поводу красноглазия и GUI vs консоль) Но вот незадача, для каждой новой серии приходится заново набирать длинную команду вроде такой:
$ mplayer -ass -subcp cp1251 имя_сериала_01_еще_какая_то_чушь.mkv
Ясное дело, что я не набираю всю эту простыню с нуля, а просто стираю бэкспейсом до номера серии, пишу новый номер и табом дополняю до конца имени файла. Но это ведь долго и неудобно, можно промахнуться и стереть лишнего.
А еще часто смотрится несколько сериалов параллельно, по мере выхода новых серий. И помнить, на какой серии я остановился в прошлый раз, и с какими параметрами и ключами запускал mplayer, становится затруднительно. И поэтому я решил написать себе на шелле простую запускалку плеера, которая будет запоминать параметры, номер последнего просмотренного эпизода и уметь подставлять номер следующего в команду запуска.
+35
Файл⇨строка или активность работы над файлом
19 min
2.2KБольшинство разработчиков знакома с таким продуктом, как визуализатор code_swarm (на google code). Как минимум каждый третий наверняка выгружал для него лог и создавал видео, которое визуализирует процесс разработки приложения, в котором видно активность программистов. Ну и конечно каждый второй видел видео подобного рода. Практически все эти видео делались на срезе отношения программист⇨файл.
В этой статье будет описан процесс формирования лога в срезе отношения файл⇨строка, то есть с генерированное видео будет демонстрировать активность работы над файлом.
Кому это интересно под прошу под кат.
В статье будет использованы:
В этой статье будет описан процесс формирования лога в срезе отношения файл⇨строка, то есть с генерированное видео будет демонстрировать активность работы над файлом.
Кому это интересно под прошу под кат.
В статье будет использованы:
- Git — VCS
- code_swarm — визуализатор истории репозиториев.
- gource — визуализатор истории репозиториев.
- Эмулятор среды linux в Windows или UNIX OS (с git уже идет для win эмулятор msysgit)
- MEncoder — свободный кодировщик видео
- ffmpeg — программа для конвертации видео с использованием различных кодеков.
+40
30 лет работы сисадмином
10 min
49KSandra Henry-Stocker (Unix Dweeb, в данный момент работает в компании TeleCommunication Systems, разрабатывающей инновационные технические решения).
Оглядываясь в прошлое, спустя более 30 лет работы системным администратором Unix, я могу сказать, что это был долгий и интересный путь. В эти годы я конечно не выполняла одно и тоже. Развитие технологий приводили к невероятным изменениям в моей работе. Это были впечатляющие улучшения в “железе”, которое я обслуживала, и изобретение новых программных инструментов, которые я изучала и применяла на практике. На протяжении многих лет я получала невероятное наслаждение от того, насколько много работы я могла сделать в командной строке для выявления и устранения различных проблем и понимания того, как наилучшим образом обеспечить защиту данных моих работодателей. В течении 30 лет я работала с удивительными людьми, при этом была уволена однажды, а также узнала много нового о том, что работает и не работает, как с технической точки зрения, так и с точки зрения карьерного роста.
Оглядываясь в прошлое, спустя более 30 лет работы системным администратором Unix, я могу сказать, что это был долгий и интересный путь. В эти годы я конечно не выполняла одно и тоже. Развитие технологий приводили к невероятным изменениям в моей работе. Это были впечатляющие улучшения в “железе”, которое я обслуживала, и изобретение новых программных инструментов, которые я изучала и применяла на практике. На протяжении многих лет я получала невероятное наслаждение от того, насколько много работы я могла сделать в командной строке для выявления и устранения различных проблем и понимания того, как наилучшим образом обеспечить защиту данных моих работодателей. В течении 30 лет я работала с удивительными людьми, при этом была уволена однажды, а также узнала много нового о том, что работает и не работает, как с технической точки зрения, так и с точки зрения карьерного роста.
Профессия и все с ней связанное меняется драматичным образом, но она всегда приносила и будет приносить мне море удовольствия.Вот мои размышления об изменениях, которые я увидела и тех, которые еще увижу.
+37
10 трюков в командной строке, о которых вы не знали. Честное слово.
5 min
21KTranslation
1. Простой способ перехватить вывод и ошибки
Хотите направить stdout и stderr в один файл?
command &> fileМожет вы разбираетесь в некой программе при помощи strace, и желали бы видеть системные вызовы вместе с ошибками программы?
strace badapp &> errors_and_output
Плюсы: легко запоминается, и проще чем
+12
Частые ошибки программирования на Bash
9 min
95KTranslation
Качество скриптов, используемых для автоматизации и оптимизации работы системы, является залогом ее стабильности и долголетия, а также сохраняет время и нервы администратора этой системы. Несмотря на кажущуюся примитивность bash как языка программирования, он полон подводных камней и хитрых течений, способных значительно подпортить настроение как разработчику, так и администратору.
Большинство имеющихся руководств посвящено тому, как надо писать. Я же расскажу о том, как писать НЕ надо :-)
Данный текст является вольным переводом вики-страницы «Bash pitfalls» по состоянию на 13 декабря 2008 года. В силу викиобразности исходника, этот перевод может отличаться от оригинала. Поскольку объем текста слишком велик для публикации целиком, он будет публиковаться частями.
Большинство имеющихся руководств посвящено тому, как надо писать. Я же расскажу о том, как писать НЕ надо :-)
Данный текст является вольным переводом вики-страницы «Bash pitfalls» по состоянию на 13 декабря 2008 года. В силу викиобразности исходника, этот перевод может отличаться от оригинала. Поскольку объем текста слишком велик для публикации целиком, он будет публиковаться частями.
+73
Частые ошибки программирования на Bash (продолжение)
6 min
38KTranslation
Продолжаю знакомить сообщество с переводом Bash Pitfalls.
Часть первая.
Первоначальная публикация перевода.
Нельзя читать из файла и писать в него в одном и том же конвейере. В зависимости от того, как построен конвейер, файл может обнулиться (или оказаться усечённым до размера, равному объёму буфера, выделяемого операционной системой для конвейера), или неограниченно увеличиваться до тех пор, пока он не займёт всё доступное пространство на диске, или не достигнет ограничения на размер файла, заданного операционной системой или квотой, и т.д.
Часть первая.
Первоначальная публикация перевода.
11. cat file | sed s/foo/bar/ > file
Нельзя читать из файла и писать в него в одном и том же конвейере. В зависимости от того, как построен конвейер, файл может обнулиться (или оказаться усечённым до размера, равному объёму буфера, выделяемого операционной системой для конвейера), или неограниченно увеличиваться до тех пор, пока он не займёт всё доступное пространство на диске, или не достигнет ограничения на размер файла, заданного операционной системой или квотой, и т.д.
+66
Частые ошибки программирования на Bash (окончание)
3 min
21KTranslation
Окончание перевода Bash Pitfalls. Предыдущие части доступны в блоге «Оболочки» (часть 1, часть 2) и в моём блоге.
Проблема в том, что в интерактивной оболочке Bash эта команда вызовет ошибку:
Это происходит потому, что при установках по умолчанию Bash выполняет подстановку истории команд в стиле csh с использованием восклицательного знака. В скриптах такой проблемы нет, только в интерактивной оболочке.
Очевидное решение здесь не работает:
22. echo "Hello World!"
Проблема в том, что в интерактивной оболочке Bash эта команда вызовет ошибку:
bash: !": event not found
Это происходит потому, что при установках по умолчанию Bash выполняет подстановку истории команд в стиле csh с использованием восклицательного знака. В скриптах такой проблемы нет, только в интерактивной оболочке.
Очевидное решение здесь не работает:
$ echo "hi\!" hi\!
+43
Демон конвертации видео в FLV
3 min
3.6KРешил поделиться недавно написанным кодом демона для видеохостинга.
Принцип демона прост. Демон смотрит в папку, куда загружаются видеофалы, и при появлении там новых, копирует в другую папку, запускает в фоне процесс конвертации, создает превьюшку, и копирует полученное видео в папку пользователя.
Принцип демона прост. Демон смотрит в папку, куда загружаются видеофалы, и при появлении там новых, копирует в другую папку, запускает в фоне процесс конвертации, создает превьюшку, и копирует полученное видео в папку пользователя.
+38
UPD. Демон конвертации видео в FLV.
1 min
2.2KЭто продолжение, а точнее развитие, статьи написанной ранее.
В результате небольшого рефакторинга, получилось повысить производительность, и упростить код. Результатом стало изменение перечня используемого софта.
В результате небольшого рефакторинга, получилось повысить производительность, и упростить код. Результатом стало изменение перечня используемого софта.
+26
Не можешь найти то, что нужно? Сделай сам
2 min
5.3KТак получилось, что мне было необходимо настроить резервное копирование баз данных MySQL и PostgreSQL. Хотелось вполне определенного, а именно:
- Простота решения
- Каждая БД в отдельном файле
- Имя в формате «bdname.YYYY-MM-DD-HH:mm:ss.sql.gz»
- Для каждой БД хранится определенное число архивов
- Набор архивов БД находится в ротации
- Решение определенных проблем с указанием пароля для pg_dump
- и т.п.
+18
Простой скрипт деплоя
5 min
8.1KХочу сказать сразу, цель этого поста не предоставить универсальное решение задачи развертывания кода на сервере, а показать пример, один из вариантов решения такой задачи. Подойдет ли это решение для вашего случая — решать вам.
Итак, задача выгрузки кода на сервера, одна из самых частых рутинных задач в работе программиста. Очень хорошо эта проблема освящена тут. Но до сих пор, многие решают её с помощью тупого копирования выбранных файлов по FTP, что зачатую приводит к путанице, и ошибкам. Ниже я предлагаю более или менее универсальный скрипт на языке bash, который позволит автоматизировать задачу.
Итак, задача выгрузки кода на сервера, одна из самых частых рутинных задач в работе программиста. Очень хорошо эта проблема освящена тут. Но до сих пор, многие решают её с помощью тупого копирования выбранных файлов по FTP, что зачатую приводит к путанице, и ошибкам. Ниже я предлагаю более или менее универсальный скрипт на языке bash, который позволит автоматизировать задачу.
-1
Парсер на shell с обходом XOR-шифрования при аутентификации
6 min
3.9KНедавно возникла необходимость в парсере интернет-счета банковской карты для дальнейшего уведомления об операциях посредством смс\e-mail. Сделать это было решено по-быстрому шел-скриптом, который будет парсить страницу со счетом с определенной периодичностью при помощи задания в cron, а в случае изменения баланса счета — высылать сообщение на мобильный телефон или e-mail. Ничего сложного на первый взгляд, однако в ходе написания пришлось решить некоторые сложности, о которых вы сможете прочесть под катом.
+21
Активная защита FreeBSD на основе логов, sh и cron
6 min
9.9KПриветствую всех администраторов FreeBSD!
Настроив свой второй сервер на FreeBSD и перенеся туда важную корпоративную информацию, я задумался о защите. Не буду повторяться про антивирусы, брандмауэры и дополнительные полезные комплексы — ни один из этих инструментов не решал мою задачу.
Задача возникла сама собой, при просмотре логов:
в них постоянно попадала информация о неудачных попытках подобрать пароль к exim, к серверу и к веб-почте соответственно. Рано или поздно злоумышленники могут пароль подобрать, поэтому их нужно как-то остановить, например, добавив их IP-адрес в правила ipfw. А на веб-сервере еще и пытались найти несуществующие каталоги и файлы, относящиеся к администрированию, типа phpmyadmin, очевидно, чтобы проверить их на существующие уязвимости.
Настроив свой второй сервер на FreeBSD и перенеся туда важную корпоративную информацию, я задумался о защите. Не буду повторяться про антивирусы, брандмауэры и дополнительные полезные комплексы — ни один из этих инструментов не решал мою задачу.
Задача возникла сама собой, при просмотре логов:
/var/log/exim/rejectlog
/var/log/auth.log
/var/log/apache22/httpd-error.log
в них постоянно попадала информация о неудачных попытках подобрать пароль к exim, к серверу и к веб-почте соответственно. Рано или поздно злоумышленники могут пароль подобрать, поэтому их нужно как-то остановить, например, добавив их IP-адрес в правила ipfw. А на веб-сервере еще и пытались найти несуществующие каталоги и файлы, относящиеся к администрированию, типа phpmyadmin, очевидно, чтобы проверить их на существующие уязвимости.
+29
Автоматический сбор и архивация фото/видеонаблюдения
5 min
8.7KЗАДАЧА
Однажды, начальство потребовало круглосуточно вести запись происходящего в офисах. А также, в рабочее время — периодически публиковать фото из офисов на сайте.
От моего предшественника мне досталось:
- Несколько офисов с умными видеокамерами D-Link, которые фотографируют происходящее
- Сервер на FreeBSD
- Сайт организации, куда должен попадать снимок с каждой камеры
- Сетевая папка в локальной сети, где должны храниться архивы записей
Известно:
— Сервер FreeBSD не доступен извне
— Хостер не любит, когда к его FTP подключаются чаще, чем раз в минуту
— Учитывая качество и толщину каналов связи, камеры не пишут видео, а делают периодические фото
На момент постановки задачи, видеокамеры самостоятельно вразнобой подключались к FTP хостера и выкладывали снимки по расписанию каждую минуту. В результате чего, хостер периодически блокировал доступ по FTP к сайту.
+24
Как я делал отказоустойчивый веб-сервис
6 min
15KПредисловие
В этой статье я хотел рассказать о своем опыте построения отказоустойчивого Web-сервиса. Я разрабатывал внутреннюю систему управления предприятием на PHP+MySQL (корпоративный портал), и, так как почти вся жизнь предприятия зависит от работоспособности этой системы, вопросы отказоустойчивости приобретают большое значение. Вместе с тем предприятие небольшое, соответственно, позволить себе дорогое железо и технологии оно не может, да и простой системы в несколько часов для него тоже не смертелен. Поэтому я старался решить эту задачу с минимальными денежными вложениями и обходясь своими силами и небольшими знаниями в области администрирования.
+20
Программирование в стиле Теремка
2 min
2KTranslation
Перевод старался делать точным, насколько это возможно, и изменил лишь название компании, которая используется как пример, но по сфере деятельности и принципу работы в рознице схожа с той, что в оригинале.
Каждый блинчик в меню Теремка — всего лишь набор из примерно 8ми ингредиентов. С такой простой периодической таблицей элементов компания заработала 1.9 млрд долларов в прошлом году (нет, не Теремок, а всё-таки Taco Bell).
Чем больше я программирую и проектирую системы, тем больше я понимаю, что в множестве случаев можно достигнуть желаемого результата банально сочетая базовый набор инструментов, данный нам Unix. В конце концов, функциональность — это ценность, а код — это задолженность. Это утверждение обратно абсурднму тренду DevOps (разработчико-админов), исходя из которого системные администраторы начинают писать юнит-тесты и прочие вещи, чтобы помочь разработчикам, и гласит что программирование в стиле Теремка это разработчики, которые знают достаточно об администрировании (и Unix в целом) так, что они не изобретают велосипед, и приходят к простым и масштабируемым решениям.
Вот конкретный пример: представьте, вам нужно скачать и записать на диск миллионы веб-страниц для дальнейшей обработки. Как это сделать? Детки-крутышки скажут, что нужно написать распределённый паук на Clojure и запустить на EC2, коммуницируя с помощью SQS или 0MQ.
Каждый блинчик в меню Теремка — всего лишь набор из примерно 8ми ингредиентов. С такой простой периодической таблицей элементов компания заработала 1.9 млрд долларов в прошлом году (нет, не Теремок, а всё-таки Taco Bell).
Чем больше я программирую и проектирую системы, тем больше я понимаю, что в множестве случаев можно достигнуть желаемого результата банально сочетая базовый набор инструментов, данный нам Unix. В конце концов, функциональность — это ценность, а код — это задолженность. Это утверждение обратно абсурднму тренду DevOps (разработчико-админов), исходя из которого системные администраторы начинают писать юнит-тесты и прочие вещи, чтобы помочь разработчикам, и гласит что программирование в стиле Теремка это разработчики, которые знают достаточно об администрировании (и Unix в целом) так, что они не изобретают велосипед, и приходят к простым и масштабируемым решениям.
Вот конкретный пример: представьте, вам нужно скачать и записать на диск миллионы веб-страниц для дальнейшей обработки. Как это сделать? Детки-крутышки скажут, что нужно написать распределённый паук на Clojure и запустить на EC2, коммуницируя с помощью SQS или 0MQ.
+80
Google translate+Asterisk IVR
7 min
34KДолго думал в какой блог запостить и решил, что здесь ему наиболее подходящее место. Хотя бы потому, что основная идея топика «sh — может все».
В этом топике задали интересную тему — реализовать IVR для * с использованием синтезатора из Google Translate.
Я в общем то даже не планировал этим заниматься, но мне стало интересно.
В этом топике задали интересную тему — реализовать IVR для * с использованием синтезатора из Google Translate.
Я в общем то даже не планировал этим заниматься, но мне стало интересно.
+67
Удобная разработка для OS Inferno в Vim
2 min
5.5KFAQ: Что такое OS Inferno и зачем она нужна?
Под инферно писать софт можно как внутри самой инферно (используя Acme IDE, компилятор limbo и mk для сборки), так и снаружи, в host os (используя любой редактор/IDE, и host os -версии limbo и mk) — при этом запускать инферно понадобится только для запуска тестов или отладки. Я подготовил несколько проектов/скриптов, которые предназначены упростить разработку под инферно вообще, и разработку используя Vim запущенный в host os в частности.
Под инферно писать софт можно как внутри самой инферно (используя Acme IDE, компилятор limbo и mk для сборки), так и снаружи, в host os (используя любой редактор/IDE, и host os -версии limbo и mk) — при этом запускать инферно понадобится только для запуска тестов или отладки. Я подготовил несколько проектов/скриптов, которые предназначены упростить разработку под инферно вообще, и разработку используя Vim запущенный в host os в частности.
+6