Monday, May 07, 2007
Переезд
Отныне блог будет доступен по более осмысленному адресу http://alexey.sveshnikov.ru/blog, RSS здесь: http://alexey.sveshnikov.ru/blog/feed/atom.
Обновите ваши закладки :)
Wednesday, March 07, 2007
Feodora Core
После Kubuntu новых впечатлений - масса!!
Во-первых, это GNOME, c которым я раньше особо и не сталкивался - я, конечно, его снесу через какое-то время, но что-то в нем все-таки есть, по крайней мере я начинаю понимать людей, которые с ним работают.
Во-вторых, все очень быстро. Пока не понимаю, как такое может быть, но по ощущениям Open Office грузится в полтора-два раза быстрее.
В-третьих, я еще не гуру линукса, для меня довольно важное значение имеет автоопределние оборудования и дефолтная конфигурация: BeryL из коробки - это клево!! И потом, наконец-то заработала функция перехода в спящий режим при закрывании крышки ноутбука!
Но есть и минусы: yum после apt-get - штука очень тормозная. Может секунд 20 выполнять поисковый запрос и еще минуту - проверять зависимости. И еще, похоже, что тулзу для понижения тактовой частоты процессора придется искать самостоятельно - при полной зарядке аккумулятора прогнозируемое время работы - полтора часа, что в полтора раза меньше времени работы из-под ubuntu.
Эх!
Labels: feodora
Tuesday, January 02, 2007
Интернет от skylink в Linux (Kubuntu + Ubiquam U-300 через bluetooth)
А команды будет всего три:
root@dainichi-laptop:~# sdptool search DUN
Inquiring ...
Searching for DUN on 00:16:39:ED:81:00 ...
Service Name: QC Dial-up Networking
Service RecHandle: 0x10000
Service Class ID List:
"Dialup Networking" (0x1103)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 8
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100
Отсюда узнаем, что существует некое устройство с MAC 00:16:39:ED:81:00, которое предоставляет сервис доступа к сети на канале 8. Далее создаем rfcomm устройство - COM порт, работающий через bluetooth:
root@dainichi-laptop:~# rfcomm bind 0 00:16:39:ED:81:00 8
root@dainichi-laptop:~# dmesg | tail
[17179616.448000] Bluetooth: L2CAP socket layer initialized
[17179616.464000] Bluetooth: RFCOMM socket layer initialized
[17179616.464000] Bluetooth: RFCOMM TTY layer initialized
[17179616.464000] Bluetooth: RFCOMM ver 1.7
Если команда rfcomm ничего не вывела на STDOUT, значит, все отлично и можно приступать к установлению PPP соединения. Я это сделал так:
root@dainichi-laptop:~# kppp
Уже в kppp добавил модем (устройство: /dev/rfcomm0; скорость: 115200; управление потоком: hardware), указал телефон (#777), аутентификацию (PAP-CHAP), и логин/пароль (mobile/internet).
Собственно, с интернетом разобрались, напоследок немного увлекательнейших манов: sdptool, dund, hcitool, l2ping, rfcomm :)
Labels: Bluetooth, Kubuntu, linux, Sky-Turbo, Skylink, Ubiquam, интернет
Saturday, December 23, 2006
Hint [10]
Вот так я проверяю список хвостов на "пингуемость":
cat proxies | (IFS=":\n"; while read ip port; do (if ping -w 1 -c 1 -q $ip>/dev/null; then echo "$ip:$port"; else echo "bad: $ip:$port"; fi)& done;) | tee proxies_pingable
В данном случае я запускаю в фоне сабшелл (if ping -w 1 -c 1 -q $ip>/dev/null; then echo "$ip:$port"; else echo "bad: $ip:$port"; fi), потому скрипт приступает к пингу следующего хоста, не дожидаясь, когда завершится проверка предыдущего. Выигрыш по времени пропорционален количеству хостов - если их 100, то практически стократный!
Правда, нужно быть аккуратным - если в списке 10 тысяч хостов, то это будет уже больше похоже на DoS.
Friday, December 22, 2006
HTTP сервер размером в 222 байта :)
while true; do nc -vv -l -p 8080 -c '( read a b c; file=`echo $b | sed 's/[^a-z0-9.]//g'`; if [ a$file = "a" ]; then ( ls | (while read f; do echo "<a href=$f>$f</a><br>"; done) ); else cat $PWD/$file; fi )'; sleep 1; done
(все это - одна команда, должна вводиться в одну строку. Тестировалось в linux/bash 3.1.17)
Вот и все :) Правда, на этот раз я опять решил отказаться от заголовков ответа, т.к. это слишком усложнит "команду", но при желании их можно взять из предыдущего примера. Этот сервер отдает все файлы, которые есть в текущем каталоге и пытается противодействовать попыткам его сменить. В случае, если запрашивается корневая директория, то управление передается своеобразному mod_index - т.е. выводится список файлов-ссылок. В конце добавлена задержка в 1 сек для того, чтобы была возможность убить его нажатием Ctrl-C.
Воистину, netcat одна из моих любимых программ!
Буду рад услышать замечания относительно сервера :)
p.s. Кто теперь осмелится заявить, что я не извращенец? :))
p.p.s. HTTP server bash netcat shell
UPD: новая версия сервера доступна здесь
hint [9] swiss army knife
на сервере
nc -l -p 8080 < file
на клиенте достаточно в браузере набрать http://192.168.0.123:8080
Собственно, все. Вообще, теоретически, работать это не должно, т.к. нет заголовков сервера - Status, Content-type и проч. Но работает, это факт.
Впрочем, чтобы никто не смог сказать, что в юниках в командной строки нельзя сделать HTTP сервер, вот полная реализация:
(echo -e "HTTP/1.1 200\nContent-Disposition: attachment; filename=gena_na.png\nContent-Type: application/octet-stream\nConnection: close\n"; cat mrxvt_screen2.png) | nc -vv -l -p 8080
(набирать это каждый раз утомительно, но ничто не мешает сделать скрипт)
Редактирование множетва файлов (diff, patch)
Например, сегодня нужно было исправить e-mail адреса в конфигах десяти разных инсталляциях одной программы. Можно было ручками пройтись и тупо редактировать файлы, но это не интересно. Вот, как это можно сделать:
mkdir _wrk && cd _wrk - создать временный каталог
cp ~/installation1/file . - скопировать в него один из файлов.
cp file file.bak - сохранить старую версию
vim file - внести необходимые изменения
diff file.bak file > ~/patch - создать патч.
cd ~ - перейти в каталог, в котором наохдятся все инсталляции
find -name file -print0 | xargs -n1 -J % echo "patch " % " ~/patch" > script найти все файлы, которые нужно отредактировать и сохранить скрипт, который сделает все необходимые изменения
cat script - убедиться, что не нашлось ничего лишнего (например, тот же файл, но в бекапах)
sh script - поехали!
Далее, необходимо убедиться в том, что все ок и удалить *.orig файлы (резервные копии, оставленные программой patch. Сделать это можно командой find -name file.orig -rm).
При составлении патча нужно быть внимательным, т.к. легко перепутать исходный и резервный файлы и получить "перевернутый" патч, который будет пытаться делать в исходном файле изменения, которые необходимо сделать в отредактированном для получения исходного. Впрочем, программа patch корректно обрабатывает эту ситуацию и не даст испортить файл. Но все равно, лучше сразу сделать все нормально.
Monday, November 27, 2006
mrxvt
Про нее и поговорим.
Исторически сложилось так, что моей первой любовью после освоения иксов стал Konsole. Динамически изменяемая кодировка, удобные настройки из меню - то, за что я продолжаю любить его и сейчас. Но у него есть и серьезный минус - скорость. На работе у меня довольно старый десктоп - P3-900, на нем переключение между 12-тью вкладками занимает какое-то время - немного, но все-таки слегка раздражает. Это было толчком к тому, чтобы отправиться на поиски альтернатив. Требования к ним такие: поддержка табов, несложное конфигурировние, очень желателен "broadcast" режим (когда все, что пишется на одну консоль дублируется на все остальные), скорость, желательно отсутсвие привязки к библиотекам вроде qt или gtk.
Когда я нашел mrxvt я был на седьмом небе от счастья. Однократного беглого прочтения мана был достаточно для того, чтобы написать сносный конфиг и начать наслаждаться жизнью. Проще показать скриншот (27Kb, 1600x1200):
Любимая цветовая схема, табы, между которыми программа переключается молниеносно, даже если она запущена удаленно. Это скриншот моего домашнего десктопа, на работе wm - enlightenment, там заголовок окна либо узкий и незаметный, либо вообще приложение работает в full-screen. Из того, что не получилось сделать "с разбега" - автоматическое переименование табов.
Но есть и минусы. Если использовать mrxvt совместно со screen, то они подвисают, оба, хотя последний все-таки поддается реанимации. Впрочем, так как я уже успел влюбиться в эту программу, буду пытаться заставить все это нормально работать - собирать из исходников свежую версию mrxvt, экспериментировать с screen..
Thursday, November 16, 2006
Hints [5..8]
#cat big_file | tee >(md5) >(wc -l) | grep "error" > big_file_errors
Т.е. все нужные действия производятся за один цикл чтения!
Таким же образом можно скопировать файл с удаленного хоста и одновременно посчитать md5:
#ssh remote_host "cat /home/user/file" | tee >(md5) > file
(в linux вместо md5 нужно писать md5sum)
[6]. Если есть открытый ssh-сеанс на удаленной машине, можно поднять туннель, прямо в этом же сеансе. Комбинация клавиш "~C" позволяет отредактировать командную строку. Например, если написать "-D 1080", то будет поднят прокси на 1080-м порту.
[7]. При работе с лог-файлами в sh-скриптах может понадобиться преобразовать дату из human-readable формата в unixtime. Делается это так:
#date -j -f "%d/%m/%Y %H:%M:%S" "18/08/2006 16:43:02" "+%s"
Опция -j запрещает команде date делать попытки установить дату.
-f - формат даты в строке, которую следует разобрать
"+%s" - отобразить дату в формате unixtime. Если этот аргумент опустить, то дата будет выведена в стандартном UTC формате (пятница, 18 августа 2006 г. 16:43:02 (MSD))
[8]. Во FreeBSD есть утилита bdes, позволяющая (де)криптовать файлы из командной строки.
#cat file | bdes > file.cripted
Enter key:
Также есть утилита enigma, но криптостойкость ее алгоритмов очень низка.
Friday, November 03, 2006
Hints [1..4]
Например:
cat access_log | perl -pe 's/.*"(POST|GET.+?)"/$1/g;' > urls
[Ctrl-T]
load: 2.72 cmd: perl 9210 [running] 1.11u 2.44s 10% 3188k
[2]. Если написать
#mysql -u user -ppassword base
То выполнив ps axl можно увидеть пароль.
Если передавать его не через командную строку, а через переменную окружения MYSQL_PWD, то другим пользователям пароль виден не будет:
MYSQL_PWD=passsword mysql -u user base
Но от рута не спрячешься:
#ps axe
[3]. Во FreeBSD случайные пароли можно сгенерировать следующей командой:
#jot -r -c 8 a z | rs -g 0 8
[4]. Если наблюдать за файлом с помощью командый tail -f file, а файл периодически ротируется, то наблюдение остановится. Нужно использоватеь -F, чтобы tail отслеживал изменение дескриптора файла с заданным именем. BTW, в последних версиях FreeBSD команда tail позволяет указывать несколько файлов в аргументе -f.
Tuesday, October 24, 2006
Сохранение POST-запросов в apache
Устанавливается он элементарно apxs -cia mod_security.c (см документацию, правда, для его работы в наиболее удобном, "Concurrent", режиме логгирования, нужен модуль unique_id. После установи модуля следует добавить следующую секцию в httpd.conf:
<IfModule mod_security.c>
SecAuditEngine On
# У mod_security есть два механизма логгирования, Concurrent - более быстрый и продвинутый.
SecAuditLogType Concurrent
# Здесь будет храниться индекс - файл, по структуре похожий на access_log + идентификаторы, по которым можно найти полную информацию в StorageDir
SecAuditLog /var/log/www/audit/index
# Тут хранятся все данные запросов. Каждый запрос в отдельном файле. Запросы разнесены по каталогам (вместе все запросы одной транзакции, вместе все транзакции одного дня)
SecAuditLogStorageDir /var/log/www/audit/data/
# Наиболее полное логгирование (man)
SecAuditLogParts ABCDEFGHZ
# Добавить обработку POST данных.
SecFilterScanPOST On
SecFilterEngine On
# Следующие строки нужны для сохранения загруженных на сервер файлов:
SecUploadDir /var/log/www/audit/upload
SecUploadKeepFiles On
</IfModule>
Включать это имеет смысл при подозрении, что кто-то пытается использовать вашу систему не по назначению, теперь любой шаг проходимца будет записан.
p.s. Работоспособность конфига проверялась в apache 1.3.37, mod_security 1.9.4, но работать должно и в 2.0/2.0
Sunday, October 08, 2006
KOI8-R локаль в [K]Ubuntu
UPD: обновлено для Ubuntu 6.10
"А по улицам там ходят медведи с балалайками и разговаривают на KOI8-R" (почти BOR). Так вот, я и есть такой медведь. И когда мне дают дистрибутив с локалью UTF8 по умолчанию, я буду все переделывать. Для себя и для других медведей - инструкция:
а) Все начинается с генерации локали ru_RU-KOI8-R, делается это командой locale-gen. В качестве парамета ей целесообразно указать язык (ru), иначе она будет генерировать локали всех языков (/usr/share/i18n/locales/*), но только для кодировки UTF-8. Для языка ru будут сгенерированы следующие локали:#cat /var/lib/locales/supported.d/ru
ru_RU.UTF-8 UTF-8
ru_UA.UTF-8 UTF-8
Следующими командами можно заставить сгенерировать ее локаль для кодировки KOI8-R:#sudo -s sh -c 'echo "ru_RU.KOI8-R KOI8-R" >> /var/lib/locales/supported.d/ru'
#sudo locale-gen ru
Generating locales...
ru_RU.KOI8-R... done
ru_RU.UTF-8... done
ru_UA.UTF-8... done
Generation complete.
б) Далее, обновляем переменные окружения. Имя конфиг-файла зависит от версии Ubuntu:
Для Ubuntu <6.10 sudo vim /etc/environment
Ubuntu 6.10 sudo vim /etc/default/locale
В нем пишем: LANG="ru_RU.KOI8-R"
LANGUAGE="ru_RU:ru:en_GB:en"
С русификацией иксов покончено
в) Приступаем к консоли. Пишем:apt-get install console-cyrillic
В файл .profile добавляем:loadkeys /usr/share/console-cyrillic/ru-koi8-r.kmap
consolechars -f /usr/share/console-cyrillic/UniCyr_8x14.psf -m /usr/share/console-cyrillic/koi8-r.acm.gz
Готово.
У меня заработало все, кроме mcedit, который пришлось пересобрать. (В Kubuntu 6.10 заработал и mcedit)
Tuesday, August 29, 2006
ssh и анонимность
И еще. Можно работать на удаленном хосте, не светясь ни в auth.log, ни в `who` ни в `last`, без возможности посмотреть, что творится в консоли через watch - для этого достаточно запускать ssh-сессию так: ssh user@host "bash".
Мораль здесь одна: если у человека есть ssh аккаунт на машине, то контроллировать его действия практически невозможно.