<?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>Fri, 05 Mar 2010 12:26:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>0</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>0</slash:comments>
		</item>
	</channel>
</rss>
