<?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, 20 Jan 2012 15:23:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>20 лет первому посту о Linux :)</title>
		<link>http://blog.perlover.com/2011/09/01/first-post-about-linux/</link>
		<comments>http://blog.perlover.com/2011/09/01/first-post-about-linux/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 18:45:46 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Расслабуха :)]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[о жизни]]></category>
		<category><![CDATA[сисадминам]]></category>
		<category><![CDATA[Это интересно]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1364</guid>
		<description><![CDATA[Перепечатано с BugTraq: 25 августа 1991 года в 20:57:08 GMT некий студент из Хельсинки с адресом torvalds@kruuna.helsinki.fi отправил в конференцию comp.os.minix сообщение под заголовком &#171;What would you like to see most in minix?&#187;, в котором рассказал, что пишет бесплатную операционную систему, свободную от кода minix (чисто хобби, не будет такой большой и профессиональной, как gnu), [...]]]></description>
			<content:encoded><![CDATA[<p>Перепечатано с <strong><a href="http://subscribe.ru/archive/inet.bugtraq/201108/31132448.html" target="_blank">BugTraq</a></strong>:</p>
<p><strong>25 августа 1991 года</strong> в 20:57:08 GMT <strong>некий студент из Хельсинки с адресом <span style="color: #ff0000;">torvalds</span>@kruuna.helsinki.fi</strong> отправил в конференцию <strong>comp.os.minix</strong> сообщение под заголовком &#171;What would you like to see most in minix?&#187;, в котором рассказал, что <strong>пишет бесплатную операционную систему</strong>, свободную от кода minix (чисто хобби, не будет такой большой и профессиональной, как gnu), в которой уже вроде работают bash 1.08 и gcc 1.40, <strong>но нет переносимости, и вряд ли когда-нибудь она будет работать с чем-то помимо ATшных винчестеров</strong>.</p>
<p><strong>От себя:</strong> Читая этот блог, вы читаете его с Linux сервера <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Неплохая бесплатная операционнная система получилась! <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Что уж говорить про Linux-ы <strong><span style="color: #ff0000;"><a href="http://w2.com.ua/blogs/wafire/kak_ustroen_google" target="_blank"><span style="color: #ff0000;">Google</span></a></span></strong> &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/09/01/first-post-about-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH Telnet под Windows</title>
		<link>http://blog.perlover.com/2011/07/21/ssh-telnet-windows-putty-vs-shellguard/</link>
		<comments>http://blog.perlover.com/2011/07/21/ssh-telnet-windows-putty-vs-shellguard/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 16:20:34 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[PuTTY]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tabs]]></category>
		<category><![CDATA[Telnets]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[сисадминам]]></category>
		<category><![CDATA[Советы]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1340</guid>
		<description><![CDATA[Давно работаю под ShellGuard, но в последнее время стал искать замену (мало того что он платный и уже не поддерживаемый, дак еще и не работает с UTF-8). Перепробовал много telnet-ов, но остановился на проверенном и нормально работающем &#8212; PuTTY. Но вот есть у него довольно неприятная проблема. ShellGuard работает почти с теми же клавиами, что [...]]]></description>
			<content:encoded><![CDATA[<p>Давно <strong>работаю под ShellGuard</strong>, но в последнее время <strong>стал искать замену</strong> (мало того что он платный и уже не поддерживаемый, дак еще и не работает с UTF-8). Перепробовал много telnet-ов, но <strong>остановился на проверенном</strong> и нормально работающем &#8212; <strong><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">PuTTY</a></strong>. Но вот есть у него довольно <strong>неприятная проблема</strong>. ShellGuard работает почти с теми же клавиами, что привычные Unix терминалы &#8212; Alt + F1(F2, &#8230; F12) &#8212; переключает на нужные открытые консоли, а <strong>PuTTY работает всегда с одной консолью</strong> и для новой надо заново запускать новый процесс, а переключаться между ними не удобно &#8212; Alt+Tab &#8212; обычное переключение в Windows.</p>
<p>Долго искал &#8212; можно ли как-то приблизиться к сервису, близкому ShellGuard, и <strong>нашел максимально хорошее решение<span id="more-1340"></span></strong> &#8212; <strong><a href="http://puttycm.free.fr/cms/" target="_blank">PuTTY Connection Manager</a></strong>. Эта программа делает следующее &#8212; она запускает на каждую консоль новое окно PuTTY как процесс, но <strong>интегрирует их в одно Windows окно, делая вкладки (Tabs)</strong>, переключаться между которыми теперь можно через <strong>Ctrl + Tab</strong>. Работает очень хорошо, но все таки остался неприятный осадок &#8212; было бы замечательно, если бы порядок переключения делался в Most Recent порядке (между наиболее недавно использованными табами). Но этого нет. Еще хочется добавить из минусов &#8212; очень медленно развивается разработчиками. И хотя <a href="http://puttycm.free.fr/support/tracker/index.php?string=&amp;project=2&amp;type[]=2&amp;sev[]=&amp;pri[]=&amp;due[]=&amp;reported[]=&amp;cat[]=&amp;status[]=open&amp;percent[]=&amp;opened=&amp;dev=&amp;closed=&amp;duedatefrom=&amp;duedateto=&amp;changedfrom=&amp;changedto=&amp;openedfrom=&amp;openedto=&amp;closedfrom=&amp;closedto=&amp;do=index" target="_blank">можно запросить и проголосовать за какую либо новую фичу</a>, что-то мне подсказывает, увидеть ее потом можно через N-ое количество лет.</p>
<p>Кстати, <strong>как ShellGuard, так и PuTTY &#8212; работают с SSH ключами</strong>. <strong><span style="color: #ff0000;">Если вы не используете SSH ключи</span></strong> для авторизации (то есть работаете по старинке &#8212; вводя каждый раз пароль), то <strong><span style="color: #ff0000;">очень рекомендую это сделать</span></strong> &#8212; <strong><span style="color: #008000;">удобно, быстро и более безопасно!</span></strong> Конечно, сами ключи для авторизации необходимо защитить паролем, но его надо ввести один раз (для ShellGuard &#8212; только при первой сессии и для PuTTY вводится при запуске Pageant из состава PuTTY)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/07/21/ssh-telnet-windows-putty-vs-shellguard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Немного о супер направлениях в Web на Perl</title>
		<link>http://blog.perlover.com/2011/07/19/perl-plack-psgi/</link>
		<comments>http://blog.perlover.com/2011/07/19/perl-plack-psgi/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 10:15:38 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[For AWMs]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Для Webmasters]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[CGI]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mod_perl]]></category>
		<category><![CDATA[Plack]]></category>
		<category><![CDATA[PSGI]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1328</guid>
		<description><![CDATA[Немогу не поделиться своими выводами об изучении нескольких новых технологий в Perl и в Web программировании. Немного предистории. Я сам программирую динамические веб сайты (CGI) только на Perl. Никогда не использовал PHP. Это не только потому, что я фанат Perl, но и дань эффективности &#8212; под Perl много модулей, много возможностей, и при грамотном подходе [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Немогу не поделиться своими выводами</strong> об изучении нескольких <strong>новых технологий в Perl и в Web программировании</strong>. Немного предистории.</p>
<p>Я сам программирую <strong>динамические веб сайты</strong> (CGI) только <strong>на Perl</strong>. Никогда не использовал PHP. Это не только потому, что я фанат Perl, но и дань эффективности &#8212; под Perl много модулей, много возможностей, и при грамотном подходе сайты на Perl будут работать быстрее PHP &#8212; ведь Perl код после компиляции хранится в памяти в виде байт кода (типа &#171;<a href="http://en.wikipedia.org/wiki/P-code_machine" target="_blank">Пи кода</a>&#187; кода в Pascal). А если знаешь Perl, то и разработка может идти гораздо быстрее.<span id="more-1328"></span></p>
<p><strong>До недавнего времени я использовал</strong> технологию <strong>Apache + mod_perl + Embperl</strong>, а сам внешний WWW сервер имел фронтенд -Apache + mod_accel либо еще лучший вариант &#8212; nginx  (оба &#8212; реализуют проксирование). Лет 8 назад это было отличным решением, когда я начал использовать эту технологию. Но сейчас она устарела и сложна в использовании.</p>
<p>Сейчас я <strong>всем программерам на Perl</strong>, пишущим приложения под Web, <strong>очень рекомендую обратить внимание</strong> на следующие технологии в Perl, которые, несомненно эффективнее и проще, чем вышеуказанная связка:</p>
<ul>
<li><strong><a href="https://github.com/miyagawa/psgi-specs/blob/master/PSGI.pod" target="_blank">PSGI</a></strong> технология, а также ее реализация через модули <strong><a href="https://github.com/miyagawa/Plack" target="_blank">Plack</a></strong></li>
<li><strong><a href="http://github.com/miyagawa/Starman" target="_blank">Starman</a></strong> &#8212; perl сервер, с режимами pre-fork, контроля количества процессов и многое другое. Вообщем, почти как apache.</li>
<li><strong><a href="http://dancer.sukria.net/" target="_blank">Dancer</a></strong> &#8212; отличное решение для реализации своих PSGI приложений, но с более простым программированием.</li>
</ul>
<h3>Сейчас немного подробнее</h3>
<p>PSGI &#8212; недавно придуманный стандарт для Perl, который реализует простой и понятный программисту подход &#8212; вместо написания CGI скриптов и всей этой ваши с передачей параметров серверам и т.п.., очень умный человек (<a href="http://bulknews.typepad.com/" target="_blank">Tatsuhiko Miyagawa</a>) придумал (правда взяз за основу наработки из Python) простой подход &#8212; любое приложение (будь то скрипт или группа скриптов)  оформляется в виде обычной perl функции, которая чётко принимает и возвращает определенные параметры: принимает ссылку на хеш, в котором есть и заголовки HTTP, и служебные заголовки (вместо старых в CGI переменных окружения), а возвращает ссылку на массив из трех элементов: HTTP ответ, ссылку на массив заголовков ответа и ссылку на массив данных (HTTP BODY). Просто и со вкусом! Причем, можно возвращать и ссылку на код функции для реализации stream потоков. То есть <strong>в PSGI можно реализовать любой вид сервера</strong> &#8212; <strong>простой</strong>, отдающий <strong>потоковые</strong> данные (типа видео, например), либо удерживающее соединение (<strong>Comet</strong> технология). Но и это не все. Прелесть такой структуры функции PSGI в том, что одна функция может вызывать другую PSGI, но при этом делающее что-то своё. То есть другими словами &#8212; стек вызова. Называется это &#8212; middleware. А <strong>Plack служит клеем</strong> &#8212; имеет в своем составе сервис функции для формирования такого стека.</p>
<p>И, конечно же, если подумать, <strong>нужен сам сервер</strong>, который будет принимать TCP соединения, парсить заголовки и формировать хеш для PSGI, вызывать его и отдавать ответ. И таких серверов написано уже много. <strong>Один из них &#8212; Starman</strong>. Он, практически, выполняет те же функции, что выполняла бы связка Apache + mod_perl, только гораздо эффективнее, так как он проще, и нет тех &#171;костылей&#187;, которые были приделаны в apache &amp; mod_perl для их функционирования.</p>
<p><strong>А что же делает Dancer?</strong> Он называется типом <strong>Frameworks</strong> в терминологии Plack. Он для сервера Starman работает как PSGI, но вы сами пишите на perl через предоставляемые <strong>Dancer-ом функции, которые облегчают вам жизнь</strong>. Dancer сам парсит входные данные от Starman, формирует их в удобный вид для обработки в perl и также формирует обратные заголовки и данные. К тому же, Dancer может работать без Starman &#8212; он имеет свой простой вебсервер. Также, раз Dancer может работать как PSGI функция, его можно вызывать из под любого сервера Plack типа, а также на нем можно написать свои middleware. Вообщем, тут вам как ваша фантазия и профессионализм подскажет.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/07/19/perl-plack-psgi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DNS &#8212; как сделать обратную запись (PTR), если зона не ваша</title>
		<link>http://blog.perlover.com/2011/07/12/reverse-dns-cname-ptr-n/</link>
		<comments>http://blog.perlover.com/2011/07/12/reverse-dns-cname-ptr-n/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 11:23:22 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[named]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1322</guid>
		<description><![CDATA[Бывают моменты, когда вам надо сделать корректное резрешение DNS из IP ареса в доменное имя для IP, который принадлежит провайдеру (и соответственно, он управляет DNS-ом обратной зоны), но сервер на этом IP ваш. Конечно, без его участия сделать это нельзя, но можно попросить провайдера прописать следующие настройки в DNS, чтобы вы могли в любое время [...]]]></description>
			<content:encoded><![CDATA[<p>Бывают моменты, когда вам надо сделать <strong>корректное резрешение DNS из IP ареса в доменное имя</strong> для IP, который принадлежит провайдеру (и соответственно, он управляет DNS-ом обратной зоны), но сервер на этом IP ваш. <strong>Конечно, без его участия сделать это нельзя</strong>, но можно попросить провайдера прописать <strong><a href="http://www.zytrax.com/books/dns/ch3/#reverse" target="_blank">следующие настройки в DNS</a></strong>, <strong>чтобы вы могли в любое время на своём DNS менять имя записи PTR</strong>, а не просить сделать это каждый раз своего провайдера.</p>
<p><strong><a href="http://www.zytrax.com/books/dns/ch3/#reverse" target="_blank">Здесь на английском официальная инструкция</a></strong>, как это сделать. <strong>Основной смысл</strong> &#8212; провайдер ставит записи CNAME вместо PTR в обратной зоне (IN-ADDR.ARPA), а вы уже меняете на своем DNS настройки. В примере дан более развернутый пример, когда провайдер описывает записи для целой подзоны, например сетки /27 (32 машины) и указывает NS записи вашего DNS. Можно сделать проще для одного IP &#8212; провайдер ставит на вас CNAME вместо PTR (но не NS), CNAME указывает на ваш доменный адрес (на адрес под вашим доменом), для которого вы уже описываете PTR запись. Тем самым, если захотели другое имя для IP, меняете его у себя в DNS и телемаркет&#8230;</p>
<p>Если не знаете, зачем это, то знайте: обратное разрешение нужно для более правильной работы e-mail (если у вас есть почтовый сервер &#8212; для его IP это лучше сделать <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). В противном случае, письма, оправленные через ваш SMTP, могут &#171;отвегаться&#187; большинством почтовых релеев (relay).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/07/12/reverse-dns-cname-ptr-n/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Летнее время навсегда?</title>
		<link>http://blog.perlover.com/2011/02/09/daylight-forever/</link>
		<comments>http://blog.perlover.com/2011/02/09/daylight-forever/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 09:48:55 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Напрягуха :(]]></category>
		<category><![CDATA[phones]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[о жизни]]></category>
		<category><![CDATA[Сотовые телефоны]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1198</guid>
		<description><![CDATA[Вот приняли в России закон об отмене перевода времени. Может, это и хорошо. Меня смущает другое. То, что этой весной, будет последний перевод стрелок. Вот несколько аргументов, что это не правильно, с моей точки зрения. Забегая вперед, скажу от себя, что считаю, если и надо было &#171;останавливаться&#187; в переводе стрелок, то делать это надо осенью [...]]]></description>
			<content:encoded><![CDATA[<p>Вот приняли в России <strong>закон об отмене перевода времени</strong>. Может, это и хорошо. Меня смущает другое. То, что <strong>этой весной, будет последний перевод стрелок</strong>. Вот несколько аргументов, что это не правильно, с моей точки зрения. Забегая вперед, скажу от себя, что считаю, если и надо было &#171;останавливаться&#187; в переводе стрелок, то <strong>делать это надо осенью после перевода на зимнее время.</strong><span id="more-1198"></span></p>
<ol>
<li>В компьютерных технологиях, стандартом часового пояса времени является <strong>НЕ ЛЕТНЕЕ ВРЕМЯ</strong>. Везде, в компьютерных системах, это подчеркивается &#8212; есть опция &#171;Летнее время&#187;. То есть, если стоит пометка, то время летнее, и к стандартному сдвигу для данной временной зоны добавляется час. То, что приняли в России &#8212; это бред. Выходит, что<strong> РФ теперь будет жить всегда по &#171;летнему времени&#187;.</strong> Придется ждать, когда везде в компьютерных системах (включая мобильники) для городов РФ сдвиг будет перенесен на час вперед для всех городов (см. след. пункт)</li>
<li><strong>Теперь везде</strong>, где есть временные зоны (сотовые телефоны, компьютеры) россиянину надо будет выбирать не только свою зону, но и <strong>всегда ставить опцию летнего времени</strong>. А если ее нет &#8212; то придется всегда вместо своего города в базе зон <strong>выбирать другой город, который восточнее на 1 час</strong>. В общем, <strong>будет бардак</strong>. Не надо надеется, что везде эти базы зон будут оперативно обновлены &#8212; телефоны не перепрошьют, компы, если и обновятся, то не скоро.</li>
<li>Еще один очень неприятный момент: <strong><span style="color: #ff0000;">со следующей зимы все в России будут жить с большей разницей во времени с теми странами, где часы переводят.</span> </strong>Пример &#8212; сейчас Москва зимой в зоне GMT +3 (что значит &#8212; для получения московского времени надо ко времени Гринвича &#8212; GMT &#8212; добавить 3 часа), европейские города &#8212; GMT +1. Это значит, что зимой разница между ними &#8212; 2 часа. Весной Европа и мы перейдем на летнее, Москва станет GMT +4 (в комп. системах это как &#171;GMT +3&#8243; + летнее время), Европа GMT +2. Разница попрежнему будет составлять два часа. А вот осенью случится то, что мне лично не нравится. Европа станет снова GMT +1, а Москва так и останется GMT +4. Разница времени зимой с Европой будет 3 часа. Я не беру в пример более восточные города РФ, а также города в США &#8212; везде разница с ними увеличится на час, чего никогда не было. Получается, что соотечественники за рубежом будут вынуждены звонить своим родственникам в Россию еше раньше, чтобы те не успели лечь спать. Также, это скажется на бизнесе между РФ и Европой. Европейское телевидение станет на всю зиму еще больше отставать по времени (например, те кто смотрит спутниковое &#8212; они это почувствуют). Тут еще надо подумать, не будет ли это так же плохо для населения, как то, когда стрелки переводили.</li>
</ol>
<p><strong>Остался еще неприятный момент</strong>, что ПО компьютеров придется дорабатывать и ждать обновлений &#8212; сейчас Windows &amp; Unix автоматически переводят время, и без обновлений, осенью масса компьютеров просто некорректно переведет время. Но даже если оператор и вернет время обратно вручную, этого будет мало &#8212; придется ставить временной пояс не своего города, иначе система будет некорректно вычислять Гринвическое время, что также приведет к сбоям и проблемам. <strong>Вообщем, это будет что-то типо второй проблемы Y2K</strong>, только не для всего мира, а <strong>для РФ</strong>.</p>
<p>Непонятно, чем думали, когда решили весной последний раз перевести часы&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/02/09/daylight-forever/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Samba &amp; Archive аттрибут = -Executable</title>
		<link>http://blog.perlover.com/2011/01/20/samba-archive-attribute-executable/</link>
		<comments>http://blog.perlover.com/2011/01/20/samba-archive-attribute-executable/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 18:16:04 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[Samba]]></category>
		<category><![CDATA[Редакторы]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1144</guid>
		<description><![CDATA[Заметил неприятную особенность дефолтной конфигурации Samba &#8212; при сбрасывании из под Windows Archive аттрибута редактируемого файла разными редакторами, сбрасываются permissions &#8216;x&#8217; (права файла) на Unix для пользователя, который владеет файлом. Например, есть на Unix файл с правами rwxr-xr-x. Если вы его через Samba поредактируете в Windows каким либо редактором, который любит сбрасывать аттрибут archive (far [...]]]></description>
			<content:encoded><![CDATA[<p>Заметил <strong>неприятную особенность</strong> <strong><span style="color: #ff0000;">дефолтной </span></strong>конфигурации <strong>Samba</strong> &#8212; при сбрасывании из под Windows <strong>Archive аттрибута</strong> редактируемого файла разными <strong>редакторами</strong>, сбрасываются permissions &#8216;x&#8217; (права файла) на Unix для пользователя, который владеет файлом. Например, есть на Unix файл с правами rwxr-xr-x. Если вы его через Samba поредактируете в Windows каким либо редактором, который любит сбрасывать аттрибут archive (far или komodo edit), то после сохранения изменений файл будет иметь permissions как rw-r-xr-x. Для Unix пользователей это очень плохо &#8212; файл перестает быть исполняемым для самого владельца, зато остается исполняемый для всех, кроме него. Долго искал причину, почему после редактирования в Komodo Edit теряется исполняемый бит, грешил на редактор, а выловил такую особенность default Samba configuration <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Для решения</strong> этой проблемы надо просто напросто <strong>добавить строку</strong> <strong><span style="color: #008000;">map archive = no</span></strong> в <strong>smb.conf</strong> файл. После перезапустить samba: <strong><span style="color: #0000ff;">service smb stop &amp; service smb start</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/01/20/samba-archive-attribute-executable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Оптимизация MySQL &#8212; select/insert</title>
		<link>http://blog.perlover.com/2011/01/10/mysql-collisions-select-updates/</link>
		<comments>http://blog.perlover.com/2011/01/10/mysql-collisions-select-updates/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 14:50:17 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=882</guid>
		<description><![CDATA[Было как то раз у меня постоянно проблема &#8212; очень долго исполнялись SELECT с JOIN запросы. Грешил я на долгое исполнение JOIN операций, хотя с индексами у меня был полный порядок. Что я только не делал &#8212; и настройки крутил MySQL, и код местами переписывал, чтобы оптимальнее работал. Но проблема оставалась. Причем это что-то грузило [...]]]></description>
			<content:encoded><![CDATA[<p>Было как то раз у меня постоянно проблема &#8212; очень долго исполнялись <strong>SELECT с JOIN</strong> запросы. Грешил я на долгое исполнение JOIN операций, хотя с индексами у меня был полный порядок. Что я только не делал &#8212; и настройки крутил MySQL, и код местами переписывал, чтобы оптимальнее работал. Но проблема оставалась. Причем это что-то грузило сервак конкретно, несмотря на оченбь мощное железо. Но вот нашел в инете одну <strong><a href="http://www.mysqlperformancetuning.com/how-to-reduce-table_locks_waited-in-mysql-myisam" target="_blank">статейку</a></strong> и она меня натолкнула на мысль &#8212; изменить priority операции INSERT/DELETE. Правки для двух строк кода убрали проблему совсем! И очень мощный сервак стал работать очень быстро&#8230; Я даже не ожидал такого! А теперь немного поподробнее&#8230;</p>
<p><span id="more-882"></span>В MySQL есть такая особенность для таблиц типа MyISAM &#8212; <strong>операции изменения таблицы</strong> (INSERT/UPDATE/DELETE) <strong>имеют более высокий приоритет</strong> перед SELECT. Представим себе такую картину: к MySQL поступает сразу несколько запросов  в таком порядке: <span style="color: #0000ff;"><strong>SELECT (1)</strong> </span>-&gt; <span style="color: #ff6600;"><strong>UPDATE (2)</strong></span> -&gt; <strong><span style="color: #ff0000;">SELECT (3)</span></strong> -&gt;<span style="color: #ff0000;"> <strong>SELECT (4)</strong></span>. Все эти запросы &#8212; от нескольких клиентов (сессий) и все &#8212; на работу с одной и той же таблицей (для простоты понимания). Первый SELECT, предположим, занимает 2 сек времени на выполнение. Если бы не было UPDATE, то остальные селекты могли бы исполняться в параллель &#8212; таблица ведь не меняется, данные тоже, почему бы не дать другим клиентам тоже выполнить запросы&#8230; Но, поскольку, есть UPDATE (то же было бы для случая DELETE/INSERT), MySQL заблокирует таблицу полностью при первом же случае (в нашем примере сразу же после отработки первого SELECT, который поступил раньше UPDATE), т.е. он ждет выполнения первого селекта (2 сек) для блокировки. За эти две секунды никто не может получить доступ к таблице, остальные SELECT будут ждать выполнения UPDATE (вень у него более высокий приоритет пол умолчанию), а UPDATE ждет первого SELECT. Все&#8230; Это пипец&#8230; Если у вас не загруженный сервак, то вас это беспокоить не будет &#8212; никто не будет наступать друг другу на пятки. А если сервак загружен, эту <strong>ситуацию можно сравнить с давкой в торговом центре, где ажиотаж, но при этом security решили пропустить без очереди VIP персону&#8230;</strong></p>
<p><strong>Какой выход?</strong> Оказывается, довольно простой. Один из вариантов &#8212; изменить по умолчанию приоритет операций для изменения таблиц (т.е. для UPDATE/INSERT/DELETE) &#8212; опция <code>--low-priority-updates</code> при запуске mysqld. Но это слишком глобальный способ, и вряд ли хороший. Я не вдумывался в его смысл, но думаю, раз придумали такой приоритет, то значит это кому то нужно.</p>
<p><strong>Есть способ второй</strong> &#8212; найти такие узкие места в программе, где есть вместе долгоисполняемые SELECT (например большие JOIN), а также где рядом исполняется INSERT/DELETE/UPDATE на те же таблицы. И вот для тех INSERT/DELETE/UPDATE добавить слово LOW_PRIORITY в запросе. И все! На 99% вы устраните это узкое место и будете удивлены, насколько все пропрет <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Представим, что будет после. Если встретился долгий SELECT, а поступил также, например UPDATE, но уже с LOW_PRIORITY, а за ним в очереди другие SELECT, то другие SELECT будут исполняться сразу же в параллель вместе с первым длинным по времени, даже пока он не закончился. А уже после будет работать UPDATE и никому не мешать. Вообще, есть больше <strong><a href="http://dev.mysql.com/doc/refman/5.1/en/table-locking.html" target="_blank">рекомендаций от самой MySQL.ORG</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/01/10/mysql-collisions-select-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=790</guid>
		<description><![CDATA[Часто в Unix администрировании приходится использовать работу с ssh коннектами. Особенно, если это касается скриптов для полуавтоматизации, то это может сильно раздражать &#8212; ведь для того, чтобы скопировать что-то через scp или rsync, ваши скриптам придется прерываться и запрашивать у вас пароль. Какая тут автоматизация? Что делать? Прочитать эту статейку&#8230; Итак, если кратко, то надо [...]]]></description>
			<content:encoded><![CDATA[<p>Часто в Unix администрировании приходится использовать работу с ssh коннектами. Особенно, если это касается скриптов для полуавтоматизации, то это может сильно раздражать &#8212; ведь для того, чтобы скопировать что-то через 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>Итак, если кратко, то надо сгенерировать закрытый и открытый ключи на стороне, где будем запускать скрипты (назовем такую машину &#171;клиент&#187;), положить открытый ключ туда, куда будем коннектится (назовем его условно &#171;сервер&#187;) и настроим, чтобы сессия для такого-то аккаунта Unix запускалась не от Unix пароля, а от ключа (с паролем, но ниже будет показано, как настроить, чтобы вводить его однократно за весь день, например)</p>
<ol>
<li>На стороне клиента генерируем ключ типа DSA:
<pre class="brush: bash; title: ; notranslate">
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. Но файл может &#171;утечь&#187; случайно с утилитами синхронизации, бекапа или т.п.. Далее, я расскажу, как настроить, чтобы вы сами в дальнейшем не вводили часто пароль для закрытого ключа.</li>
<li>Копируем ключ на сервер:
<pre class="brush: bash; title: ; notranslate">scp -p id_dsa.pub remoteuser@remotehost:
Password: ********</pre>
</li>
<li>На уделенном сервере делаем:
<pre class="brush: bash; title: ; notranslate">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>Теперь, у вас есть закрытый и открытый ключ на вашей клиентской машине, защищенный (или нет) паролем, и открытый ключ на стороне сервера. Серверу достаточно вашего открытого ключа, чтобы вас идентифицировать (условно говоря, сервер каждый раз будет генерировать некий уникальный текст и давать его вашей клиентской машине при открытии сессии, а ваша машина должна будет его подписать с помощью закрытого ключа, передать обратно цифровую подпись серверу, а тот сверит ее для выданного вам же текста. Поскольку подписать может только тот, кто имеет закрытый ключ + пароль к нему, а проверить подпись может тот, что имеет ваш открытый ключ, то идентификация в этом случае гарантирует серверу, что вы &#8212; эти именно вы, и Unix пароль в таком случае вообще не нужен и нигде в сессии не передается).</li>
<li>Следующий шаг &#8212; настройка ssh-agent. Он может нам понадобится, если мы не хотим постоянно вводить пароль для закрытого ключа. Если же вы на шаге 1 указали пустой пароль, то можете пропустить 4 -6 пункты &#8212; вам не потребуется демон ssh-agent для кеширования пароля &#8212; его попросту нет &#8212; он не будет запрашиваться утилитами, использующими протокол ssh, и все эти утилиты могут работать из скриптов прямо на этом этапе.<br />
Демон ssh-agent висит в памяти и за операциями подписи и криптования к нему обращаются программы ssh &amp; scp (и другие). Этот демон хранит в своей памяти ваш пароль для закрытого ключа определенное время, заданное вами. Это очень удобно, если вы повседневно используете openssh, например, даже для git pull &amp; git push.</p>
<pre class="brush: bash; title: ; notranslate">crontab -e</pre>
<p>Вставляем в редакторе в crontab файл:</p>
<pre class="brush: bash; title: ; notranslate">@reboot ssh-agent -s | grep -v echo &gt; $HOME/.ssh-agent</pre>
<p>Эти команды говорят крону, что во время ребута системы запустить ssh-agent, а его вывод &#8212; переменные среды окружения с настройками записать в файл $HOME/.ssh-agent. Этот файл необходим нам для того, чтобы программы ssh, scp знали, куда коннектится (в них сохраняются пути до Unix сокетов коммуникации с ssh-agent).<br />
Чтобы нам не ждать перезагрузки, запускаем демон сразу же:</p>
<pre class="brush: bash; title: ; notranslate">nohup ssh-agent -s &gt; ~/.ssh-agent</pre>
</li>
<li> Теперь, в ваши скрипты, которые используют ssh &amp; scp, надо добавить такую строку:
<pre class="brush: bash; title: ; notranslate">. ~/.ssh-agent</pre>
<p>Также, рекомендую добавить следующие строки в ~/.bashrc (для bash shell-а):</p>
<pre class="brush: bash; title: ; notranslate">. $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 команду &#171;keyon&#187;, от вас ssh-add команда потребует ввести пароль для ключа. После ввода он будет еще работать 10 часов. В это время вы можете запускать команды ssh, scp и любые другие, что используют ssh для коннекта на сервер (rsync, git), и все эти команды будут работать без запроса пароля.</li>
<li>Второй вариант настройки ssh-agent (если его выбираете, можете пропустить пункты 4 и 5):<br />
В файле ~/.bash_profile прописываем:</p>
<pre class="brush: bash; title: ; notranslate">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 &#8212; быстрый резерв + быстрый перенос сайтов</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 &#8212; простая утилита копирования. А раз простая, то вряд ли я получу от нее много толку. Поэтому я [...]]]></description>
			<content:encoded><![CDATA[<p>Когда-то давно, для резервирования, я использовал такие, казалось бы, незаменимые утилиты, как tar или pax. Я слышал в то время про rsync, но не представлял себе, как она в точности работает, поэтому я ощибочно полагал, что rsync &#8212; простая утилита копирования. А раз простая, то вряд ли я получу от нее много толку. Поэтому я продолжал и продолжал пользоваться tar или pax, затем копировал по scp эти архивы, там распаковывал и т.п.. Я даже использовал find затем, чтобы докопировать файлы, которые изменились за последние сутки. <strong>Эх, жаль, что я столько много истратил времени на копирование, ведь была rsync!</strong></p>
<p><span id="more-826"></span>Итак, <strong>что же это за такая rsync?</strong> Это действительно, утилита рекурсивного копирования (копирует все файлы и поддиректории) с одного хоста на другой, или даже внутри одной машины. На этом все ее отличие от, например, утилиты cp заканчивается. И вот тут самое интересное &#8212; она при копировании каждый файл или директории, которые копируем, проходит блоками, и отслеживает только изменения блоков в сравнении с уже скопированными блоками. Грубо говоря, <strong>она копирует только &#171;дельты&#187; файлов и директорий!</strong> Что это значит? Это значит, что второй, третий и так далее запуски этой программы на определенную цель (куда копировать) будут занимать гораздо меньше времени, операций копирования и передачи данных по сети при повторном копировании уже изменившихся файлов. Вот несколько примеров ее использования:</p>
<h3>1) Быстрый перенос баз данных (на примере SQL).</h3>
<p>Имеем два сервака &#8212; один рабочий A, второй Б &#8212; куда будем резервировать свои базы данных (там где нет работающего SQL). Тогда для резервирования <strong>можно периодически запускать rsync</strong> на сервере A, <strong>не прекращая работы SQL сервера</strong> (назовем это &#171;рабочим резервом&#187;). Но чтобы нам иметь полностью правильные базы в резервной директории сервера Б, нам надо временами останавливать SQL на серваке А, и пока там нет работаюшего SQL, делать повторное копирование (назовем это &#171;фиксированным резервом&#187;). Вот тут то rsync и пригождается! Во время &#171;рабочего резерва&#187; многие файлы успевают устареть, ведь SQL продолжает работать. Во время &#171;фиксированного резерва&#187; копируются только дельты с последнего запуска &#171;рабочего резерва&#187;. Если время между этими запусками мало, то дельты копируются очень быстро &#8212; на больших базах это может быть не более минуты, например. Для снижения времени простоя, надо просто выполнить повторный &#171;рабочий резерв&#187; прямо перед остановкой MySQL сервера. Плюсы такого способа &#8212; <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>(можно и на стороне А, но тогда надо поменять пути местами), куда копируем, запускаем команды копирования во время &#171;рабочего резерва&#187;</p>
<pre class="brush: bash; title: ; notranslate">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> &#8212; &#171;оторвать&#187; ввод/вывод от терминала. Это нам потребуется, когда мы захотим оставить запущенный &#171;резерв&#187; в фоновом режиме. Сразу мы не можем этого сделать (то есть не ставлю &#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> &#8212; выставить приоритет для процессора, а <a href="http://linux.die.net/man/1/ionice" target="_blank">ionice</a> &#8212; приоритет для операций при работе с диском &#8212; все приоритеты ставяться на понижение, чтобы продолжалась нормальная работа сервера. Опция <code>--delete</code> для rsync &#8212; удалять все файлы в целевой директории (от слово &#171;цель&#187;, target), которых нет в исходной (source). То есть, после копирования получим полностью равную директорию по содержанию.<br />
<strong>Слеш в конце исходной директории (</strong><code>/path/to/source/folder/</code><strong>)  &#8212; важная штука!</strong> Если в конце слеш &#8212; директория рассматривается rsync-ом как комплект директорий и файлов в ней для копирования, а если слеша нет &#8212; как один объект, целая директория со своим именем &#8212; в обоих случаях копирование рекурсивное, но если из примера убрать слеш в конце первого пути (сделать /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 для &#171;фиксированного резерва&#187;, а после окончания запускаем 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[Данная статейка уже носит чисто профессиональный характер &#8212; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке. Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не [...]]]></description>
			<content:encoded><![CDATA[<p>Данная статейка уже носит чисто профессиональный характер &#8212; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке.</p>
<p><span id="more-589"></span>Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не знать про следующие, но очень удобные команды, которые облегчать вам жизнь под Unix:</p>
<ul>
<li><strong>Ctrl + A</strong> &#8212; переход <strong>в начало</strong> текущей строки;</li>
<li><strong>Ctrl + E</strong> &#8212; переход <strong>в конец</strong> текущей строки;</li>
<li><strong>Стрелка вверх / Стрелка вниз </strong>- <strong>хождение по history </strong>командам соответственно к более старым командам / к более новым (это вы навярняка знаете)</li>
<li><strong>Ctrl + U</strong> &#8212; <strong>стирает все слева </strong>от текущей позиции курсора, то есть чтобы быстро очистить строку, можно сделать Ctrl + E и затем Ctrl + U</li>
<li><strong>Esc -&gt; d</strong> &#8212; стирает слово справа (сначала нажимаем 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>- самая ценная команда для меня &#8212; <strong>поиск в history</strong>. Делается так: нажимаем Ctrl + R, появляется приглашение ввести подстроку поиска ( (reverse-i-search)`&#8217;: ), далее мы вводим, например, «mysql» &#8212; видим самую последнюю команду shell-а, где встречалось подстрока «mysql». Если она нас не устраивает, то для повтора поиска тут же надо снова нажать Ctrl + R. Каждое нажатие Ctrl + R перемещает нас к более старым командам с подстрокой «mysql», которые мы когда либо исполняли. Если же нас найденная команда устраивает, нажимаем «Стрелка вправо» или «Стрелка влево» и приступаем к редактированию и исполнению команды. Это очень удобная и нужная команда!</li>
</ul>
<p><strong>Все эти команды &#8212; подмножество</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), но потом, по каким то причинам, новые релизы &#8212; MySQL 4.x &amp; 5.x перестали работать с поиском. Скорее всего, это связано с тем, что раньше MySQL использовал readline библиотеку, но потом разработчики перешли на <a href="http://linux.die.net/man/5/editrc" target="_blank">editline</a>. И последняя перестала работать с поиском. Я долго мучался, пока не нашел решение. Оно следующее:</p>
<p>Создать файл ~/.editrc &#8212; конфиг для editline. Там мы пишем следующие строки:</p>
<pre class="brush: plain; title: ; notranslate">
bind &quot;\e[3~&quot; ed-delete-next-char
bind &quot;^R&quot; em-inc-search-prev
</pre>
<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>) &#8212; она «обертывает» stdout запускаемой программы и создает history для вводимых строк (хранит в ~/.commandname_history). У нее есть некоторые недостатки &#8212; на ввод паролей она делает 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>
	</channel>
</rss>

