BASH Tips&Tricks #0008: Голову с плеч!
Да-да, забудьте наконец об этой странной утилите, которая ещё и работает «как-то иначе» в некоторых менее популярных, чем Linux, реализациях *nix!
Почему даже одна head вам ни к чему, не говоря уже о двух и более?
Да потому что у нас есть sed, который умеет всё или почти всё, но остаётся при этом простым и чрезвычайно быстрым, что позволяет ему заменять целую тучу атомарных nix'овых утилит.
Ну вот, например…
Хотите первое поле 2-й строки CSV-файла, где разделителем служит (сюрприз!) — запятая?
Да нет ничего проще, чем сделать это одной командой, безо всяких глупых head'ов и медлительных awk, — вот:
Да, и никогда не забывайте про жадный разбор регулярных выражений и фигурные скобки — данный пример наглядно показывает, чем бывает полезно и то, и другое.
Пожалуй, совсем не очевидным выглядит решение с помощью sed такой элементарной задачи, как «получить первые 5 строк файла»:
— с этим куда лучше справится head -5
Но, например, чуть менее элементарную задачу «вывести строки файла с 3-й по 10-ю, исключая 7-ю», sed решает куда нагляднее и элегантнее, нежели связка из доисторического локомотива head и «прицепного вагона» sed вместе:
sed'у очень сложно заменить tail, поскольку не умеет вести отсчёт от конца файла, но head он заменяет весьма успешно.
Поэтому в следующий раз, когда вы подумаете использовать sed на вагонной сцепке c head, подумайте ещё раз и сделайте «состав» немного короче…
Почему даже одна 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, подумайте ещё раз и сделайте «состав» немного короче…
-
akkerman,
- 16 мая 2012, 21:54
- 1
- это интересно | не интересно
BASH Tips&Tricks #0007: Организуем "многозадачное" сжатие
К сожалению, утилита xz до сих пор не умеет и уже, как видно, никогда не научится сжимать в несколько потоков (см. соотв комментарий в man-странице). 7z с некоторыми типами алгоритмов, в т.ч. с горячо любимым мной PPM, тоже не умеет распараллеливаться (во всяком случае ключ -mmt не даёт желаемого результата).
Но ведь можно осуществить сжатие нескольких файлов параллельно несколькими процессами! Единственная «хитрость» здесь будет заключаться в том, что для получения определённого гарантированного результата («всё сжалось»), нужно всё-таки подождать, чтобы все процессы завершились к моменту дальнейшей обработки файлов или к моменту, когда скрипт должен завершиться.
Всё это делается примерно в таком стиле:
Время выполнения последнего цикла будет соответствовать времени выполнения самого «длительного» процесса сжатия, а для тех процессов, которые уже завершатся к моменту, когда до них дойдёт очередь «ожидания», команда wait просто отработает как NOP (no-operation в intel assembler :)).
Заметьте, что между двумя циклами можно вставить практически всё, что угодно, так что одновременно со сжатием можно делать и ещё что-нибудь полезное.
Но ведь можно осуществить сжатие нескольких файлов параллельно несколькими процессами! Единственная «хитрость» здесь будет заключаться в том, что для получения определённого гарантированного результата («всё сжалось»), нужно всё-таки подождать, чтобы все процессы завершились к моменту дальнейшей обработки файлов или к моменту, когда скрипт должен завершиться.
Всё это делается примерно в таком стиле:
for f; do
xz $f &
pids+=" $!"
done
for pid in $pids; do
wait $pid
done
Время выполнения последнего цикла будет соответствовать времени выполнения самого «длительного» процесса сжатия, а для тех процессов, которые уже завершатся к моменту, когда до них дойдёт очередь «ожидания», команда wait просто отработает как NOP (no-operation в intel assembler :)).
Заметьте, что между двумя циклами можно вставить практически всё, что угодно, так что одновременно со сжатием можно делать и ещё что-нибудь полезное.
-
akkerman,
- 08 мая 2012, 19:19
- Прокомментировать
- это интересно | не интересно
Схема DUAConfigProfile (RFC4876) для OpenLDAP
Поскольку уже конвертированной схемы не нашлось, выкладываю свою.
Схема в частности пригодится для интеграции SUDO и LDAP при дословной реализации штатного README на эту тему. Хотя обязательной её назвать нельзя, поскольку в действительности SUDO работает с LDAP-каталогом и без неё.
Читать дальше →
Схема в частности пригодится для интеграции SUDO и LDAP при дословной реализации штатного README на эту тему. Хотя обязательной её назвать нельзя, поскольку в действительности SUDO работает с LDAP-каталогом и без неё.
Читать дальше →
-
akkerman,
- 26 апреля 2012, 13:43
- Прокомментировать
- рейтинг: -1
Microsoft спамит
Чудное письмо пришло сегодня:
Ура, мне сделали одолжение и предложили поучаствовать в опросе. Похоже на письма вроде «Вы выиграли в лотерею миллион долларов».
А Вы стали бы «Щелкать ссылку»?
"Отдел корпоративного лицензирования корпорации Майкрософт случайным образом выбрал 50000
из более чем 3000000 участников программы корпоративного лицензирования для участия в опросе.
Ваши ответы на вопросы в рамках данного опроса позволят нам узнать, каким образом Вы используете
раздел лицензий веб-сайта VLSC (Volume Licensing Service Center), а также запланировать дальнейшие
улучшения для более эффективного удовлетворения Ваших потребностей. Предполагается, что опрос
займет не более 10 минут. Опрос будет доступен до 23:59 (стандартное тихоокеанское время) 7 мая
(понедельник). Щелкните ссылку* ниже, чтобы перейти к опросу."Ура, мне сделали одолжение и предложили поучаствовать в опросе. Похоже на письма вроде «Вы выиграли в лотерею миллион долларов».
А Вы стали бы «Щелкать ссылку»?
Менеджер пакетов для FreeBSD или немного о проекте pkgng
Исторически сложилось так, что во FreeBSD два пути установки ПО. Первый идеологически правильный, но уж очень медленный, это сборка ПО из коллекции портов. Плюсы этого метода в большая гибкость и уверенность в том что установлены самые свежие версии, минус большие затраты времени. Настройка сервера в среднем занимает несколько дней, а если уж десктоп настраивать, так и неделю провозиться можно.
Второй путь — устанавливать готовые пакеты, плюсы -скорость развертывания… И на этом плюсы заканчиваются.Остаются сплошные минусы, неактуальный софт, конфликты версий и прочие радости.
Отдельный вопрос, это обновление ПО.
В дистрибутивах Linux эти вопросы решаются с помощью менеджеров пакетов apt-get, yum и т.п. Проект pkgng призван решить эту задачу в FreeBSD.
Читать дальше →
Второй путь — устанавливать готовые пакеты, плюсы -скорость развертывания… И на этом плюсы заканчиваются.Остаются сплошные минусы, неактуальный софт, конфликты версий и прочие радости.
Отдельный вопрос, это обновление ПО.
В дистрибутивах Linux эти вопросы решаются с помощью менеджеров пакетов apt-get, yum и т.п. Проект pkgng призван решить эту задачу в FreeBSD.
Читать дальше →
-
agrloki,
- 24 апреля 2012, 13:55
- Прокомментировать
- рейтинг: 0
Простой загрузчик таблицы маршрутизации, он же "пример на массивы"
Да, я в курсе, что есть некие другие средства для того, чтобы делать тоже самое.
Тем не менее, есть у меня некое подозрение, что мой скрипт делает это наиболее наглядным, прямолинейным и безопасным способом.
Собственно, он даже и вовсе ничего не меняет, он ведь просто «печатает» команды, которые нужно выполнить для того, чтобы привести текущую таблицу маршрутизации в полное соответствие с сохранённой. Сами команды пишутся на STDOUT, редкие отладочные сообщения — на STDERR.
Читать дальше →
Тем не менее, есть у меня некое подозрение, что мой скрипт делает это наиболее наглядным, прямолинейным и безопасным способом.
Собственно, он даже и вовсе ничего не меняет, он ведь просто «печатает» команды, которые нужно выполнить для того, чтобы привести текущую таблицу маршрутизации в полное соответствие с сохранённой. Сами команды пишутся на STDOUT, редкие отладочные сообщения — на STDERR.
Читать дальше →
-
akkerman,
- 18 апреля 2012, 21:00
- Прокомментировать
- рейтинг: +1
Как настроить прогноз погоды на IP телефоне Grandstream GXP 2110
Точнее на любых телефонах Grandstream GXP серии. В настройках нужно указать город для которого будет выводится прогноз, но нужно забить код города. Где его взять? Как оказалось опытным путем на сайте weather.aol.com. На сайте вводим в поле «Get Weather For:» название города по буржуйски, ищем свой город, тыкаем и видим ссылку вида
rsxx0209 и есть нужный код. Забиваем его в настройках:

Заодно указываем, что прогноз нужен в цельсиях и применяем. Должно обновится через пару секунд.
http://weather.aol.com/forecast/todays/russia/tambovskaya/tambov/id/rsxx0209rsxx0209 и есть нужный код. Забиваем его в настройках:

Заодно указываем, что прогноз нужен в цельсиях и применяем. Должно обновится через пару секунд.
-
admin,
- 18 апреля 2012, 14:47
- Прокомментировать
- рейтинг: -1
Реестр номеров «Россвязи»
На хабре нашел интересный топик, про определение принадлежности номера телефона к оператору и региону, что будет полезно в работе. В теме есть ссылка на сайт «Россвязи», но там база в html формате, что не очень удобно. Я ее скачал и перевел в Excel формат и заодно в sql скрипт для вставки в MySQL базу. Может еще кому нужно. Хочу прикрутить к asterisk статистике.
Читать дальше →
Читать дальше →
-
admin,
- 14 апреля 2012, 10:55
- Прокомментировать
- рейтинг: +1
За что я люблю swatch?
И почему это не швейцарские часы, а вещь, которая гораздо проще, дешевле и надёжнее…
Хорошо, вот вам достаточно доходчивое объяснение.
1) Смотрим, что у нас в $HOME/.swatchrc:
2) Пишем команду:
3) Видим сотню открывшихся одновременно окон zenity на своём my-pc'шнике :)
К чему это я?
Да пожалуй к тому, что если бы все OpenSource-утилиты были столь же просты и прямолинейны, как swatch, завтра бы уже наступил рай на Земле (а послезавтра он уже всем надоел бы и захотелось чего-нибудь нового).
Просто почитайте документацию к тому же logwatch, сравните её с документацией swatch и сделайте правильный выбор!
P.S. Частота выполнения действий (exec, mail и пр.) конечно же настраивается, то есть совершенно необязательно реагировать на все однотипные сообщения в логе — для этого в swatchrc можно задать threshold
Хорошо, вот вам достаточно доходчивое объяснение.
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
