<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Perlover&#039;s Blog &#187; Unix</title>
	<atom:link href="http://blog.perlover.com/category/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.perlover.com</link>
	<description>Blog about Unix, Perl, Firefox, JavaScript and other internet technologies</description>
	<lastBuildDate>Thu, 12 Aug 2010 11:56:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>OpenSSH и доступ по ключам</title>
		<link>http://blog.perlover.com/2010/08/09/openssh-keys-using/</link>
		<comments>http://blog.perlover.com/2010/08/09/openssh-keys-using/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 10:20:04 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[Crypto]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[Криптование]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=790</guid>
		<description><![CDATA[Часто в Unix администрировании приходится использовать работу с ssh коннектами. Особенно, если это касается скриптов для полуавтоматизации, то это может сильно раздражать &#8211; ведь для того, чтобы скопировать что-то через scp или rsync, ваши скриптам придется прерываться и запрашивать у вас пароль. Какая тут автоматизация? Что делать? Прочитать эту статейку&#8230; Итак, если кратко, то надо [...]]]></description>
			<content:encoded><![CDATA[<p>Часто в Unix администрировании приходится использовать работу с ssh коннектами. Особенно, если это касается скриптов для полуавтоматизации, то это может сильно раздражать &#8211; ведь для того, чтобы скопировать что-то через scp или rsync, ваши скриптам придется прерываться и запрашивать у вас пароль. Какая тут автоматизация? <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Что делать? Прочитать эту статейку&#8230; <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span id="more-790"></span>Итак, если кратко, то надо сгенерировать закрытый и открытый ключи на стороне, где будем запускать скрипты (назовем такую машину &laquo;клиент&raquo;), положить открытый ключ туда, куда будем коннектится (назовем его условно &laquo;сервер&raquo;) и настроим, чтобы сессия для такого-то аккаунта Unix запускалась не от Unix пароля, а от ключа (с паролем, но ниже будет показано, как настроить, чтобы вводить его однократно за весь день, например)</p>
<ol>
<li>На стороне клиента генерируем ключ типа DSA:
<pre class="brush: bash;">
mkdir -p ~/.ssh
chmod 700 ~/.ssh
cd ~/.ssh
ssh-keygen -t dsa
Enter passphrase (empty for no passphrase): …
Enter same passphrase again: …
chmod go-rwx ~/.ssh/*</pre>
<p>Я рекодмендую обязательно указать пароль. Рекомендуется указывать пароль, который не используется для аккаунта Unix. Если вы не укажите пароль (сделаете пустым), то любой, кому попадет ваш закрытый ключ-файл, сможет зайти на удаленный сервер под вашим аккаунтом без всяких проблем. Конечно, чтобы файл попал к кому либо, надо, чтобы были нарушены права доступа в Unix. Но файл может &laquo;утечь&raquo; случайно с утилитами синхронизации, бекапа или т.п.. Далее, я расскажу, как настроить, чтобы вы сами в дальнейшем не вводили часто пароль для закрытого ключа.</li>
<li>Копируем ключ на сервер:
<pre class="brush: bash;">scp -p id_dsa.pub remoteuser@remotehost:
Password: ********</pre>
</li>
<li>На уделенном сервере делаем:
<pre class="brush: bash;">ssh -l remoteuser remotehost
Password: ********
mkdir -p ~/.ssh # Создать директорию, если ее нет
chmod 700 ~/.ssh
cat id_dsa.pub &gt;&gt; ~/.ssh/authorized_keys  # Добавление к файлу, если он уже есть
chmod 600 ~/.ssh/authorized_keys
mv id_dsa.pub ~/.ssh # Не обязательно, но можно сохранить открытый ключ на всякий случай
logout</pre>
<p>Теперь, у вас есть закрытый и открытый ключ на вашей клиентской машине, защищенный (или нет) паролем, и открытый ключ на стороне сервера. Серверу достаточно вашего открытого ключа, чтобы вас идентифицировать (условно говоря, сервер каждый раз будет генерировать некий уникальный текст и давать его вашей клиентской машине при открытии сессии, а ваша машина должна будет его подписать с помощью закрытого ключа, передать обратно цифровую подпись серверу, а тот сверит ее для выданного вам же текста. Поскольку подписать может только тот, кто имеет закрытый ключ + пароль к нему, а проверить подпись может тот, что имеет ваш открытый ключ, то идентификация в этом случае гарантирует серверу, что вы &#8211; эти именно вы, и Unix пароль в таком случае вообще не нужен и нигде в сессии не передается).</li>
<li>Следующий шаг &#8211; настройка ssh-agent. Он может нам понадобится, если мы не хотим постоянно вводить пароль для закрытого ключа. Если же вы на шаге 1 указали пустой пароль, то можете пропустить 4 -6 пункты &#8211; вам не потребуется демон ssh-agent для кеширования пароля &#8211; его попросту нет &#8211; он не будет запрашиваться утилитами, использующими протокол ssh, и все эти утилиты могут работать из скриптов прямо на этом этапе.<br />
Демон ssh-agent висит в памяти и за операциями подписи и криптования к нему обращаются программы ssh &amp; scp (и другие). Этот демон хранит в своей памяти ваш пароль для закрытого ключа определенное время, заданное вами. Это очень удобно, если вы повседневно используете openssh, например, даже для git pull &amp; git push.</p>
<pre class="brush: bash;">crontab -e</pre>
<p>Вставляем в редакторе в crontab файл:</p>
<pre class="brush: bash;">@reboot ssh-agent -s | grep -v echo &gt; $HOME/.ssh-agent</pre>
<p>Эти команды говорят крону, что во время ребута системы запустить ssh-agent, а его вывод &#8211; переменные среды окружения с настройками записать в файл $HOME/.ssh-agent. Этот файл необходим нам для того, чтобы программы ssh, scp знали, куда коннектится (в них сохраняются пути до Unix сокетов коммуникации с ssh-agent).<br />
Чтобы нам не ждать перезагрузки, запускаем демон сразу же:</p>
<pre class="brush: bash;">nohup ssh-agent -s &gt; ~/.ssh-agent</pre>
</li>
<li> Теперь, в ваши скрипты, которые используют ssh &amp; scp, надо добавить такую строку:
<pre class="brush: bash;">. ~/.ssh-agent</pre>
<p>Также, рекомендую добавить следующие строки в ~/.bashrc (для bash shell-а):</p>
<pre class="brush: bash;">. $HOME/.ssh-agent
alias keyon=&quot;ssh-add -t 10h&quot;
alias keyoff='ssh-add -D'
alias keylist='ssh-add -l'</pre>
<p>Тем самым, при заходе на клиентскую машину ssh сессией, у вас загрузятся настройки для работы с ssh-agent, а также определятся алиасы команд для повседневной работы. Например, выполнив в bash команду &laquo;keyon&raquo;, от вас ssh-add команда потребует ввести пароль для ключа. После ввода он будет еще работать 10 часов. В это время вы можете запускать команды ssh, scp и любые другие, что используют ssh для коннекта на сервер (rsync, git), и все эти команды будут работать без запроса пароля.</li>
<li>Второй вариант настройки ssh-agent (если его выбираете, можете пропустить пункты 4 и 5):<br />
В файле ~/.bash_profile прописываем:</p>
<pre class="brush: bash;">SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS=&quot;-s&quot;
if [ -z &quot;$SSH_AUTH_SOCK&quot; -a -x &quot;$SSHAGENT&quot; ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap &quot;kill $SSH_AGENT_PID&quot; 0
ssh-add
fi</pre>
<p>Этими командами вы говорим при логине, если если нет таких-то переменных, запустить ssh-agent, выполнить команды вывода ssh-agent в текущем шеле (eval), а по завершении shell-а пристрелить процесс ssh-agent-а (trap). Здесь также при логине у вас единожды запросится пароль для ключа. Затем он будет в памяти ssh-agent</li>
</ol>
<p>Подробнее и всесторонне об ssh-agent можете прочитать в <strong><a href="http://mah.everybody.org/docs/ssh" target="_blank">статье Mark A. Hershberger</a></strong></p>
<p>Также рекомендуется к чтению:</p>
<ol>
<li><a href="http://rus-linux.net/nlib.php?name=/MyLDP/sec/openssh.html" target="_blank">20 советов по безопасному использованию сервера OpenSSH</a></li>
<li><a href="http://sial.org/howto/openssh/publickey-auth/" target="_blank">OpenSSH Public Key Authentication</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2010/08/09/openssh-keys-using/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rsync &#8211; быстрый резерв + быстрый перенос сайтов</title>
		<link>http://blog.perlover.com/2010/06/16/rsync-quickly-reserve-moving/</link>
		<comments>http://blog.perlover.com/2010/06/16/rsync-quickly-reserve-moving/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 05:44:13 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[For AWMs]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Для Webmasters]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=826</guid>
		<description><![CDATA[Когда-то давно, для резервирования, я использовал такие, казалось бы, незаменимые утилиты, как tar или pax. Я слышал в то время про rsync, но не представлял себе, как она в точности работает, поэтому я ощибочно полагал, что rsync &#8211; простая утилита копирования. А раз простая, то вряд ли я получу от нее много толку. Поэтому я [...]]]></description>
			<content:encoded><![CDATA[<p>Когда-то давно, для резервирования, я использовал такие, казалось бы, незаменимые утилиты, как tar или pax. Я слышал в то время про rsync, но не представлял себе, как она в точности работает, поэтому я ощибочно полагал, что rsync &#8211; простая утилита копирования. А раз простая, то вряд ли я получу от нее много толку. Поэтому я продолжал и продолжал пользоваться tar или pax, затем копировал по scp эти архивы, там распаковывал и т.п.. Я даже использовал find затем, чтобы докопировать файлы, которые изменились за последние сутки. <strong>Эх, жаль, что я столько много истратил времени на копирование, ведь была rsync!</strong></p>
<p><span id="more-826"></span>Итак, <strong>что же это за такая rsync?</strong> Это действительно, утилита рекурсивного копирования (копирует все файлы и поддиректории) с одного хоста на другой, или даже внутри одной машины. На этом все ее отличие от, например, утилиты cp заканчивается. И вот тут самое интересное &#8211; она при копировании каждый файл или директории, которые копируем, проходит блоками, и отслеживает только изменения блоков в сравнении с уже скопированными блоками. Грубо говоря, <strong>она копирует только &laquo;дельты&raquo; файлов и директорий!</strong> Что это значит? Это значит, что второй, третий и так далее запуски этой программы на определенную цель (куда копировать) будут занимать гораздо меньше времени, операций копирования и передачи данных по сети при повторном копировании уже изменившихся файлов. Вот несколько примеров ее использования:</p>
<h3>1) Быстрый перенос баз данных (на примере SQL).</h3>
<p>Имеем два сервака &#8211; один рабочий A, второй Б &#8211; куда будем резервировать свои базы данных (там где нет работающего SQL). Тогда для резервирования <strong>можно периодически запускать rsync</strong> на сервере A, <strong>не прекращая работы SQL сервера</strong> (назовем это &laquo;рабочим резервом&raquo;). Но чтобы нам иметь полностью правильные базы в резервной директории сервера Б, нам надо временами останавливать SQL на серваке А, и пока там нет работаюшего SQL, делать повторное копирование (назовем это &laquo;фиксированным резервом&raquo;). Вот тут то rsync и пригождается! Во время &laquo;рабочего резерва&raquo; многие файлы успевают устареть, ведь SQL продолжает работать. Во время &laquo;фиксированного резерва&raquo; копируются только дельты с последнего запуска &laquo;рабочего резерва&raquo;. Если время между этими запусками мало, то дельты копируются очень быстро &#8211; на больших базах это может быть не более минуты, например. Для снижения времени простоя, надо просто выполнить повторный &laquo;рабочий резерв&raquo; прямо перед остановкой MySQL сервера. Плюсы такого способа &#8211; <strong>минимальный даун по времени</strong>, минимум человеческих ошибок, простота. Я не знаю другого способа на данный момент, чтобы сделать быстрый резерв больших баз данных на другую машину, и при этом свести время простоя к минимуму.</p>
<p>Команды (<strong>смотрите не перепутайте!</strong> Тут все как в теории относительности <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )<br />
<strong>На стороне сервера Б </strong>(можно и на стороне А, но тогда надо поменять пути местами), куда копируем, запускаем команды копирования во время &laquo;рабочего резерва&raquo;</p>
<pre class="brush: bash;">cd
nohup /bin/nice -n 20 ionice -c3 rsync --rsync-path='/bin/nice -n 20 ionice -c3 rsync' -avz --delete IP.ADDRESS.SERVER.A:'/path/to/source/folder/' /path/to/target/folder/</pre>
<p><strong>Краткие пояснения (ВАЖНО):</strong><br />
Некоторые утилиты могут отсутствовать, <strong>примеры даны для Linux!</strong> Здесь <a href="http://ru.wikipedia.org/wiki/Nohup" target="_blank">nohup</a> &#8211; &laquo;оторвать&raquo; ввод/вывод от терминала. Это нам потребуется, когда мы захотим оставить запущенный &laquo;резерв&raquo; в фоновом режиме. Сразу мы не можем этого сделать (то есть не ставлю &#8216;&amp;&#8217; в конце), так как rsync при копировании использует ssh, и раз мы копируем на другой сервак, он запросит у нас пароль (если авторизация через openssh ключи + ssh-agent, то можно и поставить &#8216;&amp;&#8217;, но об этом в другой раз, в другой статье). После ввода пароля уже можно будет нажать <em>Ctrl+Z</em> в shell и затем <code>"<strong>%1 &amp;</strong>"</code> для запуска в фоновом режиме первой запущенной задачи (см. <a href="http://linux.die.net/man/1/bash" target="_blank">man bash</a>). Команда <a href="http://ru.wikipedia.org/wiki/Nice" target="_blank">nice</a> &#8211; выставить приоритет для процессора, а <a href="http://linux.die.net/man/1/ionice" target="_blank">ionice</a> &#8211; приоритет для операций при работе с диском &#8211; все приоритеты ставяться на понижение, чтобы продолжалась нормальная работа сервера. Опция <code>--delete</code> для rsync &#8211; удалять все файлы в целевой директории (от слово &laquo;цель&raquo;, target), которых нет в исходной (source). То есть, после копирования получим полностью равную директорию по содержанию.<br />
<strong>Слеш в конце исходной директории (</strong><code>/path/to/source/folder/</code><strong>)  &#8211; важная штука!</strong> Если в конце слеш &#8211; директория рассматривается rsync-ом как комплект директорий и файлов в ней для копирования, а если слеша нет &#8211; как один объект, целая директория со своим именем &#8211; в обоих случаях копирование рекурсивное, но если из примера убрать слеш в конце первого пути (сделать /path/to/source/folder), то в /path/to/target/folder/ будет создана папка folder и туда скопируется ее содержимое! Почитайте man-ы, если хотите понять, как присутствие или отсутствие слешей в конце директории влияет на ход событий <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>2) Перенос сайтов.</h3>
<p>Способом, описанным выше, также можно переносить и сайты вместе с их базами. Для баз мы используем способ выше, а для переноса контента делаем все то же самое, но при работающем apache. Как и в первом способе, apache мы останавливаем только на несколько минут или секунд, быстро запускаем rsync для &laquo;фиксированного резерва&raquo;, а после окончания запускаем apache снова. После остается сменить только DNS на новый IP адрес и все! Для повышения скорости переноса не забудьте за неделю до переноса выставить часовой TTL в вашем DNS для SOA записи зоны и для всех ее остальных записей. Тогда при смене IP весь трафик на сайт переместится за один час! Но это, как говориться, уже другая история. <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2010/06/16/rsync-quickly-reserve-moving/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>readline команды (MySQL, bash, rlwrap)</title>
		<link>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/</link>
		<comments>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 15:21:00 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[shortcut keys]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=589</guid>
		<description><![CDATA[Данная статейка уже носит чисто профессиональный характер &#8211; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке. Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не [...]]]></description>
			<content:encoded><![CDATA[<p>Данная статейка уже носит чисто профессиональный характер &#8211; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке.</p>
<p><span id="more-589"></span>Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не знать про следующие, но очень удобные команды, которые облегчать вам жизнь под Unix:</p>
<ul>
<li><strong>Ctrl + A</strong> &#8211; переход <strong>в начало</strong> текущей строки;</li>
<li><strong>Ctrl + E</strong> &#8211; переход <strong>в конец</strong> текущей строки;</li>
<li><strong>Стрелка вверх / Стрелка вниз </strong>- <strong>хождение по history </strong>командам соответственно к более старым командам / к более новым (это вы навярняка знаете)</li>
<li><strong>Ctrl + U</strong> &#8211; <strong>стирает все слева </strong>от текущей позиции курсора, то есть чтобы быстро очистить строку, можно сделать Ctrl + E и затем Ctrl + U</li>
<li><strong>Esc -&gt; d</strong> &#8211; стирает слово справа (сначала нажимаем Esc, отпускаем, затем &#8216;d&#8217;)</li>
<li><strong>Tab </strong>- формирует законченный вид не до конца набранной команды, файла или директории. Для MySQL -  еще таблицы, имени колонки. Если нет однозначности, то после повторного нажатия <em>Tab </em>выдаются варианты. Очень ускоряет процесс работы в командной строке, если вы не знали про это <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li><strong>Ctrl + PageDown </strong>- переход <strong>к самой последней</strong> (свежей) команде в history</li>
<li><strong>Ctrl + PageUp </strong>- переход <strong>к самой старой</strong> (первой) команде history</li>
<li><strong>Ctrl + R </strong>- самая ценная команда для меня &#8211; <strong>поиск в history</strong>. Делается так: нажимаем Ctrl + R, появляется приглашение ввести подстроку поиска ( (reverse-i-search)`&#8217;: ), далее мы вводим, например, «mysql» &#8211; видим самую последнюю команду shell-а, где встречалось подстрока «mysql». Если она нас не устраивает, то для повтора поиска тут же надо снова нажать Ctrl + R. Каждое нажатие Ctrl + R перемещает нас к более старым командам с подстрокой «mysql», которые мы когда либо исполняли. Если же нас найденная команда устраивает, нажимаем «Стрелка вправо» или «Стрелка влево» и приступаем к редактированию и исполнению команды. Это очень удобная и нужная команда!</li>
</ul>
<p><strong>Все эти команды &#8211; подмножество</strong> команд библиотеки <strong><a href="http://ru.wikipedia.org/wiki/Readline" target="_blank">readline</a></strong> (man 3 readline). Ее используют и другие программы, например MySQL. Но в MySQL есть то ли баг, то ли так задумано разработчиками. Суть ее в том, что MySQL версий 3.x, например, прекрасно исполнял команду поиска (Ctrl + R), но потом, по каким то причинам, новые релизы &#8211; MySQL 4.x &amp; 5.x перестали работать с поиском. Скорее всего, это связано с тем, что раньше MySQL использовал readline библиотеку, но потом разработчики перешли на <a href="http://linux.die.net/man/5/editrc" target="_blank">editline</a>. И последняя перестала работать с поиском. Я долго мучался, пока не нашел решение. Оно следующее:</p>
<p>Создать файл ~/.editrc &#8211; конфиг для editline. Там мы пишем следующие строки:</p>
<blockquote><p>bind &laquo;\e[3~&raquo; ed-delete-next-char<br />
bind &laquo;^R» em-inc-search-prev</p></blockquote>
<p>После этого в MySQL 4.x &amp; 5.x у нас будет работать Ctrl + R.</p>
<p>Другим решением для MySQL вместо редактирования .editrc будет использовать <strong><a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/" target="_blank">rlwrap</a></strong> программу (установка в Linux Fedora Core, например, такая: <em>yum install rlwrap</em>) &#8211; она «обертывает» stdout запускаемой программы и создает history для вводимых строк (хранит в ~/.commandname_history). У нее есть некоторые недостатки &#8211; на ввод паролей она делает echo, то есть пароль будет виден на экране. Можно с помощью опций отключить это, но это не идеально. Зато можно в нее обернуть любую программу, которая даже не имеет history вообще (<em>rlwrap perl -MCPAN -e shell</em> , например). Итак, второе решение для MySQL может быть таким:</p>
<blockquote><p>alias mysql=&#8217;rlwrap -a mysql&#8217;</p></blockquote>
<p>Это ставиться в ~/.bashrc, например. Или вместо алиаса можно просто запустить:</p>
<blockquote><p>rlwrap -a mysql -uroot -p mysql</p></blockquote>
<p><strong><a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap.html" target="_blank">Man на rlwrap</a></strong> вы можете найти на сайте разработчика.</p>
<p>Вот такие вот тонкости, которые на 100% облегчат вам работу в Unix.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Самая мощная DDoS атака и офигенный Firewall&#8230;</title>
		<link>http://blog.perlover.com/2009/11/26/facts-about-male/</link>
		<comments>http://blog.perlover.com/2009/11/26/facts-about-male/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 08:46:08 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Расслабуха :)]]></category>
		<category><![CDATA[anekdots]]></category>
		<category><![CDATA[jokes]]></category>
		<category><![CDATA[анекдоты]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=161</guid>
		<description><![CDATA[О самой мощной DDoS атаке, о самом крутом в мире Firewall ...]]></description>
			<content:encoded><![CDATA[<ol>
<li>Одна человеческая клетка содержит 75Мб генетической информации</li>
<li>Один сперматозоид содержит 37.5Мб.</li>
<li>В одном миллилитре содержится около 100 млн сперматозоидов.</li>
<li>В среднем, эякуляция длится 5 секунд и составляет 2.25 мл спермы.</li>
<li>Таким образом, пропускная способность мужского члена будет равна:</li>
<li>(37.5Мб x 100M x 2.25)/5 = (37 500 000 байт/сперматозоид x 100 000 000 сперматозоид/мл x 2.25 мл) / 5 секунд = 1 687 500 000 000 000 байт/секунду = 1 687.5 Терабайт/с<br />
Получается что женская яйцеклетка выдерживает эту DDoS-атаку на полтора терабайта в секунду, пропуская только один выбранный пакет данных и является самым офигенным в мире хардварным фаерволом&#8230;</li>
</ol>
<p>Но тот один пакет, который она пропускает, валит систему на 9 месяцев&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2009/11/26/facts-about-male/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>sed &#8211; некоторые тонкости regexp</title>
		<link>http://blog.perlover.com/2009/10/29/sed-regexp/</link>
		<comments>http://blog.perlover.com/2009/10/29/sed-regexp/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 06:08:41 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Regexp]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=115</guid>
		<description><![CDATA[До недавнего времени сколько бы я не делал попыток написать для sed хоть мало мальское регулярное выражение, оно у меня не работало ...]]></description>
			<content:encoded><![CDATA[<p>До недавнего времени сколько бы я не делал попыток написать для sed хоть мало мальское регулярное выражение, оно у меня не работало. Я не мог понять в чем дело, ведь там синтаксис должен быть практически такой же, как в perl. Но для меня Sed оставался странной лошадкой, которую хотелось бы обуздать, но не получалось.</p>
<p>И вот, наконец, сегодня я прочел <a href="http://www.gnu.org/software/sed/manual/sed.html">грамотную доку</a>, а также в другом месте нашел объяснение моим проблемам. Оказывается, в sed есть очень мелкие, но важные отличия, поняв которые, вы сможете писать sed команды легко.</p>
<p>Итак, оказывается, по историческим причинам, чтобы не нарушать работу старых sed команд, в sed группировка (&#8216;(&#8216;, &#8216;)&#8217;) и некоторые другие спец. символы (&#8216;+&#8217; , &#8216;?&#8217;) были заменены на символы со слешем. Вот эти отличия:</p>
<table border="0" cellspacing="2" cellpadding="2" width="100%">
<tbody>
<tr>
<th width="33%">В языке Perl</th>
<th width="33%">В sed редакторе</th>
<th width="33%">Пояснение</th>
</tr>
<tr>
<td width="33%">(&#8230;)</td>
<td width="33%">\(&#8230;\)</td>
<td width="33%">Группировка</td>
</tr>
<tr>
<td width="33%">{X,Y}</td>
<td width="33%">\{X,Y\}</td>
<td width="33%">Заданный множитель</td>
</tr>
<tr>
<td width="33%">+</td>
<td width="33%">\+</td>
<td width="33%">Повторитель &#8211; один и более раз</td>
</tr>
<tr>
<td width="33%">?</td>
<td width="33%">\?</td>
<td width="33%">Повторитель &#8211; один или ноль раз</td>
</tr>
<tr>
<td width="33%">\bfoo\b</td>
<td width="33%">\&lt;foo\&gt;</td>
<td width="33%">поиск &#8216;foo&#8217; с границами слова</td>
</tr>
<tr>
<td width="33%">$1, $2</td>
<td width="33%">\1, \2</td>
<td width="33%">Подмена на группу</td>
</tr>
</tbody>
</table>
<p>Самое главное, на чем я спотыкался всегда &#8211; я никак не мог додуматься, что &#8216;\&#8217; должен ставиться перед &#8216;(&#8216;, или перед &#8216;?&#8217; и &#8216;+&#8217; символами, например. Я видел иногда эти слеши в примерах, но я думал, что эти слеши относились к shell, но оказалось, что это тонкость sed-а.</p>
<p>P.S. Возникает вопрос, а как же тогда заменять сами символы: &laquo;?+{}()&raquo; в sed? А оказывается, их просто не надо ескейпить символом &#8216;\&#8217;. Получается как бы наоборот &#8211; эти символы сами по себе не ескейпяться, а когда нужно их специальное назначение, то перед ними ставим &#8216;\&#8217;. Типа все с ног на голову, если сравнивать с perl.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2009/10/29/sed-regexp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
