Нежадные регулярные выражения в vim'е реалуются очень легко. Достаточно просто заменить * на \{-}. Это аналог перловского *?.
суббота, 12 ноября 2011 г.
среда, 2 ноября 2011 г.
Converting 32bit RRD to 64bit RRD (This RRD was created on other architecture)
Такая ошибка вываливается тогда, когда на одной архитектуре (скажем, 64bit), вы пытаетесь использовать rrd-шки, созданные на другой (32bit).
Починить можно, перегнав rrd-шку в xml на старой системе, а затем обратно - на новой.
Например, на старой системе выполняем:
На старой системе:
Починить можно, перегнав rrd-шку в xml на старой системе, а затем обратно - на новой.
Например, на старой системе выполняем:
rrdtool dump sometest.rrd > sometest.xmlНа новой:
rrdtool restore sometest.xml sometest.rrdЕсли же файлов много, то можно сделать это так:
На старой системе:
for i in `find -name "*.rrd"`; do rrdtool dump $i > $i.xml; doneНа новой:
for i in `find -name "*.xml"`; do rrdtool restore $i `echo $i |sed s/.xml//g`; done
воскресенье, 30 октября 2011 г.
fdisk - Partition table entries are not in disk order, или восстанавливаем порядок разделов
Иногда может случиться так, что порядок разделов в таблице разделов меняется. Таким образом, что раздел (партиция) с номером x+2 оказывается физически между разделом x и x+1. Например, так, как это показано ниже:
$ sudo fdisk -l /dev/sda
...
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e3147
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 58593279 29295616 83 Linux
/dev/sda2 58595326 625141759 283273217 5 Extended
/dev/sda5 58595328 373270527 157337600 83 Linux
/dev/sda6 615235584 625141759 4953088 82 Linux swap / Solaris
/dev/sda7 373272576 615225239 120976332 83 Linux
Partition table entries are not in disk order
Как видно, раздел /dev/sda7 на самом деле расположен между /dev/sda5 и /dev/sda6.
В принципе, это не критично. Однако, если вы всё же хотите восстановить правильный порядок разделов, надо выполнить следующие простые действия:
1) Запускаем fdisk для требуемого раздела
$ sudo fdisk /dev/sda
2) Включаем расширенные команды:
Command (m for help): x
3) Правим порядок:
Expert command (m for help): f
Done.
4) Записываем изменения на диск:
Expert command (m for help): w
The partition table has been altered!
Собственно, всё, порядок разделов исправлен:
Command (m for help): p
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesU
Disk identifier: 0x000e3147
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 58593279 29295616 83 Linux
/dev/sda2 58595326 625141759 283273217 5 Extended
/dev/sda5 58595328 373270527 157337600 83 Linux
/dev/sda6 373272576 615225239 120976332 83 Linux
/dev/sda7 615235584 625141759 4953088 82 Linux swap / Solaris
Однако, если в вашем /etc/fstab прописаны диски по их названиям типа /dev/sdaX, а не по UUID, то вам следуем не забыть поправить fstab, так как названия поменялись. UUID же остались прежними.
понедельник, 24 октября 2011 г.
VIM – моя шпаргалка | Записки программиста
VIM – моя шпаргалка | Записки программиста
Отличная шпаргалка по vim.
вторник, 18 октября 2011 г.
Ubuntu - возвращаем F10 в MC (Midnight Commander)
К сожалению, в Ubuntu 11.04 и 11.10 нажатия кнопки F10 перехватываются Unity. Это очень разжражает, так как в Midnight Commander'е эта кнопка часто используется, например, для выхода.
Избавиться о перехватов Unity просто. Для этого надо выполнить следующие действия:
1) Устанавливаем compizconfig-settings-manager:
3) Вводим в фильтре Unity и находим Ubuntu Unity Plugin:
Избавиться о перехватов Unity просто. Для этого надо выполнить следующие действия:
1) Устанавливаем compizconfig-settings-manager:
$ sudo aptitude install compizconfig-settings-manager2) Далее, запускаем его (в меню приложений находим compizconfig-settings-manager)
3) Вводим в фильтре Unity и находим Ubuntu Unity Plugin:
4) Снимаем галочку либо нажимаем на него и переназначаем клавишу вызова. Я выбрал Ctrl+Shift+F10
воскресенье, 25 сентября 2011 г.
PHP MongoDB - получаем _id только что созданной записи (MongoID)
Ситуация: мы хотим получить _id только что созданной нами записи. То есть, например, мы создали юзера и хотим знать айдишник, который MongoDB присвоила ему. Делается это очень просто:
Добавляем элемент:
Добавляем элемент:
$x = array('foo' => 'bar');Проверяем внутренности $x:
$c->insert($x);
var_dump($x);
array(2) {
["_id"]=>
object(MongoId)#2 (0) {
}
["foo"]
string(7) "bar"
}Таким образом, для того, чтобы узнать _id, достаточно вывести $x['_id']
суббота, 28 мая 2011 г.
Javascript - расшифровка htmlEntities
function decodeHtml(decoded){
var ta = document.createElement("textarea");
ta.innerHTML = decoded;
return ta.value;
}
понедельник, 9 мая 2011 г.
Простой скрипт для бэкапа MySQL баз
#!/bin/bash
# Variables
CNF=/etc/mysql/debian.cnf
BACKUPDIR=/var/backups/mysql/
DATE=`date +%F`
OLDDAYS=7
# Main part
for DATABASE in `echo SHOW DATABASES | mysql --defaults-file=${CNF} --skip-column-names`;do
BACKUPNAME=${BACKUPDIR}${DATABASE}.sql.${DATE}
BZBACKUPNAME=${BACKUPNAME}.bz2
echo Dumping ${DATABASE} into ${BZBACKUPNAME}
mysqldump --defaults-file=${CNF} ${DATABASE} > ${BACKUPNAME}; bzip2 -f ${BACKUPNAME}
done
# Deleting old backups
find ${BACKUPDIR} -mtime +${OLDDAYS} -delete
Дампит и сжимает базы данных.
Можно (и нужно) добавить его в крон, например:
00 05 * * * root /usr/local/sbin/mysqlbackup.sh
P.S. Ах да, это юбилейный, сотый пост в моём бложике:)
вторник, 26 апреля 2011 г.
Ubuntu (Debian) - устанавливаем VirtualBox 4.0.6
VirtualBox 4.0.6 устанавливается в Ubuntu очень просто. Все описано вот здесь: http://www.virtualbox.org/wiki/Linux_Downloads . Если вкраце, то должны быть следующие действия:
Выбираем нужную строчку по версии операционной системы из этого списка:
Выбираем нужную строчку по версии операционной системы из этого списка:
deb http://download.virtualbox.org/virtualbox/debian maverick contrib non-free deb http://download.virtualbox.org/virtualbox/debian lucid contrib non-free deb http://download.virtualbox.org/virtualbox/debian karmic contrib non-free deb http://download.virtualbox.org/virtualbox/debian hardy contrib non-free deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free deb http://download.virtualbox.org/virtualbox/debian lenny contrib non-free
deb http://download.virtualbox.org/virtualbox/debian lucid contrib non-free
Затем скачиваем ключ репозитория и добавляем его в apt:
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update sudo apt-get install virtualbox-4.0
четверг, 21 апреля 2011 г.
Linux - меняем кодировку для всех файлов в директории
for file in `find . -type f`; do iconv $file -f cp1251 -t utf8 -o ${file}_tmp; mv ${file}_tmp $file; done
Рекурсивно меняет кодировку для всех файлов в текущей директории из cp1251 в utf8.
понедельник, 14 марта 2011 г.
Linux MTA - настройка своего сервера для борьбы со спамом
Вот еще одна отличная статья про настройку своего MX сервера: ссылка на статью. Описывается фильтрация на уровне SMTP протокола, а не на основе спам-фильтров и т.п.
Linux MTA - как не попасть в спам, или настройка PTR и DKIM.
Вот в этой статье на Хабре подробно и понятно всё описано. Сделал как там рекомендовалось - и Google стал рад моим письмам:)
Linux MTA - настройка отправки писем через smarthost для exim4 и sendmail
Вот замечательная статья, в которой описывается, как это делать:
http://blog.sozinov.eu/2007/10/smarthost.html
http://blog.sozinov.eu/2007/10/smarthost.html
вторник, 8 марта 2011 г.
Настройка и установка МФУ (принтера и сканера) HP F4100 в Linux Debian Wheezy (и Ubuntu)
Предыстория: Понадобилось отсканировать несколько фотографий из книжки типа "Лучшие советские фотографы". А для этого нужен был сканер. У меня как раз завалялся МФУ Hewlett Packard F4100. Вот такой вот зверек:
Настраиваел я его на Linux Debian Wheezy. В принципе, инструкция ничем не отличается и для других Дебианов. В Убунту, скорее всего, тоже так получится, но там наверняка можно всё тоже самое еще и через гуи натыкать.
Здесь же я выполнил следующие действия:
Во-первых, воткнул его в сеть и в USB моего нежного любимого Lenovo U350.
Во-вторых, посмотрел вывод dmesg:
# dmesgВроде как и нашлось, однако в lsusb я устройства не увидел:
[10537.432045] usb 6-1: new full speed USB device using uhci_hcd and address 3
[10537.631039] usb 6-1: New USB device found, idVendor=03f0, idProduct=7e04
[10537.631045] usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[10537.631049] usb 6-1: Product: Deskjet F4100 series
[10537.631053] usb 6-1: Manufacturer: HP
[10537.631056] usb 6-1: SerialNumber: CN75R3H2D004TJ
[10537.631183] usb 6-1: configuration #1 chosen from 1 choice
[10537.810588] usblp0: USB Bidirectional printer dev 3 if 1 alt 0 proto 2 vid 0x03F0 pid 0x7E04
[10537.810619] usbcore: registered new interface driveи usblp
# lsusbВ-третьих, установил sane b гую для него - xsane.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 5986:0241 Acer, Inc BisonCam, NB Pro
Bus 002 Device 004: ID 8086:1406 Intel Corp. WiMAX Connection 2400m
Bus 006 Device 002: ID 0458:0056 KYE Systems Corp. (Mouse Systems) Ergo 300 Mouse
Bus 007 Device 002: ID 0a5c:2150 Broadcom Corp. BCM2046 Bluetooth Device
# aptitude install sane xsanesane поставился, однако пользы от этого особой не было. Xsane настойчиво пытался получать изображение с веб-камеры, и никак не видел HP. Немного погуглив, я выяснил, что HP делает драйвера специально под линукс, и можно поискать ссылку на них на официальном сайте. Там меня редиректнуло на такой вот сайт: http://hplipopensource.com/hplip-web/index.html. Тут я подумал, у меня же Debian, а не Слака какая-нибудь, и нашёл пакет hplip в репозиториях. Установил:
# aptitude install hplip, и подумал, что все, готово.
Однако, всё не так просто, мне понадобилось еще перевтыкнуть usb-шнурок, и после этого xsane уже отлично видел МФУ-шку и был готов сканировать:
Если обобщать, то надо выполнить следующие действия:
# aptitude install xsane hplipи после этого воткнуть шнурок сканера.
пятница, 18 февраля 2011 г.
bash - обращение к нужной команде из history
Как известно, список использованных команд в bash'e можно посмотреть, набрав команду history:
Периодически, приходится искать в history длинные и сложные команды, например, такие как вот эта:
find . -mindepth 1 -maxdepth 1 -type d -exec du -bs {} \; | sort -n -r | awk '{print $2}' | head -10 | xargs du -hs
Выводит список самых тяжелых директорий в текущей.
Раньше я искал ее так:
$ history.
1 echo "test"
2 echo "Hello World"
3 find . -mtime +5
..
Периодически, приходится искать в history длинные и сложные команды, например, такие как вот эта:
find . -mindepth 1 -maxdepth 1 -type d -exec du -bs {} \; | sort -n -r | awk '{print $2}' | head -10 | xargs du -hs
Выводит список самых тяжелых директорий в текущей.
Раньше я искал ее так:
$ history | grep findКопировал мышкой и взаново вбивал в адресную строку. Однако все изменилось, когда я узнал, что можно все делать намного проще. Достаточно лишь набрать ![номер команды], и она отрабатываает заново:
231 find . -mindepth 1 -maxdepth 1 -type d -exec du -bs {} \; | sort -n -r | awk '{print $2}' | head -10 | xargs du -hs
$ !231
find . -mindepth 1 -maxdepth 1 -type d -exec du -bs {} \; | sort -n -r | awk '{print $2}' | head -10 | xargs du -hs
.....
понедельник, 31 января 2011 г.
Python - генерация случайного числа с заданной вероятностью
Представим, что нам потребовалось создать на Питоне генератор случайных чисел, который выводит 1 или 0, причем 1 он выводит с вероятностью 0,2.
Это можно сделать следующим образом:
Это можно сделать следующим образом:
>>> import random
>>> for i in range(20):
... x = random.random()
... if x <= 0.2:
... print 1
... else:
... print 0
...
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
Что мы здесь сделали?
Во первых, первой строкой подключили модуль random, затем сгенерировали случайное число с плавающей точкой в пределах от 0 до 1. В зависимости от того, меньше это число 0.2, или больше, мы вывели 1 или 0. Таким образом, задачу можно считать выполненной.
Во первых, первой строкой подключили модуль random, затем сгенерировали случайное число с плавающей точкой в пределах от 0 до 1. В зависимости от того, меньше это число 0.2, или больше, мы вывели 1 или 0. Таким образом, задачу можно считать выполненной.
Python - сложение строк или конкатенация
В питоне складывать строки очень просто, вот примеры, из которых все понятно:
Пример №1
Пример №1
>>>print 'Привет! ' + 'Как дела?'Пример №2
Привет! Как дела?
>>> a = 'Хорошо'Пример №3 (c преобразованием числа в строку)
>>> b = ' А у тебя как?'
>>> c = a + b
>>> print c
Хорошо А у тебя как?
>>> x = 12
>>> y = 6
>>> print '12 * 6 = '+str(x*y)
12 * 6 = 72
понедельник, 17 января 2011 г.
Устанока OpenTTD в Debian или Ubuntu
Решил я поставить себе OpenTTD на свой ноутбук с Debian Squeeze. Так как компилировать и ставить из исходников - это не Debian-way, то выполнил следующую команду:
Всё, OpenTTD установлен на компьютер, можно с удовольствием поиграть, запустив его командой
$ sudo aptitude install openttdПоставился и сам OpenTDD, и нужные зависимости типа liblzo2-2 и т.д.
Всё, OpenTTD установлен на компьютер, можно с удовольствием поиграть, запустив его командой
$ openttdПолучаем окно игры:
Linux - подсчет количества определенных символов в строке
Делается сабж вот такой командной:
Например:
echo -n $string | sed s/[^SYMBOL]//g | wc -cГде $string - наша строка, SYMBOL - тот самый символ, количество которых мы хотим посчитать.
Например:
$ echo -n aaabac | sed s/[^a]//g | wc -c
4
Подписаться на:
Сообщения (Atom)