Экспертам

zsh + mc

Tags: •  •  •  •  •  • 

Давно читаю советы с этого сайта за что всем спасибо.
Вроде нигде такой совет не проскакивал, в общем мой совет:

В zsh я пользуюсь темой приветствия adam2
на днях решил её поправить чтобы показывала не только директорию и пользователя с именем машины но и кое что ещё
но не это важно, а то что за одно я решил избавиться от старого глюка связанного с этой темой,
а именно с проблемой потери размера консоли

.-(~)---------------------------------------------------------------------------------------------------------(denis@tentorium)-
`-->      
.-(~)---------------------------------------------------------------------------------------------------------(denis@tentorium)-
`--> `-->  
.-(/var/cache/dictionaries-common)----------------------------------------------------------------------------------------------
-----------(denis@tentorium)-
`--> 

т.е. после запуска mc и перехода в /var/cache/dictionaries у нас приглашение съехало.

Изображение пользователя ramok.

Удобная многострочная подсведка поиска в vim

Tags: •  •  • 

В vim существует возможность подсвечивать найденные поиском слова командой :hlsearch. Но иногда удобно подсвечивать в логах многострочные блоки текста что бы их было видно невооруженным взглядом в огромном логе.

Но проблема в том что в регулярных выражениях точка . обозначает "любой символ кроме перевода каретки" (в отличии от например sed или perl где это действительно "любой символ"). К тому же * как обычно "жадный", что обозначает что если применять его, то будет найдена первая строка первого блока текста и последняя строка последнего блока текста, и подсвечен весь текст между ними. А нам нужно подсвечивать каждый блок в отдельности.

О том как это реализовывается на регулярных выражениях vim и есть этот типс Ж:-)

Как всегда лучше всего разобраться на примере. Допустим нам надо выделять блоки текста в которых первая строчка
содержит слова "RECV signal" или "SEND signal" и заканчиваются строчкой которая содержит "------".

Результат должен выглядеть так:

Белым цветом выделен только что найденый блок текста, желтым - все остальные найденные блоки.

Такого можно добиться командой:

/\(RECV\|SEND\) sig\_.\{-}------.*

Разберем ее по порядку слева на право:

  1. / - соответственно команда поиска в vim Ж:-)
  2. \(RECV\|SEND\) sig - ищем в строке или "RECV sig" или "SEND sig"
    \(\) служат для группировки, \| для выбора вариантов, "или"
  3. \_. - вот это самое интересное Ж:-) эта последовательность обозначает "любой символ включая перевод каретки".
  4. \{-} - это реализация "не жадных" регулярных выражений в vim. в perl это аналог *?. Если вместо
    этого поставить банальный * то vim будет искать самое последнее вхождение последующих символов.
  5. ------ - это мы ищем в последующих строках строку "------".
    Итого \_.\{-}------ обозначает "пропустить любое кол-во символов (включая перевод каретки) до тех пор пока первый раз не найдем строку ------"
  6. .* - тут нужен что бы посветить остатки строки в которой найдена строка "------".

Вот собственно говоря и все Ж:-)

Изображение пользователя ramok.

Работа с исходным кодом не выходя из gdb

Tags: •  •  •  • 

Команды удобные для работы с исходным кодом прямо из gdb.

1. Команда edit: редактировать файла на месте
Указать нужный редактор можно в переменной окружения EDITOR.
У меня указано в ~/.zshrc EDITOR=vim, и прекрасно все работает.

http://sourceware.org/gdb/current/onlinedocs/gdb_8.html#SEC54

2. Команда make: запуск make прямо из gdb
Удобно после подправки исходника, пересобрать проект.

http://sourceware.org/gdb/current/onlinedocs/gdb_3.html#SEC12

Squashfs: read-only файловая система со сжатием

Tags: •  •  •  •  •  • 

Я люблю хранить репозитарии своего дистрибутива локально на винчестере. Так не приходится искать и вставлять нужный DVD при каждой установке чего-нибудь на-посмотреть.

Но из-за такой моей лени на винчестере слишком уж много места тратится впустую, поэтому я решил сжать все 3 двд-репозитария. Мой выбор пал на squashfs, поскольку в тестах эта файловая система показала самые лучшие результаты как по скорости чтения с неё, так и по степени сжатия.

Итак, приступаем:

Изображение пользователя ramok.

Встроенный текстовый интерфейс в gdb

Tags: •  •  •  • 

В gdb существует встроенный текстовый интерфейс для отображения исходников, дизассемблированного кода и состояния регистров.
Для этого нужно запустить gdb с ключиком -tui или просто запустить gdbtui можно вызвать из командной строки gdb сочетанием клавиш ctrl-x a.

Есть возможность переключатся в одно и двух оконный режим. Клавиши ctrl-x 1 и ctrl-x 2 соответственно.
Подробности тут, хотя там больше особо интересного и нет Ж:-)

Изображение пользователя ramok.

Настройка vim для редактирования исходников ядра linux

Tags: •  •  •  •  • 

http://www.jukie.net/~bart/blog/20070209172606
Немного не кошерно, так как лучше запихнуть это все в ~/.vim/ftplugin/c.vim, но основные настройки можно брать отсюда если есть желание постить патчи для ядра.

Изображение пользователя ramok.

Как бороться с mime property в svn

Tags: •  •  • 

SVN при добавлении файла в репозиторий автоматически определяет бинарный это файл или нет. В зависимости от этого SVN будет вести себя с файлом по разному
(в частности не будет выводить diff для таких файлов).

Но бывает так что файл является текстовым, но править его как текст вы вряд ли будете.
Например ps, eps, xpm. И правке таких файлов получаются мегабайтные diff между commit, в которых трудно ориентироваться.

Для исправления этого недоразумения для файлов которые уже в репозитории можно указать напрямую MIME этого файла. Все что будет отличатся от text/* не будет интерпретироваться как текст. Например в директории img дадим всем .eps файлам правильный MIME и закомитим изменения.

$ svn propset svn:mime-type application/postscript img/*.eps
$ svn commit -m "fix mime for .eps"

Какие mime какому типу файла соответствуют можно подсмотреть в /etc/mailcap. и man mime незабудьте
прочесть Ж:-)

В долгосрочной перспективе рекомендую добавить в ~/.subversion/config этот текст
что бы все нужные propertis устанавливались автоматически.

Изображение пользователя ramok.

Вывод пользовательских структур данных с помощью printf

Tags: •  •  •  • 

Практически любой начинающий программист на C++ знает о такой возможности стандартных классов ввода/вывода C++ cin/cout как вывод/вывод пользовательских типов данных. Например если у вас есть ваш класс Widget то можно релизовать красивый вывод данных объекта этого класса:

Widget mywidget("mywidget");
cout << mywidget;
Откройте любой учебник по С++ на главе по перегрузке операторов и там доходчиво все объясняют.

Но далеко не каждый профессиональный программист знает о примерно такой же возможности в C. В GNU libc имеется API для регистрации пользовательских форматов данных для printf.

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

Изображение пользователя ramok.

Коллекция форк бомб

Tags: •  • 

Время от времени в сети мне попадаются различные реализации форк бомб, и вот накопилась небольшая коллекция Ж:-)

Предупреждение: не уверен? не запускай!


1. bash
:(){ :|:&};:

2. perl
perl -MPOSIX -e '$pid=fork; exit if $pid; setid; fork while(1)'

3. sh создаем файлик с таким содержимым и запускаем его
#!/bin/sh
$0 & $0 &

4. sh by Anonymous
echo '. ./_&. ./_'>_;. ./_
придумал вариацию на тему
. ./_`echo . ./_\&. ./_>_`
Присылайте другие варианты Ж:-)
Изображение пользователя ramok.

Просмотр diff из потока в цвете

Tags: •  •  •  •  •  •  •  • 

Часто приходится смотреть diff не из файла, а из потока, например сформированный командой cvs diff или svn diff. Удобно в таком случае просматривать в цвете в vim, не записывая в файл, а прямо в потоке.

наример:
svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kdelibs/kdecore/
cd kdecore
svn diff -r 181258:183456 kglobalaccel_x11.cpp | vim -

diff покажется красиво раскрашенным Ж:-)

PS
Изображение пользователя ramok.

перевод чисел между 10 и 16-тиричными системами исчисления в консоли

Tags: •  •  •  •  • 

#1) sh

$ printf "%x\n" 29
$ printf "%d\n" 0x2c
$ let 0xff     # в OpenBSD не работает, в GNU и FreeBSD работает
$ echo $((16#2c)) # в FreeBSD не работает, в GNU и OpenBSD работает
$ echo $((0xff)) и echo $((077))

#2) bc

$ echo "obase=16;29" | bc
$ echo "ibase=16;2C" | bc

#3) dc

$ echo 29 | dc -e "16o?p"
$ echo 2C | dc -e "16i?p"

#4) awk

$ echo 29 | awk '{printf "%x\n", $0}'
$ echo 0x2c | awk '{print strtonum($0)}'

#5) perl

$ echo 29 | perl -ne 'printf "%x\n", $_'
$ echo 2c | perl -ne 'print hex $_'

я знаю есть еще множество способов, предлагайте еще! Ж:-)
как минимум редствами bash, zsh, sed (видел и такое Ж:-)

Изображение пользователя ramok.

Конвертилка PEM Certificate в ca-bundle.crt format

Tags: •  • 

#!/bin/sh
#
# Convert PEM Certificate to ca-bundle.crt format
#
# Now this work with *BSD sed as well. fix by komar

test ! $1 && printf "Usage: `basename $0` certificate" && exit 1

# Friendly Name and Underline Friendly Name with equal signs
openssl x509 -in $1 -text -noout | sed -e 's/^ *Subject:.*CN=\([^,]*\).*/\1/p;t c' -e 'd;:c' -e 's/./=/g'
# Output Fingerprint and swap = for :
openssl x509 -in $1 -noout -fingerprint | sed -e 's/=/: /'
# Output PEM Data:
echo 'PEM Data:'
# Output Certificate
openssl x509 -in $1
# Output Cettificate text swapping Certificate with Certificate Ingredients
openssl x509 -in $1 -text -noout | sed -e 's/^Certificate:/Certificate Ingredients:/'

обнаружение проблем в работе программ с помошью strace & ltrace

Tags: •  •  •  • 

когда возникают проблемы, на помошь приходят две замечательные проги: strace и ltrace.
первая показывает все вызовы ядра, которые делает программа, вторая - все вызовы функций из динамически подключаемых библиотек.

Разместить кеш прокси-сервера SQUID на нескольких разделах

Tags: •  •  •  •  • 

Для этого можно указать в squid.conf несколько директив cache_dir, в которых указаны разные директории:
cache_dir ufs /var/spool/squid 256 16 256
cache_dir ufs /mnt/disk2/suidcache 512 16 256
...
и т.д.

RSS-материал