Простейший hexdump, который делает именно то, что вам нужно

Хотите просто получить шестнадцатеричный дамп файла, при этом не занимаясь контрпродуктивным подбором опций командной строки для hexdump, который, как известно, вне зависимости от того, о чём вы его просите, всегда готов любезно сделать что-нибудь «совсем не то»?

Воспользуйтесь простейшим однострочником на Perl:

perl -e 'do { local $/; print unpack("H*",<>) }'  <FILE


Всё гениальное — это просто Perl!

P.S. То есть нет, простите,
«Всё гениальное — это просто Perl!» ©

Сжатие LOG файла в MS SQL Server по расписанию

Сжать базу логов можно с помощью shrink. Если у вас модель восстановления простая, то базу можно сразу сжимать. У меня полная, поэтому буду сначала менять модель восстановления:
Скрипт shrinkms.sql (его будем вызывать из следующего скрипта)
USE  [DBname];
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE  [DBname]
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 10 MB.
DBCC SHRINKFILE ( [DBname]_Log, 10);
GO
-- Reset the database recovery model.
ALTER DATABASE  [DBname]
SET RECOVERY FULL;
GO

Скрипт для планировщика shrink.cmd
sqlcmd -S [SERVERNAME] -U [USERNAME] -P [PASSWORD] -i c:\db\shrinkms.sql

Автоматическое создание резервных копий MS SQL Server

Я не стал пользоваться разными программами для резервного копирования и встроенными средствами, сделал скрипт и повесил его в автоматическое выполнение ночью.
Скрипт backupms.sql (его будем вызывать из следующего скрипта)
DECLARE @pathName NVARCHAR(512) 
SET @pathName = 'c:\db_backup_' + Convert(varchar(8), GETDATE(), 112) + '.bak' 
BACKUP DATABASE [DBname] TO  DISK = @pathName WITH NOFORMAT, NOINIT,  NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

Скрипт для планировщика backup.cmd
sqlcmd -S [SERVERNAME] -U [USERNAME] -P [PASSWORD] -i c:\db\backupms.sql
copy /y c:\db_backup*.bak Z:\1c-back\
del /f c:\db_backup*.bak

Оригинал тут. Я архивировать не стал, но если требуется, можно взять код по ссылке.

Модификация поля, имеющего "номер в фигурных скобочках"

  • LDAP
«Люди часто спрашивают меня», как изменить значение одного из полей объекта, если это поле многозначное?
Ответ на этот вопрос элементарен, как 3 копейки:

dn: cn=object,dc=domain,dc=com
changeType: modify
delete: attrType
attrType: SOME_OLD_VALUE
-
add: attrType
attrType: SOME_NEW_VALUE

Но после этого всё те же люди, которые часто спрашивают, озадачивают меня таким пожеланием: а вот есть поля типа olcAccess, которые хотелось бы изменять, не указывая полностью их старое значение, а указывая один лишь только их «номер», который в фигурных скобочках, то… что же нам делать?

«За чем же дело стало, господа?» — отвечу я им!

dn: cn=object,dc=domain,dc=com
changeType: modify
delete: olcAccess
olcAccess: {2}
-
add: olcAccess
olcAccess: {2}to * by * none


Вот и вся недолга: при модификации поля с автоматически созданным «порядковым номером» можно не указывать его старое значение полностью. И это хорошо :)

Простенький пример использования Moo

Неожиданно выяснил, что документации по модулю Moo, делающему возможным «ООП с человеческим лицом» в Perl практически нет, а та, что есть — вообще почему-то платная (?! я сам был удивлён весьма).

Для того, чтобы хоть немного ликвидировать столь странный «пробел» я написал по итогам нескольких часов «изучения» Moo маленький пример, которым и хочу с вами, мои дорогие читатели, поделиться:

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

Elastix съедает всю память

Есть у Elastix особенность, периодически память заканчивается и asterisk начинает тормозить. Для очистки памяти добавьте в cron задание:
echo 3 > /proc/sys/vm/drop_caches

Периодичность в зависимости от скорости заполнения памяти

Уведомления о пропущенных вызовах в Asterisk (Elastix 2.4)

  • Asterisk
Озадачился простейшей вроде задачей, уведомлением о пропущенных звонках. Как оказалось «из коробки» в Elastix не выберешь даже просто пропущенные вызовы. Все потому, что все вызовы попадают в очередь, где сразу помечаются как отвеченные. Так, что если вам нужно выбрать пропущенные вызовы, можете переделать какой-то из отчетов добавив туда фильтрацию такого вида:
dcontext =  'ext-queues' and dstchannel = ''

Если вам нужно уведомление о пропущенных вызовах в электронной почте в реальном режиме времени, то добавим поиск параметра dstchannel = '' при отбое звонка. Для этого добавим в начало файла /etc/asterisk/extensions_override_elastix.conf пару строк:
Читать дальше →

Ubuntu 14.04 LTS, старые компьютеры и старые видеокарты

… Скорей всего неофитам этого не понять. Но были времена, когда я мечтал о Hyperthreading P4 3GHz c видеокартой Ati radeon 9800 (что характерно с необходимостью доп. питания). И вот пару дней назад мы с мужиками вернулись с холодного склада, откуда вилами выкидывали старое барахло. И вот она у меня на столе. Когда то супер компьютер, сейчас — не сказать что бы очень.
Ну чтож, посмотрим, можно ли это куда-нибудь применить…

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

Генерация случайного числа в диапазоне от min до max

  • BASH

min=121
max=257
v=$(( min + ($RANDOM*(max-min))>>15 ))


Работает по принципу:

v=min+rnd/32768*(max-min)

Но вместо деления используются побитовые сдвиги.
Недостаток неочевиден, но он есть: v никогда не сможет быть равным max, поскольку в действительности $RANDOM принимает значения от 0 до 32767, а v=max только если бы $RANDOM=32768. Причём если зазор между max и min значительный, то кроме самого max не смогут быть «достигнуты» и зачения меньше max в ближайшей окрестности.
Тем не менее, это самый простой и самый эффективный генератор случайных чисел в заданном диапазоне, недостатки которого, как водится, напрямую вытекают из его достоинств, а уж вам выбирать, что важнее. Для диапазонов, по размаху значительно меньше 32768, погрешность не должна быть критична.

Как переименовать сертификат в Mikrotik.

Столкнулся с «особенностью» свежих релизов RouterOS, через веб-интерфейс и winbox нельзя переименовывать импортированные сертификаты. На форуме техподдержки написали про такой костыль:

1. Открываем CLI
/certificate print

2.
/certificate edit N

3. Далее нужно написать «name», именно так, а не новое имя сертификата.
value-name: name

4. Откроется редактор, в нем исправляем имя и жмем CRTL-O для сохранения.

UPD
В версии 6.17 этого бага уже нет.

Скажи мне "да" или "нет" и дай мне свой ответ! :)

  • BASH
Поскольку люди, которые на BASH'е пишут многословно и ужасно, уже откровенно (достали), предлагаю свой вариант элементарной функции чтения односложного ответа пользователя.

read_yn () {
 local yn dflt='Y'  
 if [[ ${#1} == 1 && ${1^} =~ ^[YN]$ ]]; then   
  shift           
  dflt=${1^}
 fi
 while :; do
  echo -en "$@"
  read yn; yn=${yn:0:1}; yn=${yn^}
  if [[ $yn =~ ^[NY]$ || ! $yn ]]; then
   yn=${yn:-$dflt}
   break
  fi
 done
 echo -n $yn
 [[ $yn == 'Y' ]]
 return $?
}


Большинство людей почему-то думают, что BASH-это какой-то примитивный язык, из которого можно только «командочки запускать», нечто вроде продвинутого языка командных сценариев DOS. Безусловно, право каждого думать как ему угодно и каждый сам себе злой Буратино, поскольку как правило хреново написанный код на BASH не переживает просмотра первым же вменяемым Perl-программистом, поскольку у того просто ломается мозг и он всё переписывает по-своему. Но хотя бы ради мира на Земле — не ленитесь, читайте man bash перед сном и во время ритуальной чистки зубов. Это очень помогает не писать какую-то «ребячливую» чушь вместо кода на добротном, пусть и специализированном, языке программирования.

Конфиг SQUID для корпоративной сети

Как это часто бывает в крупных организациях, у нас тоже зарплату получают странные люди, которые следят за тем, кто на какие сайты ходитЬ. Конкретно в нашей организации обойти этих людей довольно просто, используя pptp-туннель. Но туннель, как водится, хилый и безжизненный, а корпоративная сетка… в общем тоже хилая в расчёте на одного сотрудника, но всё же пожирнее. И выход валидный из неё — только через прокси, считающий и протоколирующий все ваши заходы во вконтакт к Дурову в гости.
Как-то сама собой приходит в голову задача: настроить SQUID так, чтобы все сайты, кроме потенциально «подозрительных» с точки зрения наших безопасников проксировались выше на корпоративную «считалку», а все сайты, которые не хотелось бы светить в чужой статистике — роутились напрямую через PPTP-туннель.
Собственно, here is my config. Это явно не плод мощного умственного труда и в общем хотелось бы в нём видеть некие фичи наподобие переключения режимов «туннель доступен/туннель упал», но в общем это уже первая итерация, от которой можно отталкиваться в процессе эволюции:

http_access allow all
http_port 3128

coredump_dir /var/spool/squid3
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .       0   20% 4320

cache_peer proxy.corp.ru parent 8080 0 no-query default login=MY_CORP_LOGIN:MY_CORP_PASS
acl lan_dest dst 127.0.0.0/8 172.0.0.0/8 10.0.0.0/8 192.168.0.0/16
acl corp_doms dstdom_regex ^(.+\.)?corp.ru$ ^(.+\.)?my.local.dom$
acl my_sites dstdomain "/etc/squid3/my_sites.acl"

never_direct deny lan_dest
never_direct deny corp_doms
never_direct deny my_sites

never_direct allow all


Соответственно, в /etc/squid3/my_sites.acl что-то вроде:

.velomania.ru
.kino35mm.ru
.hh.ru

Схема для связи объектов в каталоге

  • LDAP
Предлагаю вашему вниманию валидную схему для указания ссылок из объекта на другие объекты (просьба не путать с labeledURI и seeAlso :)).
Соответствующее пространство OID'ов зарегистрировано на моё имя, так что пользуйтесь на здоровье.

dn: cn=link,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: link
olcAttributeTypes: ( 1.3.6.1.4.1.37344.125.11 NAME 'linkedTo' DESC 'DN of another object in catalog which is linked to this entry' SUP distinguishedName )
olcObjectClasses: ( 1.3.6.1.4.1.37344.125.1 NAME 'link' SUP top AUXILIARY MUST ( linkedTo ) )


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

Компиляция OpenLDAP: хватит спотыкаться!

  • LDAP
После того, как я уже в 10-й раз споткнулся об одну и ту же дурацкую проблему, решил наконец записать себе на память и другим на заметку:
При компиляции OpenLDAP с оверлеями и бэкендами в виде модулей недостаточно просто сказать --enable-smth=mod, нужно до этого обязательно упомянуть --enable-modules=yes. Иначе вы просто замучаетесь искать свои модули в логе установки (то есть в сохранённом выводе make install): их там не будет.
Я не знаю, зачем разработчики подложили простым пользователям такую жирную свинью, но забывать о том, что сие животное в самый неподходящий момент может броситься к вам под колёса — совершенно не стоит.

Архивация ВМ в HYPER-V на MS Windows 2012R2

Как ни хороша виртуалка, а делать бэкапы надо. Могут люди накосячить, может железо подохнуть, может вообще случиться все что угодно. А за потерянные данные голову начальство будет снимать с админа. Потому развернув HYPER-V на новой точилке, озадачился
Читать дальше →

Минидистрибутив Centos, мониторим Kodeks-WEB через Monitd

  • Linux
Нравиться мне Ubuntu, но захотелось большего. Шучу.
В общем дело было так: навернул на Hyper-V 2012 линуксовый сервак на CentOS 6.4, исходником для установки был образ CentOS-6.4-x86_64-minimal.iso Накатил на это дело Kodeks-WEB, настроил обновления и прочие рюшечки, сервак в общем готов к бою,
Читать дальше →

Велосипед своими руками или боремся с зависающими точками AP

Столкнулся замечательными Wi-fi точками от Ubiquiti. Все хорошо, но иногда они почему-то подвисают и перестают принимать wi-fi клиентов. При этом ethernet продолжает работать, а в dmesg выдается сообщение «wifi0: transmit timed out». Лечится только перезагрузкой точки. Проблема известная, разработчики не теряют надежды ее победить, но пока вот так…
Читать дальше →

Новые ноутбуки Asus

Вчера настраивал клиенту новые ноутбуки Asus, только из магазина. У всех 7 штук были дефекты сборки, в основном где-то не защелкнутые клипсы, но на одном было вот так:

Новые ноутбуки Asus

На других клавиатура при нажатии продавливается или просто выгнута вверх. Это очень печально, раньше считал продукцию Asus качественной.

Настройка EIGRP на Cisco часть 8 [подготовка к CCNP]

  • Cisco

Настройка EIGRP на Cisco часть 7 [подготовка к CCNP]

  • Cisco

7. Фильтрация и суммирование в eigrp


Это седьмая часть моей статьи по настройке EIGRP в рамках экзамена CCNP
Перейти к первой части
Перейти ко второй части
Перейти к третьей части
Перейти к четвертой части
Перейти к пятой части
Перейти к шестой части


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