<?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>dmesg</title>
	<atom:link href="http://dmesg.org.ua/feed/" rel="self" type="application/rss+xml" />
	<link>http://dmesg.org.ua</link>
	<description>заметки системного инженера</description>
	<lastBuildDate>Thu, 28 Jan 2010 09:06:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Генератор паролей на PHP</title>
		<link>http://dmesg.org.ua/2009/12/password-generator-php/</link>
		<comments>http://dmesg.org.ua/2009/12/password-generator-php/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 14:08:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=324</guid>
		<description><![CDATA[&#60;?php function gen_pw&#40;$lenght&#41;&#123; $alphabet = range&#40;'a','z'&#41;; $up_alphabet = range&#40;'A','Z'&#41;; $digits = range&#40;'1','9'&#41;; &#160; $full_array = array_merge&#40;$alphabet,$up_alphabet,$digits&#41;; $password = ''; &#160; for&#40;$i='0'; $i &#60; $lenght; $i++&#41;&#123; $entrie = array_rand&#40;$full_array&#41;; $password .= $full_array&#91;$entrie&#93;; &#160; &#125; return $password; &#125; $pw = gen_pw&#40;'8'&#41;; echo $pw; ?&#62;]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> gen_pw<span style="color: #009900;">&#40;</span><span style="color: #000088;">$lenght</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$alphabet</span>    <span style="color: #339933;">=</span> <span style="color: #990000;">range</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'a'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'z'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$up_alphabet</span> <span style="color: #339933;">=</span> <span style="color: #990000;">range</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'A'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Z'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$digits</span>      <span style="color: #339933;">=</span> <span style="color: #990000;">range</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'9'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$full_array</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$alphabet</span><span style="color: #339933;">,</span><span style="color: #000088;">$up_alphabet</span><span style="color: #339933;">,</span><span style="color: #000088;">$digits</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$password</span>    <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'0'</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$lenght</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$entrie</span>    <span style="color: #339933;">=</span> <span style="color: #990000;">array_rand</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$full_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$password</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$full_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$entrie</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$password</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$pw</span> <span style="color: #339933;">=</span> gen_pw<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'8'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pw</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/12/password-generator-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Функции работы с директориями в PHP</title>
		<link>http://dmesg.org.ua/2009/12/dirs-in-php/</link>
		<comments>http://dmesg.org.ua/2009/12/dirs-in-php/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 21:25:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=290</guid>
		<description><![CDATA[PHP язык не такой многословный и извилистый как Perl, но тоже любит поболтать. Сегодня поговорим о работе с директориями. В PHP существует для этого 3 стандартных способа. scandir &#60;?php $dir_array = scandir&#40;'dirs'&#41;; foreach&#40;$dir_array as $dir&#41;&#123; if&#40;$dir !== '.' &#38;&#38; $dir !== '..'&#41;&#123; echo &#34;$dir\n&#34;; &#125; &#125; ?&#62; opendir+ readdir &#60;?php $dir_handle = opendir&#40;'dirs'&#41;; while&#40;false != [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/07/php-med-trans-light.gif" alt="php-med-trans-light" title="php-med-trans-light" width="95" height="51" class="alignleft size-full wp-image-86" />PHP язык не такой многословный и извилистый как Perl, но тоже любит поболтать. Сегодня поговорим о работе с директориями. В PHP существует для этого 3 стандартных способа.<br />
<span id="more-290"></span></p>
<ol>
<li><a title="scandir" href="http://php.net/scandir"><strong>scandir</strong></a></li>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$dir_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">scandir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_array</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$dir</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'..'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$dir</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<li><a title="scandir" href="http://php.net/opendir"><strong>opendir</strong></a>+ <a title="scandir" href="http://php.net/readdir"><strong>readdir</strong></a></li>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$dir_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">opendir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #990000;">readdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_handle</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$dir</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'..'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$dir</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<li><a title="dir" href="http://php.net/manual/en/class.dir.php"><strong>dir</strong></a></li>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$dir_class</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dir_class</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$dir</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'..'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
              <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$dir</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

</ol>
<p>А теперь самое интересное: проведём небольшой синтетический тест на производительность этих функций. Предварительно уберём проверки и вывод.<br />
Для тестирование создаём директорию, которая содержит 1 млн. файлов<br />
быстрее всего это можно сделать так</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">0</span> <span style="color: #000000;">1000000</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<span style="color: #000000; font-weight: bold;">do</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$i</span>; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>у меня это закончилось с такими показателями</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">real    1m40.012s
user    0m32.628s
sys     0m44.776s</pre></div></div>

<p>на Gentoo 2.6.31 , ext4 , Pentium Dual Core 2160 (1.8GHz), 1GB ОЗУ</p>
<p>теперь приступим к запуску тестов PHP (учитываю время повторного выполнения, после перемещения файлов в кэш)<br />
1. <strong>scandir </strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">scandir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">real    0m3.370s
user    0m2.511s
sys     0m0.730s</pre></div></div>

<p>так как <strong>scandir</strong> помимо чтения ещё и сортирует, только не очень удачно , например с числами это выглядит так:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">215197
215198
215199
2152
21520
215200
215201</pre></div></div>

<p>то не будем давать фору другим способам чтения директорий.</p>
<p>2. <strong>opendir + readdir</strong><br />
без сортировки, т.е. если Вам достаточно прочитать содержимое директории</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$dir_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">opendir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">readdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_handle</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>результат будет таким</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">real    0m1.438s
user    0m0.779s
sys     0m0.616s</pre></div></div>

<p>и с сортировкой:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$dir_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">opendir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #990000;">readdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_handle</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$dir_array</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dir</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>результат такой</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">real    0m10.554s
user    0m9.489s
sys     0m0.739s</pre></div></div>

<p>3. <strong>dir</strong><br />
Без сортировки</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$dir_class</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_class</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>получаем</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">real    0m1.686s
user    0m1.015s
sys     0m0.663s</pre></div></div>

<p>И с сортровкой</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$dir_class</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dirs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dir_class</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       <span style="color: #000088;">$dir_array</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dir</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>результат таков</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">real    0m11.436s
user    0m10.492s
sys     0m0.697s</pre></div></div>

<p>P.S.<br />
Возможно инициализация массива вместе с  <a href="http://php.net/sort">sort</a>  не лучший способ для сортировки, но это было не главным в этой заметке</p>
<p>Похожие записи:<br />
<a href="http://dmesg.org.ua/2009/07/search-files-in-di-php/">Поиск файлов и директорий в каталоге (PHP)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/12/dirs-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox</title>
		<link>http://dmesg.org.ua/2009/12/firefox/</link>
		<comments>http://dmesg.org.ua/2009/12/firefox/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 21:48:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=278</guid>
		<description><![CDATA[Оказывается один из лучших броузеров назван в честь замечательного зверька Red Panda &#8211; с китайского &#171;huǒ hú&#187; буквально переводится как fire fox:) Фотокарточки под катом]]></description>
			<content:encoded><![CDATA[<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/12/firefox_logo.png" alt="firefox_logo" title="firefox_logo" width="100" height="100" class="alignleft size-full wp-image-279" />Оказывается один из лучших броузеров назван в честь замечательного зверька <a href="http://en.wikipedia.org/wiki/Red_Panda">Red Panda</a>  &#8211; с китайского &laquo;huǒ hú&raquo; буквально переводится как fire fox:)<br />
Фотокарточки под катом<br />
<span id="more-278"></span><br />
<img src="http://dmesg.org.ua/wp-content/uploads/2009/12/firerox0.jpg" alt="firerox0" title="firerox0" width="500" height="333" class="aligncenter size-full wp-image-280" /></p>
<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/12/firefox1.jpg" alt="firefox1" title="firefox1" width="500" height="333" class="aligncenter size-full wp-image-281" /></p>
]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/12/firefox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Диагностика почтового сервера с помощью telnet и openssl</title>
		<link>http://dmesg.org.ua/2009/12/telnet-and-openssl-mail-server-dignostic/</link>
		<comments>http://dmesg.org.ua/2009/12/telnet-and-openssl-mail-server-dignostic/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 21:00:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[почта]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=246</guid>
		<description><![CDATA[Чтобы быстро проверить работоспособность почтового сервера, легче всего воспользоваться командой telnet и openssl. И так приступим: 1. Проверяем IMAP+SSL Подключаемся $ openssl s_client -connect imap.gmail.com:993 Получаем ответ CONNECTED(00000003) depth=1 /C=US/O=Google Inc/CN=Google Internet Authority verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=imap.gmail.com i:/C=US/O=Google Inc/CN=Google Internet Authority 1 s:/C=US/O=Google [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/12/email_icon.jpg" alt="email_icon" title="email_icon" width="110" height="123" class="alignleft size-full wp-image-272" />Чтобы быстро проверить работоспособность почтового сервера, легче всего воспользоваться командой telnet и openssl. И так приступим:<br />
<span id="more-246"></span><br />
<strong>1. Проверяем IMAP+SSL</strong><br />
Подключаемся</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">$ openssl s_client -connect imap.gmail.com:993</pre></div></div>

<p>Получаем ответ</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">CONNECTED(00000003)
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=imap.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDWzCCAsSgAwIBAgIKYgnCCAADAAAJ5DANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0wOTA3MTcxNzEzNDFaFw0xMDA3MTcxNzIzNDFa
MGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRcwFQYDVQQDEw5pbWFw
LmdtYWlsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA+O0vc2pslfjk
pbxnBF4iznJMrP9Qi3fHjKqA3P2RynTcbnZfGEGMKcPeXHT4IOH6XUnf+4Jw+z7I
KiMtjX8IVGo7DeXec/ZREasEZnpMGisxN7+qk7Ho6HyaglQTAFIQJP99UFJkHO9x
dGDy5d2j9senPad1BqtyaIRGkJpHizUCAwEAAaOCASwwggEoMB0GA1UdDgQWBBT0
WHOeLKf4+VNADzHzGh+AEV+6fjAfBgNVHSMEGDAWgBS/wDDr9UMRPme6npH7/Gra
42sSJDBbBgNVHR8EVDBSMFCgTqBMhkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dv
b2dsZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNy
bDBmBggrBgEFBQcBAQRaMFgwVgYIKwYBBQUHMAKGSmh0dHA6Ly93d3cuZ3N0YXRp
Yy5jb20vR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRo
b3JpdHkuY3J0MCEGCSsGAQQBgjcUAgQUHhIAVwBlAGIAUwBlAHIAdgBlAHIwDQYJ
KoZIhvcNAQEFBQADgYEAXLvdKJJ6ivWAi29p4pPo4cirMEYnRlpNOmPVAW4QYcSq
lEZhm4cQdyitFo9cxiwNgbBjJk8O+oiOhnueT44RXotEE7j3KnNyPRRZg0OCagGC
4G71fFA11P1L0fSd/7k52/DbZQBea3tJgkseoGL50UVvnJm+LZOovIGxoQzipJk=
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=imap.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority
---
No client certificate CA names sent
---
SSL handshake has read 1704 bytes and written 324 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-MD5
    Session-ID: 4296066720F07D909E0633F3F8A70043DCB168D7255A662CCDC848DB98950FB1
    Session-ID-ctx:
    Master-Key: D96B610691FB1EA1BF383BADBAD68504DE6E0449273CA7F11C5A63B227FCFDBB17002705208B3B1FC81BE47BDC96629F
    Key-Arg   : None
    Start Time: 1260217527
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
* OK Gimap ready for requests from  10if4037812fxm.35</pre></div></div>

<p>Вводим логин и пароль:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">. login user@gmail.com PassWord</pre></div></div>

<p>Если всё ок, получаем такой ответ</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"> CAPABILITY IMAP4rev1 UNSELECT LITERAL+ IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE
. OK user@gmail.com authenticated (Success)</pre></div></div>

<p>или просто</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">. OK Logged in.</pre></div></div>

<p>Потом можно посмотреть папки:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">. list &quot;&quot; &quot;*&quot;</pre></div></div>

<p>Вывод будет приблизительно таким:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">* LIST (\HasNoChildren) &quot;.&quot; &quot;Drafts&quot;
* LIST (\HasChildren) &quot;.&quot; &quot;INBOX&quot;
* LIST (\HasNoChildren) &quot;.&quot; &quot;Trash&quot;
* LIST (\HasNoChildren) &quot;.&quot; &quot;Sent&quot;
* LIST (\HasNoChildren) &quot;.&quot; &quot;spam&quot;
. OK List completed.</pre></div></div>

<p>Командой status можно посмотреть количество сообщений в папке:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">. status INBOX (messages)
* STATUS &quot;INBOX&quot; (MESSAGES 102)</pre></div></div>

<p>Получим заголовок письма:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">. fetch 1 rfc822.header</pre></div></div>

<p><strong>2. Обычный IMAP</strong><br />
Всё тоже самое только подключаемся</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">telnet imap.example.com 143</pre></div></div>

<p><strong>3. POP3</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">$ telnet pop.example.com 110
Trying 10.10.10.10...
Connected to pop.example.com.
Escape character is '^]'.
+OK POP3 server ready &amp;lt;684391018.1260218865@pop.example.com&amp;gt;</pre></div></div>

<p>Вводим логин:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">USER user@example.com
+OK</pre></div></div>

<p>И пароль:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">PASS password
+OK maildrop locked and ready</pre></div></div>

<p>После успешной аутентификации Вам доступны следующие команды которые описаны в <a href="http://www.ietf.org/rfc/rfc1939.txt">RFC 1939</a> . Для проверки работоспособности достаточно , описанных в 5-й главе.</p>
<p><strong>4. POP3 + SSL</strong></p>
<p>Так же как и в предыдущем пункте, только подключаемся так:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">openssl s_client -connect mail.example.com:995</pre></div></div>

<p><strong>5. SMTP:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"> $ telnet smtp.example.com 25
&nbsp;
Trying 21.40.23.46...
Connected to smtp.example.com.
Escape character is '^]'.
220 smtp.example.com. ESMTP Exim 4.63 Mon, 07 Dec 2009 23:01:58 +0200</pre></div></div>

<p>Начинаем сессию</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">helo from-example.com
250 you-host.com Hello [10.10.10.10]</pre></div></div>

<p>От кого будет отправлено письмо</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">mail from: user@from-example.com
250 2.1.0 user@from-example.com... Sender ok</pre></div></div>

<p>Кому</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">rcpt to: user@example.com
250 2.1.5 user@example.com... Recipient ok</pre></div></div>

<p>Вводим данные</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">data
354 Enter mail, end with &quot;.&quot; on a line by itself
Subject: test message
some text
.
&nbsp;
250 2.0.0 asf11H6GdsI012101 Message accepted for delivery
quit
221 2.0.0 smtp.example.com closing connection
Connection closed by foreign host.</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/12/telnet-and-openssl-mail-server-dignostic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как спрятать X-Powered-By в PHP?</title>
		<link>http://dmesg.org.ua/2009/12/php-x-powered-by/</link>
		<comments>http://dmesg.org.ua/2009/12/php-x-powered-by/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 21:05:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=241</guid>
		<description><![CDATA[Заголовок X-Powerd-By в ответе веб сервера показывает не совсем безопасную информацию, а именно полную версию PHP. Прячется он очень просто: достаточно изменить следующее в php.ini ; Decides whether PHP may expose the fact that it is installed on the server ; (e.g. by adding its signature to the Web server header). It is no security [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/07/php-med-trans-light.gif" alt="php-med-trans-light" title="php-med-trans-light" width="95" height="51" class="alignleft size-full wp-image-86" />Заголовок X-Powerd-By в ответе веб сервера показывает не совсем безопасную информацию, а именно полную версию PHP.</p>
<p>Прячется он очень просто:<br />
достаточно изменить следующее в php.ini</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
expose_php = On</pre></div></div>

<p>на</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">expose_php = Off</pre></div></div>

<p>После этого, если используете mod_php, сделайте reload веб серверу.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/12/php-x-powered-by/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Тайм-менеджмент</title>
		<link>http://dmesg.org.ua/2009/12/time-management/</link>
		<comments>http://dmesg.org.ua/2009/12/time-management/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 10:16:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Тайм-менеджмент]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=225</guid>
		<description><![CDATA[Если Вы системный администратор, который занимается администрированием большого количества серверов или нескольких серверов, но с большим объемом задач, и вы стремитесь сделать свою работу более продуктивной, качественной и получить достаточно времени на личностный рост, то Вам следует узнать, что такое &#171;Тайм-менеджмент&#187;. Каждый уважающий себя системный администратор должен уметь управлять своим временем. Если этого качества у [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-232" title="willbe_clock_38" src="http://dmesg.org.ua/wp-content/uploads/2009/12/willbe_clock_38.jpg" alt="willbe_clock_38" width="120" height="106" />Если Вы системный администратор, который занимается администрированием большого количества серверов или нескольких серверов, но с большим объемом задач, и вы стремитесь сделать свою работу более продуктивной, качественной и получить достаточно времени на личностный рост, то Вам следует узнать, что такое &laquo;Тайм-менеджмент&raquo;.</p>
<p><span id="more-225"></span></p>
<p>Каждый уважающий себя системный администратор должен уметь управлять своим временем. Если этого качества у него нет, то рано или поздно, при большом объеме работ и стрессов, он попросту &laquo;сгорит&raquo;, перестанет получать удовольствие от  своей работы и возненавидит пользователей. Можно сказать, забьет все гвозди на крышке гроба своей замечательной и когда-то любимой профессии.</p>
<p>Для меня управление временем стало проблемой после того, как я заметил, что текущая  работа, которой я занимаюсь, отнимает полностью всё моё рабочее время и не смотря на это остаётся достаточно много невыполненных задач, которые висят тяжелым грузом и не дают легко двигаться дальше. И при возрастающем количестве задач я начал попросту теряться в них и было сложно определять приоритеты. Я не мог точно сказать &laquo;клиенту&raquo;, когда я смогу сделать то , что он просит.</p>
<p>И самое неприятное, что это отнимало очень много энергии, которой совсем не оставалось на что-то своё.<br />
И, конечно же, полностью исчезло чувство удовлетворения от выполненной работы, так как она никогда не завершалась. И в один прекрасный понедельник было решено заставить время работать на меня.</p>
<p><strong>Инструменты</strong><br />
Первым делом, нужно было выбрать инструмент для управлением временем. Долго искать не пришлось. Остановился на программе <a title="KOrganizer" href="http://userbase.kde.org/KOrganizer">KOrganizer</a> , который входит в состав KDE. Вы же можете выбрать что угодно, это может быть даже бумажный блокнот. Инструмент необходим в большей степени для того, чтобы разгрузить ваш мозг. Можно провести аналогию с процессами в ОС: с инструментом тайм-менеджмента все процессы у вас запускаются периодически в определённое время (crontab), без &#8211; висят в таблице процессов и потребляют память и процессорное время. Лучше использовать ресурсы мозга для более полезных вещей.</p>
<p><strong>Планирование</strong></p>
<p>Многие думают, что это само по себе отнимает достаточно много времени. Это действительно так, если вами управляет ваше время, но не вы им. Всё радикально меняется, как только вы обретаете власть над временем.<br />
Так что просто начинайте планировать. Выписывайте список задач на следующий день и определяйте. сколько займет каждая задача (для опытного администратора это не составит особого труда).</p>
<p>И самое главное в этом пункте: после каждой определённой задачи отводите минимум 15 минут на неопределённые.  Это очень важно и является отличительным моментом тайм-менеджмента для системного администратора от тайм-менеджмента в других профессиях. Я надеюсь, что Вы поняли почему.<br />
Если вы что-то по каким-то причинам не можете выполнить в назначенных день, спокойно переносите на другой.</p>
<p><strong>Отвлекающие моменты</strong></p>
<p>Вы всё спланировали, определили, сколько времени у вас займет каждая задача, и спокойно, с улыбкой на лице начали работать. И тут раздаётся звонок или кто-то приходит к вам, и, конечно же, у этого человека самая важная задача, важнее всех ваших существующих вместе взятых. И вы бросаетесь её выполнять. Это конец. Время опять управляет вами и делает с вами, всё что ему захочется.</p>
<p>Причина этой проблемы заключается в том, что кроме вас мало кто занимается планированием своего времени или если занимается, то забывает о том, что другие не должны делать сразу всё, что он хочет (вы тоже должны помнить об этом, это очень важно). Чтобы решить это, лучше всего не брать трубку телефона, не смотреть письма во время выполнения задачи. Просто не делайте этого и всё. Для этих отвлекающих моментов есть время на неопределённые задачи, о которых говорилось в предыдущем пункте.</p>
<p>После того как вы выполнили запланированную задачу, можете спокойно перезвонить или ответить на письмо. В итоге, ваша задача  выполнена качественно, быстро и без ошибок.<br />
В этом пункте остаются два неразрешенных вопроса:<br />
1) Что делать с человеком, который внезапно пришел к вам со своей проблемой?</p>
<p>2) Что если звонок, на который вы не ответили вовремя, касался, например, вышедшего из строя корпоративного почтового сервера?</p>
<p>Отвечаю:</p>
<p>1) Просто вежливо скажите, что вы сейчас очень заняты и запишите в огранайзер то, что хочет этот человек. И скажите время выполнения этой задачи! Обещаю, он будет доволен таким развитием событий. И не забывайте напомнить ему, чтобы он впредь предупреждал о своём визите или избрал другие способы постановки задач (надеюсь, у вас уже приняты интерфейсы для постановки задач).</p>
<p>2) Начните использовать систему мониторинга. Даже если она у вас уже есть и вы получаете  звонки о том, что что-то сломалась, то вы все-таки её не используете. Я в своей работе привык возлагать эту задачу на систему мониторинга Nagios, в которой можно создавать свои плагины, следящие за всем, что возможно. Просто проанализируйте сервисы, которые вы администрируете, определите возможные причины отказа и напишите под эту причину плагин!</p>
<p>Если это невозможно, то есть ещё один действенный способ: договоритесь со своим напарником, о том, что в первую половину дня отвечать на звонки будет он, а вторую &#8211; вы. Это решит почти все проблемы с отвлекающими моментами.</p>
<p><strong>Важные отвлекающие моменты</strong></p>
<p>Если вышел из строя сервер, то тут вы бессильны над временем. Сначала на минуту отвлекитесь от всего. Не бросайтесь сразу на амбразуру. Выпейте стакан холодной воды и приступайте к делу. Входящие звонки желательно перевести на кого-то другого. На идиотские вопросы, о том когда будет восстановлен сервис, старайтесь отвечать спокойней. В этой ситуации нужно контролировать свои эмоции, чтобы не допускать ошибок.</p>
<p><strong>Полезные советы</strong></p>
<ul>
<li>Логируйте всё, что вы делаете на сервере. Я перед входом запускаю команду script. Это экономит время на анализ, если после ваших действий, что-то пойдет не так.</li>
<li>Если вы запускаете операцию, которая занимает много времени: запустите её в screen таким образом:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> some <span style="color: #660033;">-long</span> <span style="color: #660033;">-time</span> <span style="color: #660033;">-commdand</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;long commnad on <span style="color: #007800;">$(hostname)</span> done&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> mail root <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;some error on <span style="color: #007800;">$(hostname)</span>&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> mail root</pre></div></div>

<p>Закройте спокойно терминал, и приступайте к другой задаче, уведомление о завершении длительной команды вы получите на почту.</li>
<li>Начните использовать систему регистраций запросов от пользователей</li>
<li>Перестаньте пользоваться аськой на работе!</li>
<li>Перестаньте посещать встречи, в 90% это пустая трата времени. Делайте это только в крайнем случае.</li>
</ul>
<p><strong>Вывод</strong></p>
<p>Научившись управлять своим временем, вы получите взамен часть рабочего дня, которую можете потратить на своё развитие, сможете более качественно выполнять задачи. Теперь ваше руководство сможет сразу получить ответ на вопрос о ваших текущей работе и узнать, чем вы занимались в рабочее время. Это в свою очередь поможет правильно организовать весь рабочий процесс в отделе.</p>
<p>Благодаря тому, что вы перестанете отвлекаться на несущественные моменты, вы сохраните свои нервы и не будете чувствовать усталости в конце рабочего дня. Также вы будете испытывать удовлетворение, смотря на список выполненных задач, уходя с работы не задержавшись:)</p>
<p>P.S.<br />
<a href="http://mas.kiev.ua/time.html">Так же советую почитать эту статью про Высший тайм-менеджмент</a>. </p>
<p>P.P.S.<br />
Заметка создана после прочтения книги Томаса Лимончелли «Тайм-менеджмент для системных администраторов», которая очень желательна, но не обязательна к прочтению.<br />
Так как многим, на самом деле, сэкономит в будущем время  прочтение <a href="http://tldp.org/LDP/abs/html/">этой книги</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/12/time-management/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Резервное копирование MySQL</title>
		<link>http://dmesg.org.ua/2009/12/mysql-backup/</link>
		<comments>http://dmesg.org.ua/2009/12/mysql-backup/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 15:28:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[lvm]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=215</guid>
		<description><![CDATA[Недавно возникла небольшая проблема с бэкапом базы MySQL, с огромными таблицами, которые лочились при mysqldump (это необходимо, дабы сохранить целостность резервной копии) В голову пришло следующие решение, которое возможно если база размещена на LVM: следующее происходит без останова БД: 1. Создаётся снэпшот ФС с базами MySQL (чтобы бэкапить неизменяемые данные . Это ключевой момент ) [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/07/logo_mysql_sun_a.gif" alt="logo_mysql_sun_a" title="logo_mysql_sun_a" width="114" height="68" class="alignleft size-full wp-image-80" />Недавно возникла небольшая проблема с бэкапом базы MySQL, с  огромными таблицами, которые лочились при mysqldump (это необходимо, дабы сохранить целостность резервной копии) </p>
<p>В голову пришло следующие решение, которое возможно если база размещена на LVM:<br />
следующее происходит без останова БД:<br />
1. Создаётся снэпшот ФС с базами MySQL (чтобы бэкапить неизменяемые  данные . Это ключевой момент )<br />
2. Монтируем этот снэпшот<br />
3. Тарим все директории с базами<br />
4. Размонтируем и удаляем снэпшот</p>
<p>Потом забираем архивы любым удобным для вас средством и удаляем</p>
<p>Скрипт ниже<br />
<span id="more-215"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #007800;">PATH</span>=<span style="color: #ff0000;">'/usr/sbin:/bin:/usr/bin'</span>
&nbsp;
<span style="color: #007800;">VG</span>=<span style="color: #ff0000;">'/dev/vg0'</span>
<span style="color: #007800;">MYSQL_FS</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${VG}</span>/fs_mysql&quot;</span>
<span style="color: #007800;">SNAPSHOT_MOUNT_POINT</span>=<span style="color: #ff0000;">'/mnt/snapshot'</span>
<span style="color: #007800;">SNAP_SIZE</span>=<span style="color: #ff0000;">'1024m'</span>
<span style="color: #007800;">DATE</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">date</span> +<span style="color: #000000; font-weight: bold;">%</span>Y-<span style="color: #000000; font-weight: bold;">%</span>m-<span style="color: #000000; font-weight: bold;">%</span>d<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">BKP_DIR</span>=<span style="color: #ff0000;">&quot;/backup/mysql_backups/<span style="color: #007800;">$DATE</span>&quot;</span>
<span style="color: #007800;">SNAP_NAME</span>=<span style="color: #ff0000;">&quot;mysql_snapshot-<span style="color: #007800;">${DATE}</span>&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">!</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>lvcreate <span style="color: #660033;">-s</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$SNAP_NAME</span> <span style="color: #660033;">-L</span> <span style="color: #007800;">$SNAP_SIZE</span> <span style="color: #007800;">$MYSQL_FS</span> <span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">else</span>
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">!</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">-o</span> ro,noatime <span style="color: #800000;">${VG}</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${SNAP_NAME}</span> <span style="color: #800000;">${SNAPSHOT_MOUNT_POINT}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">then</span>
            <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
        <span style="color: #000000; font-weight: bold;">fi</span>
        <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #007800;">$BKP_DIR</span>
        <span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #800000;">${SNAPSHOT_MOUNT_POINT}</span>;
        <span style="color: #000000; font-weight: bold;">for</span> DB <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">find</span> . <span style="color: #660033;">-type</span> d <span style="color: #660033;">-user</span> mysql<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">egrep</span> <span style="color: #660033;">-v</span> <span style="color: #ff0000;">&quot;^\.$|lost\+found&quot;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\.\///'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span>
                <span style="color: #c20cb9; font-weight: bold;">tar</span> czf <span style="color: #007800;">$BKP_DIR</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$DB</span>.tar.gz <span style="color: #007800;">$DB</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;OK: <span style="color: #007800;">$BKP_DIR</span>/<span style="color: #007800;">$DB</span>.tar.gz&quot;</span>
        <span style="color: #000000; font-weight: bold;">done</span>
        <span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #007800;">$SNAPSHOT_MOUNT_POINT</span>
        lvremove <span style="color: #660033;">-f</span> <span style="color: #800000;">${VG}</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${SNAP_NAME}</span>
        <span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> mysql:mysql <span style="color: #007800;">$BKP_DIR</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/12/mysql-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guide to the Secure Configuration of RHEL 5</title>
		<link>http://dmesg.org.ua/2009/11/linux_security/</link>
		<comments>http://dmesg.org.ua/2009/11/linux_security/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 18:03:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=207</guid>
		<description><![CDATA[Эта книга написана National Security Agency. Пишут там про то как правильно настроить и следить за безопасностью Red Hat, но так как этот дистрибутив такой же линукс как и другие, только в красной шапке, то книга подойдёт и всем остальным. И, IMHO, является обязательным минимумом для Linux администратора. Скачать руководство по настройке безопасности Linux]]></description>
			<content:encoded><![CDATA[<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/09/Redhat_ddj.png" alt="Redhat_ddj" title="Redhat_ddj" width="128" height="128" class="alignleft size-full wp-image-140" />Эта книга написана <a href="http://www.nsa.gov/index.shtml">National Security Agency</a>. Пишут там про то как правильно настроить и следить за безопасностью Red Hat, но так как этот дистрибутив такой же линукс как и другие, только в красной шапке, то книга подойдёт и всем остальным. И, IMHO, является обязательным минимумом для Linux администратора.</p>
<p><a href="http://dmesg.org.ua/wp-content/uploads/2009/11/rhel5-guide-i731.pdf"><strong>Скачать руководство по настройке безопасности Linux</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/11/linux_security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Распаковка zip архивов на сервере</title>
		<link>http://dmesg.org.ua/2009/11/php-unzipping/</link>
		<comments>http://dmesg.org.ua/2009/11/php-unzipping/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 19:35:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=189</guid>
		<description><![CDATA[Случается, что нужно распаковать залитый на веб-сервер по FTP архив, если делать это с десктопа, то процедура получается аналогичной заливке распакованных файлов. Чтобы решить эту проблему дарю вам этот PHP скрипт. Для его работы на сервере должен стоять unzip, и разрешено использование встроенной функции exec (скрипт это всё проверит). Чтобы воспользоваться им, размещаем скрипт, например [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://dmesg.org.ua/wp-content/uploads/2009/07/php-med-trans-light.gif" alt="php-med-trans-light" title="php-med-trans-light" width="95" height="51" class="alignleft size-full wp-image-86" />Случается, что нужно распаковать залитый на веб-сервер по FTP архив, если делать это с десктопа, то процедура получается аналогичной заливке распакованных файлов. Чтобы решить эту проблему дарю вам этот PHP скрипт. Для его работы на сервере должен стоять unzip, и разрешено использование встроенной функции exec (скрипт это всё проверит).<br />
Чтобы воспользоваться им, размещаем скрипт, например с именем unzip.php,  в той же директории где расположен архив или даже несколько архивов</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exec'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exec function is not available on this server'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$unzip_command</span> <span style="color: #339933;">=</span> <span style="color: #990000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/usr/bin/which unzip'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$dir_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">opendir</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">getcwd</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Can\'t open dir'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span> <span style="color: #339933;">=</span> <span style="color: #990000;">readdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_handle</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$files</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'..'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/.\.zip/'</span><span style="color: #339933;">,</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #990000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$unzip_command</span> <span style="color: #006699; font-weight: bold;">$files</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$output</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	  <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;b&gt;Unzipping '</span><span style="color: #339933;">,</span><span style="color: #000088;">$files</span><span style="color: #339933;">,</span><span style="color: #0000ff;">' &lt;/b&gt;&lt;br&gt;'</span><span style="color: #339933;">;</span>
	  <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$output</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$unzipped_files</span><span style="color: #009900;">&#41;</span>
	      <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$unzipped_files</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'&lt;span style=&quot;color: green&quot;&gt; done!&lt;/span&gt;&lt;br&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
     <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/11/php-unzipping/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Искусство обмана</title>
		<link>http://dmesg.org.ua/2009/11/art_of_deception/</link>
		<comments>http://dmesg.org.ua/2009/11/art_of_deception/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 14:52:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[социальная инженерия]]></category>

		<guid isPermaLink="false">http://dmesg.org.ua/?p=173</guid>
		<description><![CDATA[Не так давно пришлось звонить в одну компанию, с которой приходится сотрудничать, для решения одной неприятной проблемы. И так как проблема была срочной и неотлагательной , тон просьбы о помощи был напряженный и видимо по этой причине местный администратор , переняв паническое настроение, рассказал все подробности и тонкости работы сервиса, можно сказать совсем неизвестному человеку: [...]]]></description>
			<content:encoded><![CDATA[<p>Не так давно пришлось звонить в одну компанию, с которой приходится сотрудничать, для решения одной неприятной проблемы. И так как проблема была срочной и неотлагательной , тон просьбы о помощи был напряженный и видимо по этой причине местный администратор , переняв паническое настроение, рассказал все подробности и тонкости работы сервиса, можно сказать совсем неизвестному человеку: я звонил с мобильного телефона, и назвал только компанию в которой я работаю!<br />
Поэтому  я решил разместить, без согласия автора, довольно интересную и полезную для системного администратора  книгу, &#8211; <strong>&laquo;Искусство обмана&raquo;</strong> <a href="http://ru.wikipedia.org/wiki/Митник,_Кевин">Кевина Митника</a>. Думаю, её будет полезно почитать тем у кого ещё недостаточно развита профессиональная болезнь &#8211; паранойя :)</p>
<p><a href='http://dmesg.org.ua/wp-content/uploads/2009/11/obman.pdf' >Скачать &laquo;Искусство обмана&raquo; Кевина Митника</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmesg.org.ua/2009/11/art_of_deception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

