25.12.2008

each func

  while ( my ($key, $value) = each(%hash) ) {
  print "$key => $value\n";
  }

23.12.2008

sub hup

sub hup {
my $self = shift;
 
 return $self->status() if kill('HUP', $self->__pid());

12.12.2008

proxy var

#proxy.sh
export http_proxy=http://host.com:port/
export ftp_proxy=http://host.com:port/
export no_proxy=.domain.com
export HTTP_PROXY=http://host.com:port/
export FTP_PROXY=http://host.com:port/

#proxy.csh
setenv http_proxy http://host.com:port/
setenv ftp_proxy http://host.com:port/
setenv no_proxy .domain.com
setenv HTTP_PROXY http://host.com:port/
setenv FTP_PROXY http://host.com:port/

02.12.2008

$PS1

[\u@\h \W]\$

01.12.2008

screenrc

vbell off
defscrollback 5000
hardstatus alwayslastline
hardstatus string '%{= kG}%-Lw%{= kW}%50> %n*%f %t%{= kG}%+Lw%< %{= kG}%-=%D %m/%d/%y | %C:%s %A | %1`%{-}'
screen -t main
screen -t maillog tail -f /var/log/maillog
screen -t messages tail -f /var/log/messages
screen -t vim vim
screen -t top top
select 0

&for bash

for i in $( ls ); do echo $i; done;

for (( c=1; c=$c ; c++ )) ; do echo "eat $c cats" ; done

for i in $(seq 0 5 20) ; do echo "eat $i cats" ; done

for i in {0..20} ; do echo "eat $i cats" ; done

for i in ./* ; do echo ${i}; done

&while perl

perl -e '$_=1;while ($_ <= 10) { print; $_++;}'

&while bash

i=1; while [ "$i" -le 3 ] ; do i=$(($i+1)); echo $i ; done

24.11.2008

perl var

$_      область ввода или поиска по образцу, используемая по умолчанию
$. номер текущей считанной строки из текущего входного файла
$/ разделитель входных записей (обычно - символ новой строки \n)
$] номер версии Perl (например, 5.008007)
$0 имя файла текущей исполняемой Perl-программы
$@ сообщение об ошибке при выполнении в блоках eval или do
$! текущий номер ошибки или сообщение об ошибке
$^E уточненное сообщение об ошибке
$^T время начала выполнения программы (в формате функции time)

При выполнении сложения двух положительных плавающих чисел происходят следующие действия

  1. выравнивание порядков. Определяется число с меньшим порядком. Затем последовательно его порядок увеличивается на единицу, а мантисса делится на 2, пока порядки двух чисел не сравняются. Аппаратно деление на 2 соответствует сдвигу двоичного кода мантиссы вправо, так что эта операция выполняется быстро. При сдвигах правые разряды теряются, из-за этого может произойти потеря точности (в случае, когда правые разряды ненулевые);
  2. сложение мантисс;
  3. нормализация: если мантисса результата стала равна или превысила двойку, то порядок увеличивается на единицу, а мантисса делится на 2. В результате этого мантисса попадает в интервал 1 m<2. При этом возможна потеря точности, а также переполнение, когда порядок превышает максимально возможную величину.

Несколько примеров представления вещественных чисел в плавающей форме: 1.

  1. 1.0 = +20*1.0

    Здесь порядок равен 0, мантисса - 1. В двоичном коде мантисса состоит из одних нулей, так как старший разряд мантиссы (всегда единичный) в коде отсутствует. Порядок хранится в двоичном коде в смещенном виде, он равен 127 в случае float и 1023 в случае double;

  2. 3.5 = +21*1.75

    Порядок равен единице, мантисса состоит из трех единиц, из которых в двоичном коде хранятся две: 1100...0; смещенный порядок равен 128 для float и 1024 для double;

  3. 0.625 = +2-1*1.25

    Порядок отрицательный и равен -1, дробная часть мантиссы равна 0100...0; смещенный порядок равен 126 для float и 1022 для double;

  4. 100.0 = +26*1.5625

    Порядок равен шести, дробная часть мантиссы равна 100100...0; смещенный порядок равен 133 для float и 1029 для double.

системы остатков

Вернемся к рассмотрению кольца Zm. Выберем по одному представителю из каждого класса эквивалентности, которые составляют множество Zm. Систему таких представителей называют системой остатков. Традиционно рассматривают две системы остатков: неотрицательную систему и симметричную систему. Неотрицательная система остатков состоит из элементов

0,1,2,3, ...m-1.

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

k = целая часть(m/2)

тогда симметричная система остатков при нечетном m состоит из элементов

-k, -k+1, ..., -1, 0, 1, ..., k-1, k,

а при четном m - из элементов

-k, -k+1, ..., -1, 0, 1, ..., k-1.

Например, при m = 5 симметричная система остатков состоит из элементов

-2, -1, 0, 1, 2.

21.11.2008

mass copy perl

perl -e 'my $d=`date '+%H_%d%m%y'`;@_=`ls -1|grep log\$`; foreach $_(@_) { chomp $_; print "copy $_ to $_\.$d\n"; system ("cp -v $_ $_\.$d");} ;'

13.11.2008

find sendmail one-line script

find /home/sed/ueda/ -type f -exec cat {} \;|sendmail sed

perl short spam script

perl -we '@_=`find /tmp/mail -type f`;foreach $_(@_){chomp; print "spaming $_\n"; system ("cat $_|sendmail user");}'

for bash:

for i in /var/SPAM/* ; do cat $i | sendmail sed ; echo "spaming $i"; done

ssh-keygen

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa user@remote.host

07.11.2008

VIM

:5 или 5G - перемещает курсор на 5 строку.
% - перемещает курсор на парную круглую, фигурную или квадратную скобку. Пары можно задать командой :set matchpairs.
gg - перемещает курсор на первую строку.
G - перемещает курсор на последнюю строку.
H, M, L - перемещают курсор в начало, середину и конец видимой части текста.
:s/text/new_text/ - Заменяет первый встреченный образец text в текущей строке на new_text.
:s/text/new_text/g - Заменяет все образцы text в текущей строке на new_text.
:1,$s/the/THE/g - Начиная с первой строки до последней (строки $), заместить все встреченные the на THE.
:'a,.s/.*/ha ha/ - От строки, помеченной меткой a, до текущей строки, заменить любой текст на строку "ha ha".
:%s/\s\+$// - удаляет пробельные символы в конце строк во всем файле.
:%s/\([^,]*\), \(.*\)/\2 \1/ - преобразовывает
Doe, John
Smith, Peter
в
John Doe
Peter Smith

:r[ead] filename - вставляет содержимое другого файла в текущий.

ssh backup

tar -cf - storage | ssh backup-server.domain.local dd of=/storage/backup/backup.tar

06.11.2008

неубиваемый


while :; do echo moo; sleep 3; done &

while loop

while : ; do echo Mouuu ; done

31.10.2008

bashrc

export PS1=[\u@\h \W]\$
umask 022
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls -lah $LS_OPTIONS'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias sr='echo $?'
alias gr='grep'
alias grep='grep --color'
alias gri='grep -i'
alias cw='chown -R -v'
alias it=iftop
alias t='tail'
alias tf='tail -f'
alias tail='tail -n 20'
alias play='mpc play'
alias next='mpc next'
alias prev='mpc prev'
alias vol='mpc volume'
alias pause='mpc toggle'
alias ubz='tar xjvf'
alias ugz='tar xzvf'
alias u='ps aux'
alias mq='mailq'
alias shproc='ps aux|grep'
alias crw='chown -R -v'
alias v='vim'

28.10.2008

приведение debian в божеский вид

apt-get install gcc libc6-dev make g++-3.4 libstdc++2.10-dev libstdc++2.10-glibc2.2

25.10.2008

simple mailer

#!/usr/bin/perl -w
use strict;
my $dir="/var/SPAM/";
my @mail=`ls -1 $dir`;
#print "This messages will be sent:\n@mail";
my $msg;
foreach $msg(@mail)
{
chomp $msg;
print "Spaming msg $dir$msg\n";
system ("cat $dir$msg | sendmail sed");

}

24.10.2008

Mail Builder

#!/usr/bin/perl -w
use strict;
use Mail::Builder;
my $mail = Mail::Builder->new();
$mail->from('tester@localhost.ru','tester');
$mail->to('sed@localhost.ru','sed');
$mail->subject('Test message unicode');
$mail->htmltext('

Moeeeoooowwwwww

... ');
$mail->attachment('blblabla.dpf');
print $mail->stringify;

22.10.2008

Firewall + transparent squid на FreeBSD 7.0

Качаем и устанвливаем по хэндбуку, ничего сложного там нет. Когда дойдете до выбора пакетов выбрать kernel-developer (вроде бы так называется). Ну естественно разрешить логин по ssh и настроить сетку тоже лучше с самого начала.

Заходим в /sys/i386/conf/ (надеюсь вы установили исходники ядра )
#cd /sys/i386/conf
#
cp GENERIC /root/FIREWALL
#копируем конфиг ядра в рутовую папку, пусть он там валяется
#ln -s /root/FIREWALL #делаем символьную ссылку в /sys/i386/conf

Дописываем в конец нашего конфига ядра (на лисяре есть хорошая статья по конфигурации ядра)
#ee /root/FIREWALL
#my conf
options INCLUDE_CONFIG_FILE
#firewall
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=5
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET
options IPFIREWALL_NAT #ipfw kernel nat support
options LIBALIAS
#options IPFIREWALL_DEFAULT_TO_ACCEPT
Опции нужны для файрвола, описывать их все мне лень.

Дальше заходим и пишем в /etc/make.conf (перед этим лучше ознакомиться со статьей, но имейте ввиду, что там конфигурация для версии 6.0)
#ee /etc/make.conf
CPUTYPE?= #смотри man make.conf
CFLAGS=-O1 -pipe #опции оптимизации
CFLAGS+= -DIPFIREWALL_NAT
NO_PROFILE=true
NO_CPU_CFLAGS=false
NO_CPU_COPTFLAGS=false

COMPAT4X=true

#чтоб не собирать всякую хрень
MAKE_KERBEROS4=false
MAKE_KERBEROS5=false
NO_GAMES=true
NO_BLUETOOTH=true
NO_DICT=true
NO_INET6=true

#опции для перла
PERL_VER=5.8.8
PERL_VERSION=5.8.8
PERL_ARCH=mach
NOPERL=no
WITH_PERL=yes
WITHOUT_PERL=no
WITH_BIND_LIBS=yes

DOC_LANG= en_US.ISO8859-1 ru_RU.KOI8-R
#опции для апдейта
SUP_UPDATE=
SUP= /usr/bin/csup
SUPFLAGS= -g -L 2 -z
SUPHOST= cvsup4.ru.FreeBSD.org
SUPFILE= /usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile

KERNCONF=FIREWALL #или имя конфига вашего ядра

#можно указать локальное зеркало
MASTER_SITE_OVERRIDE?= \
ftp://my.local.mirror/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/


Создаем и редактируем /etc/src.conf
#ee /etc/src.conf
WITHOUT_DICT="yes"
WITHOUT_GAMES="yes"
WITHOUT_HTML="yes"
WITHOUT_INET6="yes"
WITHOUT_INET6_SUPPORT="yes"
WITHOUT_USB="yes"
WITHOUT_X11="yes"
NO_BLUETOOTH="yes"
KERNCONF=FIREWALL

Дальше добавляем строчки файрвола в /etc/rc.conf (опять шлю на лисяру)
#ee /etc/rc.conf
firewall_enable="YES"
firewall_type="/etc/rc.firewall"
firewall_logging="YES"
gateway_enable="YES"

Пишем скрипт для запуска файрвола указаный в /etc/rc.conf (просто привожу сдесь свой, для прозрачного проксирования на сквида, за разьяснениями см статью выше)
 
#ee /etc/rc.firewall
#!/bin/sh
FwCMD="/sbin/ipfw"
LanOut="rl0" #out interface
LanIn="fxp0" #in interface
IpOut="10.83.32.24" #out ip
IpIn="192.168.0.1" #in ip
NetMask="24" #my mask
NetIn="192.168.0.0" #inner network
#ip_lan="192.168.0" #template for users ip address
${FwCMD} -f flush
${FwCMD} add check-state
#rules for local interface
${FwCMD} add allow ip from any to any via lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
#go to squid
${FwCMD} add 10 fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
#allow all established conections
${FwCMD} add allow tcp from any to any established
#allow all in trafic (for server)
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}
#allow DNS
${FwCMD} add allow udp from any 53 to any via ${LanOut}
#allow ftp
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}
#allow ssh
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
#allow all tcp for LanIn
${FwCMD} add allow tcp from any to any via ${LanIn}
#allow all udp for LanIn
${FwCMD} add allow udp from any to any via ${LanIn}
#allow all icmp for LanIn
${FwCMD} add allow icmp from any to any via ${LanIn}
#allow icq
${FwCMD} add allow tcp from ${NetIn} to any 5190 in via ${LanIn} setup
#NAT rules
NatIP="10.83.32.24"
${FwCMD} nat 123 config ip ${NatIP} log
${FwCMD} add 20 nat 123 ip from 192.168.0.0/24 to any
${FwCMD} add 30 nat 123 ip from any to ${NatIP}
#deny for all
#${FwCMD} add deny ip from any to any (можно не прописывать так как это правило собирается по дефолту если не указано обратное)

Ставм cvsup

#cd /usr/ports/net/cvsup-without-gui
#make install clean
Теперь апдейтимся (перед этим лучше прочесть хэндбук)
#cd /usr/src
#make update
обновляет системные исходники и дерево портов, займет довольно много времени, но без апдейта у меня многие порты не собирались, да и вообще свежачок
# rm -rfv /usr/obj #удаляем ненужный хлам
# make -j4 buildworld
# make -j4 buildkernel
собираем ядро и мир
# make installkernel
ставим ядро
#reboot
грузимся с новым ядром
#shutdown now (или при загрузке выбрать 4й пункт)
входим в сингл юзер моде (при этом сетка как и все сервисы вырубится так что по ssh сидеть не получится, придется перется к серваку)
# mount -u /
# mount -a
монтируем корень и остальную хрень
# mergemaster -p (можно и не делать)
# cd /usr/src
# make installworld
устанавливаем мир
#make delete-old
удаляем старье всякое
# mergemaster
# reboot
ребутаемся и грузмся обновленными
# cd /usr/src
# make delete-old-libs
удаляем старые библиотеки
Все, с обновлением пока покончили, теперь ставим сквида

#cd /usr/ports/www/squid30/
#make config
В менюшке выбираем SQUID_IPFW для поддрежки прозрачного прокси и можно еще SQUID_ICAP если потом захочется прикрутить антивирус. Далле
#make install clean
открываем /etc.rc.conf и добавляем туда squid_enable="YES"
Редактируем /usr/local/etc/squid/squid.conf, нас инткересуюи теги acl и http_access , можно их просто олностью удалить и вместо них написать
include /usr/local/etc/squid/acl.conf
include /usr/local/etc/squid/http_access.conf
и создать эти два файла
#ee include /usr/local/etc/squid/acl.conf
# TAG: acl
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/24 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

#ee /usr/local/etc/squid/http_access.conf
# TAG: http_access
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow localnet
http_access deny all

Осталось только создать кэш сквида
#squid -z
И запустить
#squid
Все


11.10.2008

split & join

use strict;
my $glue = "A";
my @pieces = qw/B C D/;
my $result = join $glue, @pieces;
print "@pieces\n";
print "$result\n";

my $x = join ":",4,6,8,10,12;
print "$x\n";
my @values = split /:/,$x;
my $z = join "-", @values;
print "$z\n";

каша )))))

use strict;
$_ = "white pretty cat\n";
print;
if (s/(\w+) (\w+)/$2, $1/) { print "Begin changing $2 cat!!!\n";
}
s{^}{huge, };
s#,.*te##; s<\w+$>{($`!)$&};
s[\s+(!\W+)]{$1 }; s%huge%Fat%;
s[$]{asaur !!!\n}; s*^*AAAA!!! *;
print; s/(\bc.*\b)/\U$1/gi; print;

search and change

$_ = "I love my prety cat.\n";
print;
print "But when i lose my job.\n";
s/love/eat/;
print;

Выод:
I love my pretty cat.
But when i lose my job.
I eat my prety cat.

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

use strict;
if ("Hello there, dody" =~ /\s(\w+),/) {
print "matched word - '$&'.\n";
print "all words was - ($`)($&)($').\n";
}

предшествующая строка $` само совпадение $& и следующая строка $'
Вывод:
matched word - ' there,'.
all words was - (Hello)( there,)( dody).

Эти переменные немного тормозят обработку остальных регулярок, поэтому если нужно использовать только $& можно просто заключить всю регулярку в скобки и воспользоваться ссылкой примерно так:
if ("Hello there, dody" =~ /(\s(\w+),)/) {
print "matched word - '$1'.\n";
}

Соханение специальных переменных в памяти

#!/usr/bin/perl -w
use strict;
$_ = "Hello there, neightbor";
if (/(\w+) (\w+), (\w+)/) {
print "The first words was \"$1\" \"$2\" \"$3\".\n";
}
my $first_word = $1;
#don't forget to save $1 if you nedd it
$_ = "Go here dody";
if (/(\w+) (\w+) (\w+)/) {
print "The second words was \"$1\" \"$2\" \"$3\".\n";
}
print "The last word of last words was \"$3\".\n";
print "The first word of first words was \"$first_word\".\n";

perl regexp check

perl -e 'while (<>) { if (/192/) { print; }}' /etc/hosts

perl grep

#!/usr/bin/perl -w
use strict;
print "Enter regexp: ";
chomp (my $S = );
while (<>) {
if (/$S/) {
print;
}
}

Чтобы "подсветить найденное выражение можно изменить вот так

#!/usr/bin/perl -w
use strict;
print "Enter regexp: ";
chomp (my $S =
);
while (<>) {
if (/$S/) {
chomp;
print "$`<$&>$'\n";
}
}

grep regexp

grep --color '[Ww]ilma\|\.*' sample_text

табличка

use strict;
print "enter widht taht you want\n";
chomp(my $widht = );

print "Enter some lines, and press Cntrl+D\n";
chomp(my @lines = );

print "-" x $widht,"|\n";#control line for debug
my $format = "%${widht}s|\n" x @lines;
printf $format, @lines;

Аналоги команд на перле

print <>; = cat
print sort <>; = sort
print reverse <>; = tac

Массивы и функция printf

use strict;
my @items = qw( Wilma mario dino pebbles );
my $format = "The items are:\n" . ("%10s\n" x @items);
#print "The format is <<$format>>\n"; # for debug
printf $format, @items;

Вывод:
The items are:
Wilma
mario
dino
pebbles

обновление

/etc/rc.conf
firewall_enable="YES"
firewall_type="/etc/rc.firewall"
firewall_logging="YES"
gateway_enable="YES"


/sys/i386/conf/SED_1

#my conf
options INCLUDE_CONFIG_FILE
#firewall
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=5
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET
options IPFIREWALL_NAT #ipfw kernel nat support
options LIBALIAS
#options IPFIREWALL_DEFAULT_TO_ACCEPT


/etc/make.conf

CPUTYPE?=
CFLAGS=-O1 -pipe
CFLAGS+= -DIPFIREWALL_NAT
NO_PROFILE=true
NO_CPU_CFLAGS=false
NO_CPU_COPTFLAGS=false

COMPAT4X=true

MAKE_KERBEROS4=false
MAKE_KERBEROS5=false
NO_GAMES=true
NO_BLUETOOTH=true
NO_DICT=true
NO_INET6=true


PERL_VER=5.8.8
PERL_VERSION=5.8.8
PERL_ARCH=mach
NOPERL=no
WITH_PERL=yes
WITHOUT_PERL=no
WITH_BIND_LIBS=yes

DOC_LANG= en_US.ISO8859-1 ru_RU.KOI8-R

SUP_UPDATE=
SUP= /usr/bin/csup
SUPFLAGS= -g -L 2 -z
SUPHOST= cvsup4.ru.FreeBSD.org
SUPFILE= /usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile


KERNCONF=SED_1
# added by use.perl 2008-09-20 17:59:36
PERL_VER=5.8.8
PERL_VERSION=5.8.8


/etc/src.conf

WITHOUT_DICT=yes="yes"
WITHOUT_GAMES="yes"
WITHOUT_HTML="yes"
WITHOUT_INET6="yes"
WITHOUT_INET6_SUPPORT="yes"
WITHOUT_USB="yes"
WITHOUT_X11="yes"
NO_BLUETOOTH="yes"
KERNCONF=SED_1


sed# cd /usr/src
sed# make update
sed# rm -rfv /usr/obj
sed# make -j4 buildworld
sed# make -j4 buildkernel
sed# make installkernel
sed# reboot
sed# shutdown now
sed# mount -u /
sed# mount -a
sed# mergemaster -p
sed# cd /usr/src
sed# make installworld
sed# make delete-old
sed# mergemaster
sed# reboot
sed# cd /usr/src
sed# make delete-old-libs

perl subs

sub cat { while (defined($line = <>)) {
chomp($line);
print "$line\n";
}
}