LINUX.ORG.RU

Сообщения disarmer

 

Поиск файлов по pcre regexp

Форум — Development

Привет

Посоветуйте, пожалуйста, модуль для perl, для поиска файлов по pcre регулярному выражению. То есть типа

perl -E 'say join "\t", glob "/etc/*"'
, но с обычными perl-регекспами, а не этими убогими wildcard.

Или посоветуйте как написать его, так, чтобы при поиске например по регекспу '/etc/nginx/\w+\.conf' он открывал только нужные директории, и не ходил, например в /var? Можно конечно пилить регулярку по слешам, и проверять похоже ли эта часть на регексп, но это ограниченно.

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

 , ,

disarmer
()

bash raw string

Форум — General

Привет. Я правильно понимаю, что никак не могу в одну строку в консоли передать в stdin команду, чтобы bash её совсем никак не трогал? Я хочу передать строку как есть, со всеми кавычками и $.

То есть, например передать в cat всё до конца строки. Кавычки не подходят, потому что не хочется при каждом вводе их экранировать(моя строка может содержать кавычки). << EOF пытается интерполировать переменные.

Самое близкое, что нашёл:

cat <<< string
Но к сожалению работает только до пробела, два слова уже никак без кавычек.

Была идея передавать в комментарии, но он нигде не остаётся, даже в /proc/self/cmdline

Если это важно, пишу однострочник для мультиплексирования ssh. С кавычками всё ок, но их надо каждый раз экранировать.

 , ,

disarmer
()

Изменить clocksource

Форум — Admin

Привет ЛОР!

Мы поддерживаем форк опенсорсной игры teeworlds. В коде by-design N раз в секунду вызывается функция gettimeofday. В последнее время на сервере увеличилась нагрузка на cpu от инстансов игры и появился iowait до 5%. В коде за это время ничего глобального не менялось. Подцепившись strace к инстансу, видно что часто вызывается сискол gettimeofday.

gettimeofday({1389771308, 455672}, NULL) = 0

Сравнив выхлоп strace с сервера с выхлопом с десктопа, заметил что на десктопе этот сискол не дёргается.

Подозреваю, что различие в том, то на десктопе в качестве clocksource используется tsc, а на сервере в процессе загрузки ядро отказывается использовать tsc:

tsc: Marking TSC unstable due to TSC halts in idle

Пробовал оба доступных на сервере источника hpet и acpi_pm, сисколы не изчезают.

Никак не могу активировать tsc. Пробовал параметр ядра force_tsc_stable=1. Даже если передать ядру опцию clocksource=tsc:

Override clocksource tsc is not HRT compatible. Cannot switch while in HRT/NOHZ mode

 , ,

disarmer
()

Подсчёт файлов по директориям

Форум — Admin

Я тут пытался найти кто большую часть inode забрал на разделе с ext4. Хочется вывод типа такого:

1017         /home/disarmer/pg
1017         ............../pg/t
951          ................./t/base
40           .................../global
4            .................../pg_clog
2            .................../pg_multixact
1            .................../pg_notify
4            .................../pg_stat
1            .................../pg_subtrans
8            .................../pg_xlog
То есть вывод аггрегированного количества файлов в директории и вложенных директориях до определённой глубины. Написал для этого однострочник:
find ~ -type f |perl -we 'my %h;while(<STDIN>){chomp;my$s=$ARGV[0]?-s$_:1||0;my@p;@_=split"/",$_,$ARGV[1]+2||4;pop@_;for(@_){push@p,$_;$h{join"/",@p}+=$s}};my$p;for my$k(sort{$a cmp$b}keys%h){$_=$k;for my$c(split"/",$p){$c||next;s#^/$c## or$_=$k and last};$_=("."x length$p).$_ if$_ ne$k;$p=$k;$p=~s#/[^/]*$##;printf"%-12i %s\n",$h{$k},$_}' 0 5
Работает, если первым параметром передать 1 то будет считать количество байт вместо количества файлов.

А был ли какой то путь попроще получить похожее стандартными средствами?

 , ,

disarmer
()

BitTorrent client

Форум — Admin

Привет.

Посоветуйте, пожалуйста, систему раскладки файлов на основе протокола bittorent(или как её сваять). Хочется раскладывать с одной машины на много одну директорию максимально быстро и эффективно. Лучше всего инициировать раскладку по обновлению файла в директории(inotify?).

Сейчас я себе это представляю как по одному лёгкому торрент клиенту на каждой машине, но не понятно как на мастере реинициировать раздачу при обновлении файла.

Или, если ничего готового нет, посоветуйте хотя бы максимально лёгкий торрент-клиент, работающий в качестве демона.

 , ,

disarmer
()

multiseat desktop

Галерея — Рабочие места

Всем привет! Поделюсь еще одним способом организации multiseat desktop (на xephyr).

Понадобилось мне настроить второе рабочее место дома. Решил не заморачиваться покупкой отдельного системника по ряду причин(шум, место, время на включение, потребление энергии, затраты на поддержку в актуальном состоянии). Купил второй монитор и клавиатуру+мышь. На видеокарте есть DVI и HDMI.

Сначала пытался настроить отдельный X-сервер на втором мониторе, но так как у меня оказались одинаковые клавиатуры, в половине случаев они менялись местами. Это оказалось не так то просто, с точки зрения настройки самого X сервера и связанных компонент(DM). К тому же каждая попытка требовала перезапуска DM и нередко ломала первый X-сервер. Забил на это решение и настроил с помощью Xephyr. Как выяснилось, он не требует никаких конфигов, может быть запущен всего несколькими командами.

На скриншоте(пришлось уменьшить, реальный размер 1920x2160), собственно, два рабочих пространства, физически они находятся на разных мониторах и управляются разными комплектами HID устройств. В качестве DE - дефолтный mate с тёмной темой. На нижнем рабочем столе опенсорсная игрушка teeworlds и inkscape на фоне. Терминала(tilda) не видно, выпадает по хоткею на полный экран.

Вот скрипт запуска, может кому пригодится:

#!/bin/bash
set -e
mo_l=/dev/input/by-id/usb-15d9_USB_OPTICAL_MOUSE-event-mouse
mo_r=/dev/input/by-id/usb-A4TECH_USB_Device-if01-event-mouse
kb_l=/dev/input/by-id/usb-USB_USB_Keykoard-event-kbd
kb_r=/dev/input/event0
KBD="evdev,,device=$kb_l,xkbrules=xorg,xkbmodel=evdev,xkblayout=ru,en;";
MOUSE="evdev,5,device=$mo_l";
bash -c 'sleep 5;setxkbmap -print | sudo -u sec_user xkbcomp - :1'&
DISPLAY=:0 sudo /usr/sbin/Xephyr :1 -ac -br -noreset -xinerama -tst -zaphod -nolisten TCPIP -screen 1920x1080+0+0 -keybd $KBD -mouse $MOUSE -dpi 92 &
sleep 1;
wmctrl -r Xephyr -e 0,0,1050,1920,1050 #G,X,Y,W,H
DISPLAY=:1 sudo -u sec_user mate-session

Из недостатков пока заметил, что при работе в inkscape внутри xephyr, иногда падает xephyr с какими то невнятными ошибками.

>>> Просмотр (1400x1575, 1443 Kb)

 , ,

disarmer
()

btrfs и память

Форум — General

Использую на одном из разделов на домашнем сервере btrfs. В последнее время наблюдаю зависания насмерть несколько раз в неделю. В эти моменты порты открыты (telnet коннектится к порту ssh, но баннер не приходит). Судя по шуму кулера процессор полностью загружен.

Не грешил на btrfs, но в atop увидел следующее: http://yadi.sk/d/A3F4EK0FBYrNL (приложения используют в сумме несколько процентов памяти, но свободной памяти нет)

Монтируется так: /dev/sda7 /mnt/stor btrfs rw,noatime,compress=lzo,space_cache 0 0

Что это может быть?

 

disarmer
()

fs over webdav

Форум — General

Привет!

Хочу складывать некий бэкап на яндекс.диск. Монтирую по webdav. Использую encfs для шифрования. rsync-ается всё отлично, пока не доходит дело до директорий с симлинками(webdav их не умеет). Хочется сохранить симлинки. Как поступить? Есть ли какая то фс поверх фс, не умеющей симлинки?

Ну и заодно, можёт есть что-то такое же, поддерживающее прозрачное сжатие?

 , , , ,

disarmer
()

Посоветуйте движок форума

Форум — Talks

Привет. Посоветуйте минималистичный движок для форума на perl. Хочется чтобы он умел работать по fastcgi и в качестве бекенда использовал postgresql.

 , , ,

disarmer
()

Mail.ru жжёт

Форум — Talks

http://habrahabr.ru/company/mailru/blog/158603/

И напоследок расскажу о небольшом хаке, который тоже существенно увеличил производительность. Мы сделали линк с /dev/random на /dev/urandom. Работает быстрее, потому что /dev/random блокирующий, /dev/urandom не блокирующий. Следовательно, I/O wait сокращается.

Ололо, поменять ГСЧ на ГПСЧ это ж надо додуматься. Еще от этого оказывается iowait «сокращается».

 , ,

disarmer
()

Mate слушает мой порт

Форум — Desktop

Порядка полутора лет пользуюсь mate-desktop (форк гномадва). И вот недавно стал замечать что она начала слушать tcp-порт:

netstat -4lnp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:57745           0.0.0.0:*               LISTEN      376/mate-session    

«Фича» появилась после одного из последних обновлений, проверял на другой машине - два месяца назад не было такого. В манах/конфигах не нашёл никакого упоминания. Зачем она это делает? Как раскопать / отключить это?

И да, номер порта рандомно выбирается при запуске, все что замечал были больше 50000

 , ,

disarmer
()

SQL-запрос (postgresql / tsearch2)

Форум — Development

Помогите поправить запрос, уже что то не могу сообразить. Простая таблица: id | player | message | time.

Хочу посчитать количество употребления слов в таблице за последние сутки таким запросом:

select nentry,word AS normal,to_tsvector('ru',word) AS inf
from ts_stat('select to_tsvector(message) from tw_chat where time>now()-INTERVAL ''1 week''')
WHERE nentry>1 AND length(word)>=4 
ORDER BY nentry DESC LIMIT 2000

В общем он работает как нужно, возвращает таблицу в виде «количество слов | слово | начальная форма слова (to_tsvector('ru',word))».

Хочется сгрупировать в этом результате все слова по их начальной форме, То есть, например, чтобы слова «прыгай» и «прыгал» образовали одну запись вместо двух. Обычный GROUP BY не подходит потому что в результате мне нужна первая и вторая колонка, следовательно GROUP BY можно делать только по ней. Во второй колонке хочу получить употребленное слово этой формы(видимо любое из слов «прыгай» и «прыгал» в примере)

 , , tsearch2, tsvector

disarmer
()

Неблокирующие запросы к БД

Форум — Development

Подскажите пожалуйста, есть ли способ делать неблокирующий execute в perl DBI?

пример:

my $sth=$dbh->prepare("select 99,pg_sleep(2)");#некий длительный запрос
$sth->execute;#в этом месте ждём выполнения запроса
while(@_=$sth->fetchrow_array){
	say @_;
}

Хочется что то вроде такого:

my $sth=$dbh->prepare("select 99,pg_sleep(2)");
$sth->execute_async;#отпраляем запрос и возвращаем управление
#Делаем тут что то полезное ресурсоемкое, а БД в то же время формирует результат
while(@_=$sth->fetchrow_array){#а вот тут уже ждем, если результат еще не готов
	say @_;
}

 , , ,

disarmer
()

Объединение stdout двух команд

Форум — General

Подскажите, пожалуйста, как объединить вывод двух команд в один поток (без использования файла)?

Пытаюсь грепнуть логи nginx и обработать выбранные строки. Проблема в том, что старые логи архивируются в .gz и приходится получать строки из текущего лога с помощью cat, а из архивированных - с помощью zcat:

sudo cat /var/log/nginx/access.log       | grep 'GET /music/?id'| cut -d '"' -f 2| sort -u|cut -d '=' -f 2 | cut -d ' ' -f 1 | grep -E [a-f0-9]{32}
sudo zcat /var/log/nginx/access.log.*.gz | grep 'GET /music/?id'| cut -d '"' -f 2| sort -u|cut -d '=' -f 2 | cut -d ' ' -f 1 | grep -E [a-f0-9]{32}

Можно писать вывод во временный файл, а потом удалять, но это некрасиво

 

disarmer
()

chromium и разделяемая память

Форум — General

Установил postgresql. увеличил размер его общего буфера до 256MB, изменил параметры ядра:

kernel.shmmax = 340000000
kernel.shmall = 83000
kernel.shmmni = 83000

После этого установленный chromium перестал отрисовываться после запуска (пустое окно).

Если остановить postgres то chromium работает нормально, опять же до запуска postgresql.

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

http://dev.chromium.org/memory-usage-backgrounder

In Memory Cache: Chrome currently uses a shared memory cache across all processes. Maximum size is currently 32MB, partitioned across the active processes.

Но 256 MB (postgres) + 32 MB (chromium) < 340000000 B (shmmax)

Как это можно исправить?

 , , ,

disarmer
()

Шлейф за курсором мыши

Форум — Desktop

Можно ли сделать шлейф за курсором мыши в иксах? А-ля win98

arch + e-17

 , ,

disarmer
()

Тормоза с БД

Форум — Web-development

Подскажите, пожалуйста, есть средних размеров БД на mysql и средней сложности запрос к ней.

Генерация web-страницы занимает слишком долгое время (40-60 с), при том что оно тратится именно на обращение к БД с этим запросом:

$ts=microtime(true);
$result=mysql_query($sql);
printf('<script>alert("%.6f s")</script>',microtime(true)-$ts);

Фишка в том что этот же запрос в консольном mysql клиенте и в phpmyadmin отработывает меньше чем за секунду, с теми же результатами.

При обращении к той же странице выполняется еще ряд мелких sql запросов, но они отрабатывают очень быстро.

Тормоза возникают именно при таком запросе и только на сайте. В чем может быть проблема?

SELECT DISTINCT schools.name_sch, schools.num_sch, parents.tel_sms, class.class, parents.fio, parents.fio1, parents.fio2, account.login, account.status, parents.apay, parents.money, account.printed
FROM parents, class, account, schools, cards
WHERE 1 
AND account.num_sch = schools.num_sch
AND account.parents = parents.tel_sms
AND account.class_id = class.id
AND cast( class.class AS signed ) <12
AND parents.tel_sms LIKE '%905123%'
ORDER BY fio

 ,

disarmer
()

Perl сломался после обновления

Форум — General

вчера пришли обновления до perl 5.16, теперь при запуске скриптов perl умирает:

[d@b ~]$ uname -a
Linux black 3.3.7-1-ARCH #1 SMP PREEMPT Mon May 21 22:39:59 UTC 2012 i686 GNU/Linux

[d@b ~]$ perl -e 'use Encode'
Perl API version v5.14.0 of Encode does not match v5.16.0 at /usr/share/perl5/core_perl/XSLoader.pm line 92.
Compilation failed in require at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

[d@b ~]$ perl -e 'use IO'
IO object version 1.25_06 does not match bootstrap parameter 1.25 at /usr/lib/perl5/core_perl/DynaLoader.pm line 213.
Compilation failed in require at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

[d@b ~]$ grep VER /usr/lib/perl5/site_perl/IO.pm 
our $VERSION = "1.25";
    
[d@b~]$ grep VER /usr/lib/perl5/site_perl/IO/Handle.pm 
$VERSION = "1.28";

Как так вышло, что части одного модуля имеют разные версии? делал sudo pacman -S perl, проблему не решает. Что еще можно сделать?

 5.16, , ,

disarmer
()

RSS подписка на новые темы