<?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>OpenSource в заметках &#187; Общее</title>
	<atom:link href="http://www.ashep.org/category/obshee/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ashep.org</link>
	<description>Путь к пониманию</description>
	<lastBuildDate>Fri, 09 Mar 2012 07:05:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Графические Git-клиенты</title>
		<link>http://www.ashep.org/2012/graficheskie-git-klienty/</link>
		<comments>http://www.ashep.org/2012/graficheskie-git-klienty/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 06:40:17 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[giggle]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[git-cola]]></category>
		<category><![CDATA[git-gui]]></category>
		<category><![CDATA[gitg]]></category>
		<category><![CDATA[gitk]]></category>
		<category><![CDATA[qgit]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2802</guid>
		<description><![CDATA[В сегодняшней заметке небольшая подборка графических фронтэндов для Git. Никаких подробных мануалов. Только ссылки, краткие описания и немножко скриншотов. git-gui Одна из двух официально-поставляемых вместе с Git графических утилит, созданных с использованием Tcl/Tk. Позволяет управлять коммитами, ветками и удалёнными репозиториями. gitk Вторая часть официального графического инструментария Git. Позволяет подробно просматривать историю репозитория, включая графическую визуализацию [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/graficheskie-git-klienty/' addthis:title='Графические Git-клиенты' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>В сегодняшней заметке небольшая подборка графических фронтэндов для <a href="http://www.ashep.org/tag/git">Git</a>. Никаких подробных мануалов. Только ссылки, краткие описания и немножко скриншотов.</p>
<img class="aligncenter size-full wp-image-2803" title="Git" src="http://www.ashep.org/wp-content/uploads/2012/03/Git-Gitweb-Repo.jpg" alt="" width="250" height="213" /><br />
<span id="more-2802"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<h3>git-gui</h3>
<p>Одна из двух официально-поставляемых вместе с Git графических утилит, созданных с использованием Tcl/Tk. Позволяет управлять коммитами, ветками и удалёнными репозиториями.</p>
<p><img class="aligncenter size-full wp-image-2806" title="git-gui" src="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-01.png" alt="" width="600" height="312" /></p>
<h3>gitk</h3>
<p>Вторая часть официального графического инструментария Git. Позволяет подробно просматривать историю репозитория, включая графическую визуализацию ветвления.</p>
<h3><a href="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-02.png"><img class="aligncenter size-thumbnail wp-image-2808" title="gitk" src="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-02-600x512.png" alt="" width="600" height="512" /></a>Giggle</h3>
<p><a href="https://live.gnome.org/giggle">Giggle</a> функционально схож с <strong>gitk</strong>, имея при этом более симпатичный GUI. Позволяет просматривать историю изменения каждого файла, графически визуализирует ветвление.</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-03.png"><img class="aligncenter size-thumbnail wp-image-2809" title="Giggle" src="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-03-600x450.png" alt="" width="600" height="450" /></a></p>
<h3>Git Cola</h3>
<p><a href="http://git-cola.github.com">Git Cola</a> предлагает функциональность схожую с <strong>git-gui</strong>.</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-04.png"><img class="aligncenter size-thumbnail wp-image-2810" title="Git Cola" src="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-04-600x436.png" alt="" width="600" height="436" /></a></p>
<h3>gitg</h3>
<p><a href="http://git.gnome.org/browse/gitg/">gitg</a> предоставляет возможность как просмотра истории репозитория, так и управления коммитами. Просмотр истории реализован похожим на <strong>gitk</strong> и <strong>giggle</strong> образом. Дополнительно предлагает графическое представление количества сделанных изменений. Управление коммитами похоже на то, как это реализовано в <strong>git-gui</strong>, за исключением некоторых функций.</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-05.png"><img class="aligncenter size-thumbnail wp-image-2812" title="gitg" src="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-05-600x489.png" alt="" width="600" height="489" /></a></p>
<p>QGit</p>
<p><a href="http://sourceforge.net/projects/qgit/">QGit</a> предлагает функциональность gitk, используя интерфейс построенный на базе QT.</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-06.png"><img class="aligncenter size-thumbnail wp-image-2813" title="QGit" src="http://www.ashep.org/wp-content/uploads/2012/03/git-gui-06-600x465.png" alt="" width="600" height="465" /></a></p>
<p>&nbsp;</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/graficheskie-git-klienty/' addthis:title='Графические Git-клиенты' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2012/graficheskie-git-klienty/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Git-хостинг при помощи Gitosis</title>
		<link>http://www.ashep.org/2012/git-xosting-pri-pomoshhi-gitosis/</link>
		<comments>http://www.ashep.org/2012/git-xosting-pri-pomoshhi-gitosis/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 13:06:16 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[gitosis]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2749</guid>
		<description><![CDATA[При организации совместной работы над проектами довольно существенную помощь оказывает Git. Выделяете отдельный хост для хранения репозиториев и&#160;&#8212; вуаля, никаких проблем связанных централизованным управлением версионностью файлов и отслеживанием изменений. Среди неудобств, с которым сталкиваются начинающие пользователи Git&#160;&#8212; это неудобство управления доступом к репозиториям. О том, как облегчить решение этой задачи, в сегодняшней заметке. Gitosis предназначен [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/git-xosting-pri-pomoshhi-gitosis/' addthis:title='Git-хостинг при помощи Gitosis' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>При организации совместной работы над проектами довольно существенную помощь оказывает <a href="http://www.ashep.org/tag/git">Git</a>. Выделяете отдельный хост для хранения репозиториев и&nbsp;&mdash; вуаля, никаких проблем связанных централизованным управлением версионностью файлов и отслеживанием изменений. Среди неудобств, с которым сталкиваются начинающие пользователи Git&nbsp;&mdash; это неудобство управления доступом к репозиториям. О том, как облегчить решение этой задачи, в сегодняшней заметке.</p>
<p><a href="https://github.com/res0nat0r/gitosis">Gitosis</a> предназначен для организации хостинга нескольких репозиториев под одной системной учётной записью, предоставляя возможность гибко управлять режимом доступа к каждому репозиторию. Аутентификация пользователей выполняется в Gitosis при помощи SSH-ключей пользователей.</p>
<img class="aligncenter" title="Git Logo" src="http://www.ashep.org/wp-content/uploads/2011/04/git-logo.png" alt="" width="136" height="160" /><br />
<span id="more-2749"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<h3>Принцип работы</h3>
<p>Принцип организации взаимодействия Gitosis с пользователями достаточно прост. Когда пользователь при помощи Git инициирует взаимодействие со своей стороны по протоколу SSH, на стороне сервера происходит обычная аутентификация пользователя на основе открытого ключа (не пугайтесь, механизм добавления новых ключей на стороне сервера очень прост и приятен). После того, как пользователь аутентифицирован средствами SSH-сервера, в игру вступает сервер Gitosis, который выполняет дальнейшие процедуры авторизации подключившегося и организует его работу с Git-репозиториями. Весь фокус такой схемы заключается в том, что работы Gitosis требуется один-единственный системный пользователь, который, в силу использования ключей для аутентификации, может не иметь пароля (т. е., не иметь возможности подключиться к системе терминально), а также для сессии которого не можно не выделять PTY-устройство. Всё это в сумме даёт значительное повышение безопасности вашей хост-системы.</p>
<h3>Установка</h3>
<p>Установить Gitosis можно как из пакетов (как минимум в актуальных Ubuntu и Debian он есть) или же &laquo;вручную&raquo; с Github. И в том, и в другом случаях вам сперва понадобится системная учётная запись, от имени которой будет работать Gitosis. Я обычно выбираю что-нибудь короткое и понятное для имени учётной записи:</p>
<pre>$ sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git</pre>
<p>Обратите внимание на опцию <strong>--disabled-password</strong>, которая не даст этой учётной записи возможности аутентифицироваться в системе, используя пароль. Аутентификация будет возможно только при помощи ключа или программы <strong>su</strong>. Теперь вам необходимо скопировать отрытый ключ пользователя, который будет администрировать будущий Gitosis-сервер и скопировать его в домашний каталог (или куда-нибудь, откуда вышесозданный пользователь сможет его достать, файл с ключом понадобится лишь временно) только созданного пользователя. Я, например, обычно использую свой RSA-ключ, которым пользуюсь для аутентификации на всех серверах, чтобы не запутаться. Сначала копируем файл открытого ключа с <strong>локальной системы</strong> на сервер в какой-нибудь каталог:</p>
<pre>$ scp ~/.ssh/id_rsa.pub ashep@myserver.com:/home/ashep/tmp</pre>
<p>после чего, уже <strong>на сервере</strong>, делаем его доступным пользователю git:</p>
<pre>$ sudo mkdir /home/git/tmp
$ sudo mv /home/ashep/tmp/id_rsa.pub /home/git/tmp/
$ sudo chown git:git /home/git/tmp/id_rsa.pub</pre>
<p>Теперь можно приступать к установке. Если необходимо установить Gitosis из пакета, всё просто:</p>
<pre>$ sudo apt-get install gitosis</pre>
<p>&laquo;Ручная&raquo; установка также особых сложностей не вызывает (обратите внимание, у вас в системе должен быть установлен пакет <strong>python-setuptools</strong>):</p>
<pre>$ git clone git://eagain.net/gitosis
$ cd gitosis
$ sudo python setup.py install</pre>
<p>После того, как Gitosis установлен, необходимо инициализировать окружение, в котором он будет работать. Входим в систему под пользователем git, которого создали ранее:</p>
<pre>$ sudo -i -u git</pre>
<p>И, оказавшись в домашнем каталоге пользователя git, выполняем инициализацию:</p>
<pre>$ gitosis-init &lt; ~/tmp/id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/</pre>
<p>Обратите внимание на путь к открытому ключу, который мы скопировали ранее. Теперь его можно удалить, чтоб не путался под ногами:</p>
<pre>$ rm ~/tmp/id_rsa.pub</pre>
<p>Последним шагом убедитесь, что файл  <strong>repositories/gitosis-admin.git/hooks/post-updatе</strong> является исполняемым, иначе Gitosis не сможет обновлять конфигурацию:</p>
<pre>$ chmod 0755 ~/repositories/gitosis-admin.git/hooks/post-update</pre>
<p>Вот и всё. Ваш Gitosis-хост готов принимать посетителей.</p>
<h3>Управление Gitosis</h3>
<p>Всё конфигурирование Gitosis базируется на работе с git-репозиторием, содержащим конфигурацию и ключи пользователей. Звучит слегка неожиданно, но давайте посмотрим, что это значит на практике. Находясь на вашем локальном хосте, под учётной записью, открытый ключ которой вы скопировали ранее, клонируйте следующий репозиторий с вашего Gitosis-сервера:</p>
<pre>$ git clone git@myserver.com:gitosis-admin.git
Cloning into gitosis-admin...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.</pre>
<p>Обратите внимание на имя учётной записи, от которой мы подключаемся к серверу. Перейдите в каталог с репозиторием и откройте в текстовом редакторе файл <strong>gitosis.conf</strong>:</p>
<pre>[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = ashep</pre>
<p>Файл имеет традиционную ini-структуру и используется для конфигурирования Gitosis на сервере. Не забывайте о том, что выполнять конфигурацию Gitosis вы должны только таим способом!</p>
<p>Итак, представим, что вам необходимо создать новый репозиторий, который будет называться <strong>myproj</strong>, и предоставить к нему доступ на чтение/запись пользователям <strong>mike</strong> и <strong>bob</strong>. Добавьте ещё одну секцию в файл gitosis.conf:</p>
<pre>[group myteam]
writable = myproj
members = mike bob</pre>
<p>Здесь в начале секции объявляется группа с именем <strong>myteam</strong>, в которую входят пользователи перечисленные в значении параметра <strong>members</strong> и имеющие доступ на запись в репозиторий <strong>myproj</strong>. Интересующиеся могут увидеть пример возможных опций конфигурационного файла Gitosis <a href="https://github.com/res0nat0r/gitosis/blob/master/example.conf">здесь</a>.</p>
<p>Далее, поместите открытые ключи новых пользователей в каталог <strong>keydir</strong> админ-репозитория. Обратите внимание на имена файлов ключей: они должны состоять из имён пользователей, которых вы перечислили в значении параметра <strong>members</strong>, плюс суффикс <strong>&laquo;.pub&raquo;</strong>.</p>
<pre>$ cp ~/tmp/mike.pub ~/tmp/bob.pub ./keydir</pre>
<p>Добавьте файлы ключей, а также файл конфигурации в индекс:</p>
<pre>$ git add ./keydir/* ./gitosis.conf</pre>
<p>И сделайте коммит:</p>
<pre>$ git commit -m 'Новый проект myproj, который делают mike и bob'</pre>
<p>Теперь осталось лишь обновить конфигурацию на сервере:</p>
<pre>$ git push</pre>
<h3>Создание репозитория</h3>
<p>Теперь указанные пользователи могут работать с репозиторием. Представим, что mike оказался первым, кому выпала честь инициализировать репозиторий на сервере. Ему необходимо перейти в каталог с локальным репозиторием, добавить новый remote-сервер:</p>
<pre>$ cd myproj
$ git remote add origin git@myserver.com:myproj.git</pre>
<p>после чего выполнить push репозитория:</p>
<pre>$ git push origin master</pre>
<p>Если всё настроено корректно, mike получит сообщение об успешной синхронизации нового репозитория.</p>
<h3>Клонирование репозитория</h3>
<p>Здесь тоже всё традиционно:</p>
<pre>$ git clone git@myserver.com:myproj.git</pre>
<h3>Ссылки</h3>
<ul>
<li><a href="https://wiki.archlinux.org/index.php/Gitosis">Gitosis на ArchWiki</a></li>
</ul>
<p>&nbsp;</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/git-xosting-pri-pomoshhi-gitosis/' addthis:title='Git-хостинг при помощи Gitosis' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2012/git-xosting-pri-pomoshhi-gitosis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Шпаргалка по Git</title>
		<link>http://www.ashep.org/2012/shpargalka-po-git/</link>
		<comments>http://www.ashep.org/2012/shpargalka-po-git/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 00:27:39 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[шпаргалки]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2730</guid>
		<description><![CDATA[Продолжая тему шпаргалок, хочу поделиться с вами недавно найденной шпаргалкой по Git. Такая себе, очень интересная инфографическая реализация авторства Zack Rusin. Уверен, эта работа знакома практически каждому, кто хоть чуточку интересовался Git, однако нередко бывает так, что очевидное и не замечаем. Вот она, в большом разрешении:<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/shpargalka-po-git/' addthis:title='Шпаргалка по Git' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[Продолжая тему <a href="http://www.ashep.org/tag/shpargalki">шпаргалок</a>, хочу поделиться с вами недавно найденной шпаргалкой по Git. Такая себе, очень интересная инфографическая реализация авторства <a href="http://zrusin.blogspot.com/">Zack Rusin</a>.<br />
<img class="aligncenter" title="Git" src="http://www.ashep.org/wp-content/uploads/2011/04/git-logo.png" alt="" width="136" height="160" /><br />
<span id="more-2730"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>
Уверен, эта работа знакома практически каждому, кто хоть чуточку интересовался Git, однако нередко бывает так, что очевидное и не замечаем. Вот она, в большом разрешении:</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/02/git-cheat-sheet-large.png"><img class="aligncenter size-thumbnail wp-image-2731" title="Шпаргалка по Git" src="http://www.ashep.org/wp-content/uploads/2012/02/git-cheat-sheet-large-600x463.png" alt="" width="600" height="463" /></a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/shpargalka-po-git/' addthis:title='Шпаргалка по Git' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2012/shpargalka-po-git/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zen Coding и Vim</title>
		<link>http://www.ashep.org/2012/zen-coding-i-vim/</link>
		<comments>http://www.ashep.org/2012/zen-coding-i-vim/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 12:12:44 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[GVim]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[Zen Coding]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2610</guid>
		<description><![CDATA[Те, кому по роду своей деятельности доводится частенько создавать и редактировать HTML-код, вероятно знакомы с такой штукой, как &#171;Zen Coding&#187;. Zen Coding представляет из себя набор сокращений, благодаря которым можно на порядок увеличить производительность авторов XML-подобных документов. Данная заметка посвящается тем, кто вообще впервые слышит о Zen-Coding, а также тем, кто успешно использовал его в [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/zen-coding-i-vim/' addthis:title='Zen Coding и Vim' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Те, кому по роду своей деятельности доводится частенько создавать и редактировать HTML-код, вероятно знакомы с такой штукой, как <strong>&laquo;Zen Coding&raquo;</strong>. Zen Coding представляет из себя набор сокращений, благодаря которым можно на порядок увеличить производительность авторов XML-подобных документов. Данная заметка посвящается тем, кто вообще впервые слышит о Zen-Coding, а также тем, кто успешно использовал его в других редакторах и хотел бы получить это счастье в старом-добром-любимом <a href="http://www.ashep.org/tag/vim">Vim</a>.</p>
<img class="wp-image-2612 aligncenter" title="speed-up" src="http://www.ashep.org/wp-content/uploads/2012/01/speed-up.jpg" alt="" width="250" height="250" /><br />
<span id="more-2610"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<h3>Как это работает</h3>
<p>Чтобы тем, кто впервые слышит о Zen Coding, было сразу понятно, какие &laquo;плюшки&raquo; они получат в результате, рассмотрим пару примеров.</p>
<p>Допустим, вы начинаете верстать новый HTML5-документ. С чего вы начнёте? Как правило с создания &laquo;скелета&raquo; документа, включающего в себя несколько строк. От документа к документу этот &laquo;скелет&raquo; остаётся одним и тем и набирать его вручную&nbsp;&mdash; занятие не из разряда полезных. Да, можно хранить шаблон где-то в файле и при создании нового документа просто копировать его оттуда при помощи буфера обмена. Но здесь опять возникает неприятный момент: найти файл, открыть, скопировать...</p>
<p>Пользователи Zen Coding имеют возможность создать новый HTML5-документ следующим образом. В новом файле вводится аббревиатура:</p>
<pre>html:5</pre>
<p>Нажимается определённая клавиатурная комбинация, и вуаля:</p>
<pre>&lt;!DOCTYPE HTML&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Или, например, вам нужно создать маркированный список из 5 элементов? Нет ничего проще:</p>
<pre>ul&gt;li*3</pre>
<p>лёгким движением руки превращается в:</p>
<pre>&lt;ul&gt;
	&lt;li&gt;&lt;/li&gt;
	&lt;li&gt;&lt;/li&gt;
	&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
<p>Впечатляет? И это далеко не всё, что умеет Zen Coding! Прежде, чем приступать к изучению возможностей библиотеки, установим необходимый плагин в Vim.</p>
<h3>Установка Zen Coding в Vim</h3>
<p>Список плагинов Zen Coding для различных редакторов вы можете найти на странице <a href="http://code.google.com/p/zen-coding/downloads/list">загрузок</a> проекта. Плагин для Vim живёт на <a href="https://github.com/mattn/zencoding-vim">GitHub</a> и вы можете либо скачать <a href="https://github.com/mattn/zencoding-vim/zipball/master">zip-архив</a> с плагином, либо получить его при помощи git:</p>
<pre>$ git clone http://github.com/mattn/zencoding-vim.git</pre>
<p>Установка плагина заключается в копировании двух каталогов в каталог <em>~/.vim</em>:</p>
<pre>$ mkdir -p ~/.vim
$ cp -Rv zencoding-vim/autoload ~/.vim
$ cp -Rv zencoding-vim/plugin ~/.vim</pre>
<h3>Аббревиатуры</h3>
<p>Принцип работы Zen Coding основан на т. н. аббревиатурах&nbsp;&mdash; сокращениях, из которых Zen Coding умеет строить код, или &laquo;расширять аббревиатуры&raquo;.</p>
<p>Пара простых примеров расширения аббревиатур приведены в начале заметки, а сейчас посмотрим, как это работает в Vim.</p>
<p>Откройте новый файл:</p>
<pre>$ vim index.html</pre>
<p>перейдите в режим вставки и введите:</p>
<p><img class="size-full wp-image-2613 aligncenter" title="Zen Coding в Vim" src="http://www.ashep.org/wp-content/uploads/2012/01/zc-01.png" alt="" width="400" height="200" /></p>
<p>теперь (обратите внимание на то, где находится курсор), используя клавиатурную комбинацию <strong>&lt;c-y&gt;,</strong> (Ctrl + y + запятая), расширьте аббревиатуру:</p>
<p><img class="size-full wp-image-2614 aligncenter" title="Zen Coding в Vim" src="http://www.ashep.org/wp-content/uploads/2012/01/zc-02.png" alt="" width="400" height="290" /></p>
<p>Zen Coding &laquo;знает&raquo; массу HTML-тэгов и корректно их расширяет из аббревиатур. Например, аббревиатура</p>
<pre>a</pre>
<p>будет расширена в</p>
<pre>&lt;a href=""&gt;&lt;/a&gt;</pre>
<p>а, например</p>
<pre>img</pre>
<p>будет расширена в</p>
<pre>&lt;img src="" alt="" /&gt;</pre>
<p>поскольку аббревиатуры совпадают HTML-тэгами, сложности в их использовании возникнуть не должно.</p>
<h3>Селекторы</h3>
<p>Расширение аббревиатур&nbsp;&mdash; это, конечно, здорово, однако имея в распоряжении только их, сильно производительность кодинга не увеличишь. К счастью, Zen Coding умеет работать с<em> селекторами</em> (очень напоминают и максимально приближены по смыслу к селекторам в CSS).</p>
<p>Именно селекторы использовались во втором примере из начала статьи, когда строился список из пяти элементов. Сейчас давайте рассмотрим использование селекторов подробнее.</p>
<h4># (решётка)</h4>
<p>Этот селектор, как вы уже могли догадаться, используется для определения идентификаторов элементов. Например:</p>
<pre>div#header</pre>
<p>будет преобразовано в</p>
<pre>&lt;div id="header"&gt;&lt;/div&gt;</pre>
<h4>. (точка)</h4>
<p>Этим селектором определяется CSS-класс элементов. Например:</p>
<pre>p.first</pre>
<p>будет преобразовано в</p>
<pre>&lt;p class="first"&gt;&lt;/p&gt;</pre>
<h4>&gt; (символ &laquo;больше&raquo;)</h4>
<p>Этот селектор используется, когда вам нужно определить вложенный элемент. Например:</p>
<pre>ul&gt;li</pre>
<p>будет преобразовано в</p>
<pre>&lt;ul&gt;
	&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
<p>или, например:</p>
<pre>table&gt;tr&gt;td</pre>
<p>будет преобразовано в</p>
<pre>&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;tr&gt;
&lt;/table&gt;</pre>
<h4>[] (квадратные скобки)</h4>
<p>На примере тэга <em>img</em> вы увидели, что Zen Coding умеет автоматически вставлять атрибуты некоторых тегов. Используя селектор <em>[]</em>, вы можете самостоятельно определять атрибуты тэгов и их значения. Например:</p>
<pre>a[href=http://www.ashep.org title="Cool Site"]</pre>
<p>будет преобразовано в</p>
<pre>&lt;a href="http://www.ashep.org" title="Cool Site"&gt;&lt;/a&gt;</pre>
<p>или, например:</p>
<pre>div[myprop1="My Value One" myprop2]</pre>
<p>будет преобразовано в</p>
<pre>&lt;div myprop1="My Value One" myprop2=""&gt;&lt;/div&gt;</pre>
<h4>| (вертикальная черта)</h4>
<p>Zen Conding, начиная с версии 0.6, поддерживает использование т. н. <em>фильтров</em>, которые позволяют выполнять некоторые преобразования после того, как выражение Zen Coding будет преобразовано. Давайте посмотрим, как это работает, на примере использования фильтра <em>&laquo;e&raquo; (escape)</em>:</p>
<pre>p.first|e</pre>
<p>будет преобразовано в</p>
<pre>&amp;lt;p class="first"&amp;gt;&amp;lt;/p&amp;gt;</pre>
<p>С полным списком фильтров Zen Coding вы можете ознакомиться на соответствующей <a href="http://code.google.com/p/zen-coding/wiki/Filters">странице</a> проекта.</p>
<h4>+ (плюс)</h4>
<p>Этот селектор по разному рассматривается в двух вариантах использования. Первый вариант, это когда необходимо создать несколько невложенных элементов подряд. Например</p>
<pre>p+div+p</pre>
<p>будет преобразовано в</p>
<pre>&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;</pre>
<p>Во втором случае селектор <em>&laquo;+&raquo;</em> используется для построения минимально-завершённой структуры некоторых элементов. Например:</p>
<pre>table+</pre>
<p>будет преобразовано в</p>
<pre>&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;tr&gt;
&lt;/table&gt;</pre>
<h4>* (звёздочка)</h4>
<p>Как можно догадаться, глядя на символ селектора, он используется в качестве мультипликатора элементов. Например:</p>
<pre>div*3</pre>
<p>будет преобразовано в</p>
<pre>&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;</pre>
<h4>$* (доллар и звёздочка)</h4>
<p>Иногда бывает необходимо создать несколько элементов с разным значением какого-то атрибута, при этом значение нужно последовательно пронумеровать. Нет ничего проще:</p>
<pre>div#myitem-$*3</pre>
<p>будет преобразовано в</p>
<pre>&lt;div id="myitem-1"&gt;&lt;/div&gt;
&lt;div id="myitem-2"&gt;&lt;/div&gt;
&lt;div id="myitem-3"&gt;&lt;/div&gt;</pre>
<h3>Объединение селекторов</h3>
<p>Конечно же, вся мощь Zen Coding кроется в одновременном использовании селекторов, позволяющем за один присест генерировать сколь угодно большие объёмы структурированного кода. Например:</p>
<pre>img.small.square#img1</pre>
<p>будет преобразовано в</p>
<pre>&lt;img id="img1" src="" alt="" class="small square" /&gt;</pre>
<p>а выражение</p>
<pre>table&gt;tr&gt;td*3</pre>
<p>развернётся в</p>
<pre>&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;tr&gt;
&lt;/table&gt;</pre>
<p>Или, например:</p>
<pre>select&gt;option#username-$*3</pre>
<p>превратится в</p>
<pre>&lt;select id="" name=""&gt;
    &lt;option id="username-1" value=""&gt;&lt;/option&gt;
    &lt;option id="username-2" value=""&gt;&lt;/option&gt;
    &lt;option id="username-3" value=""&gt;&lt;/option&gt;
&lt;/select&gt;</pre>
<h3>Резюме</h3>
<p>Zen Coding является отличным инструментом для повышения производительности труда верстальщиков XML-подобных документов, и потраченные 15 минут на изучение и установку плагина в вашем редакторе с лихвой окупятся уже через час. Получить больше информации вы, как всегда, можете на сайте проекта по адресу <a href="http://code.google.com/p/zen-coding/">http://code.google.com/p/zen-coding/</a>. В одной из следующих заметок я расскажу о некоторых фишках плагина Zen Coding для Vim.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/zen-coding-i-vim/' addthis:title='Zen Coding и Vim' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2012/zen-coding-i-vim/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Шпаргалки для начинающих никсоидов</title>
		<link>http://www.ashep.org/2012/shpargalki-dlya-nachinayushhix-niksoidov/</link>
		<comments>http://www.ashep.org/2012/shpargalki-dlya-nachinayushhix-niksoidov/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 08:53:58 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Рабочий стол]]></category>
		<category><![CDATA[Система]]></category>
		<category><![CDATA[начинающим]]></category>
		<category><![CDATA[обои]]></category>
		<category><![CDATA[шпаргалки]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2570</guid>
		<description><![CDATA[Те, кто только начинают постигать путь командной строки, и даже те, кто уже давненько &#171;в теме&#187;, иногда сталкиваются с ситуацией, когда &#171;блин, ну вот помню, что команда делает, а как её звать&#160;&#8212; вылетело из головы&#187;. Не знаю, у кого как, а меня пару раз такие ситуации изрядно выводили из себя и дело доходило до звонков [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/shpargalki-dlya-nachinayushhix-niksoidov/' addthis:title='Шпаргалки для начинающих никсоидов' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[Те, кто только начинают постигать путь командной строки, и даже те, кто уже давненько &laquo;в теме&raquo;, иногда сталкиваются с ситуацией, когда &laquo;блин, ну вот помню, что команда делает, а как её звать&nbsp;&mdash; вылетело из головы&raquo;. Не знаю, у кого как, а меня пару раз такие ситуации изрядно выводили из себя и дело доходило до звонков знакомым с просьбой о помощи. Когда-то давно были попытки вести заметки в небольшом блокнотике, который то и дело терялся в самый нужный момент, ведь не очень часто бывает нужен. В итоге самым эффективным методом для меня лично оказался обычный набор листочков, прилепленный на стену, которая рядом с рабочим местом. Самой большой проблемой в таком варианте оказалась необходимость обновлять содержимое этих листочков, ведь сразу всё, что нужно, не впишешь.<br />
<img class="size-full wp-image-2571 aligncenter" title="Шпаргалки" src="http://www.ashep.org/wp-content/uploads/2012/01/books.jpg" alt="" width="250" height="235" /><br />
<span id="more-2570"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>
Сама по себе идея не нова и используется многими, кто ощущает необходимость в структурном хранении необходимых, но не слишком часто используемых знаний. Кто-то хранит, как и я, всё на отдельных шпаргалках, дополняя и распечатывая их по мере необходимости, кто-то размещает подобные шпаргалки прямо на рабочем столе. Да много вариантов может быть, если проявить смекалку.</p>
<p>Недавно наткнулся в Сети на неплохую подборку частых полезностей, которую можно распечатать и использовать в настольном варианте, чем радостно <a href="http://dl.dropbox.com/u/397277/bash_shell_cheat_sheetV2.pdf">делюсь</a> с читателями. Блог автора, на всякий случай: <a href="http://freeworld.posterous.com">http://freeworld.posterous.com</a>. Также есть устаревшая <a href="http://dl.dropbox.com/u/397277/terminal_cheat_sheetV2/index.htm">онлайн-версия</a>, для тех кому вдруг не подходит PDF-вариант.</p>
<p>Ещё одна шпаргалка размером с простыню, но весьма структурированная и мегаполезная есть <a href="http://cb.vu/unixtoolbox.xhtml">здесь</a>. На стену в полном объёме не вывесишь, но деражть на рабочем столе в виде <a href="http://cb.vu/unixtoolbox.pdf">PDF</a>&nbsp;&mdash; вполне.</p>
<p>Для почитателей же &laquo;настольных&raquo; вариантов шпаргалок существует масса разнообразных обоев. Из интересных полезняшек, найденных в Сети, хочу поделиться популярной обойкой с коллекцией команд UNIX/Linux, разбитых по категориям:</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/01/useful-wallpapers-01.jpg"><img class="size-thumbnail wp-image-2573 aligncenter" title="Useful Wallpapers" src="http://www.ashep.org/wp-content/uploads/2012/01/useful-wallpapers-01-600x480.jpg" alt="" width="600" height="480" /></a></p>
<p>небольшой подборкой памятной информации для убунтоидов:</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/01/useful-wallpapers-03.png"><img class="size-thumbnail wp-image-2574 aligncenter" title="Useful Wallpapers" src="http://www.ashep.org/wp-content/uploads/2012/01/useful-wallpapers-03-600x480.png" alt="" width="600" height="480" /></a></p>
<p>и коллекцией шорткатов для пользователей Ubutu Unity:</p>
<p><a href="http://www.ashep.org/wp-content/uploads/2012/01/useful-wallpapers-02.png"><img class="size-thumbnail wp-image-2575 aligncenter" title="Useful Wallpapers" src="http://www.ashep.org/wp-content/uploads/2012/01/useful-wallpapers-02-600x400.png" alt="" width="600" height="400" /></a></p>
<p>Специально для защитников авторских прав: обои найдены в Сети и точное авторство каждого из них установить сейчас уже трудно, да и не вижу смысла. Гугл в помощь! ;)</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2012/shpargalki-dlya-nachinayushhix-niksoidov/' addthis:title='Шпаргалки для начинающих никсоидов' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2012/shpargalki-dlya-nachinayushhix-niksoidov/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Получение информации о файлах при помощи stat</title>
		<link>http://www.ashep.org/2011/poluchenie-informacii-o-fajlax-pri-pomoshhi-stat/</link>
		<comments>http://www.ashep.org/2011/poluchenie-informacii-o-fajlax-pri-pomoshhi-stat/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 21:14:08 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[stat]]></category>
		<category><![CDATA[файловая система]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2430</guid>
		<description><![CDATA[В предыдущей статье мы с вами знакомились с термином &#39;inode&#39; и о роли индексных дескрипторов в жизни файловой системы. Однако мы не рассмотрели того, как получить подробную информацию о том, сколько всего inode доступно в файловой системе, а также сколько свободных осталось. Это и многое другое можно узнать при помощи утилиты stat. Утилита stat является [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/poluchenie-informacii-o-fajlax-pri-pomoshhi-stat/' addthis:title='Получение информации о файлах при помощи stat' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">В <a href="http://www.ashep.org/2011/chto-takoe-inode/">предыдущей статье</a> мы с вами знакомились с термином &#39;inode&#39; и о роли индексных дескрипторов в жизни файловой системы. Однако мы не рассмотрели того, как получить подробную информацию о том, сколько всего inode доступно в файловой системе, а также сколько свободных осталось. Это и многое другое можно узнать при помощи утилиты <em>stat</em>.</p>
<img class="size-full wp-image-2434 aligncenter" title="Filesystem" src="http://www.ashep.org/wp-content/uploads/2011/06/Filesystem.png" alt="" width="250" height="254" /><br />
<span id="more-2430"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p style="text-align: justify;">Утилита stat является частью <a href="http://www.gnu.org/software/coreutils/">GNU Coreutils</a>, а значит должна быть доступна в любом современном Linux-дистрибутиве. Задачей stat является вывод информации об одном или более файлов, а также о файловых системах. При помощи утилиты вы сможете узнать, например, сколько блоков диска выделено для хранения файла, сколько индексных дескрипторов доступно на той или иной ФС, а также многое другое. Основным преимуществом stat является то, что вы можете получать информацию в любом удобном для вас виде, что даёт возможность очень легко получать нужные данные и манипулировать ими в <a href="http://www.ashep.org/tag/scripting/">сценариях оболочки</a>.</p>
<p style="text-align: justify;">В общем случае формат вызова stat таков:</p>
<pre>stat [опция]... [путь]...</pre>
<p style="text-align: justify;">Давайте, например, посмотрим на вывод информации о <em>/etc/passwd</em>:</p>
<pre style="text-align: justify;">$ stat /etc/passwd
 File: `/etc/passwd'
 Size: 2154          Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d    Inode: 786548      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2011-06-20 19:00:01.606463000 +0300
Modify: 2011-05-24 20:39:21.836670002 +0300
Change: 2011-05-24 20:39:21.860670002 +0300</pre>
<p style="text-align: justify;">Из полученного вывода можно определить следующее:</p>
<ul>
<li>файл имеет размер 2154 байта, занимает восемь 512-байтных блоков ;</li>
<li>размер блока ФС, на которой расположен файл, при операциях ввода/вывода составляет 4 килобайта;</li>
<li>идентификатор устройства, на котором расположен файл: 802h (шестнадцатеричный) или 2050d (десятичный);</li>
<li>номер индексного дескриптора файла&nbsp;&mdash; 786548;</li>
<li>файл не имеет жёстких ссылок (одна ссылка в отчёте stat&nbsp;&mdash; и есть сам файл);</li>
<li>режим доступа к файлу: 0644;</li>
<li>владелец файла&nbsp;&mdash; root, группа-владелец&nbsp;&mdash; root;</li>
<li>время последнего доступа к файлу: 2011-06-20 19:00:01;</li>
<li>время последнего изменения файла: 2011-05-24 20:39:21;</li>
<li>время последнего изменения индексного дескриптора файла: 2011-05-24 20:39:21;</li>
</ul>
<p style="text-align: justify;">Как уже говорилось, вы можете явно определять, какую информацию нужно выводить, а какую нет. Для этих целей в программе предусмотрена опция <em>&#39;--printf&#39;</em>, после которой необходимо указать нужный вам формат вывода. Например, следующая команда выведет, разделив знаком табуляции: имя файла, его размер в байтах, размер в блоках, номер его inode и тип файла с точки зрения ОС. Вывод будет завершён символом новой строки:</p>
<pre style="text-align: justify;">$ stat --printf '%n\t%s\t%b\t%i\t%F\n' /etc/passwd
/etc/passwd    2154    8    786548    regular file</pre>
<p style="text-align: justify;">Подобным образом вы можете выводить информацию сразу о нескольких файлах, перечислив пути к ним в качестве аргументов:</p>
<pre style="text-align: justify;">$ stat --printf '%n\t%s\t%b\t%i\t%F\n' /etc/passwd /dev/dvd /dev/sg0
/etc/passwd    2154    8    786548    regular file
/dev/dvd       3       0    6997      symbolic link
/dev/sg0       0       0    5519      character special file</pre>
<p style="text-align: justify;">или же, естественно, вы можете использовать wildcards оболочки:</p>
<pre style="text-align: justify;">$ stat --printf '%n\t%s\t%b\t%i\t%F\n' /tmp/*
/tmp/gnucash.trace         0       0    392110    regular empty file
/tmp/hsperfdata_ashep      4096    8    392064    directory
/tmp/keyring-XJ5URh        4096    8    392007    directory
/tmp/mc-ashep              4096    8    413063    directory
/tmp/orbit-ashep           4096    8    391967    directory
/tmp/orbit-gdm             4096    8    391960    directory
/tmp/plugtmp               4096    8    412871    directory
/tmp/pulse-rwNQrxNhZvCt    4096    8    392060    directory
/tmp/ssh-PYSARO7941        4096    8    391958    directory
/tmp/virtual-ashep.ENf1ty  4096    8    392104    directory</pre>
<p style="text-align: justify;">Подробную информацию обо всех возможных параметрах, которые можно перечислять в опции <em>&#39;--format</em>&#39; можно получить на <a href="http://www.gnu.org/software/coreutils/manual/html_node/stat-invocation.html">странице руководства утилиты</a>.</p>
<p style="text-align: justify;">stat может быть использована также для получения информации о файловых системах. Для этого программе нужно передать опцию &#39;-f&#39;:</p>
<pre style="text-align: justify;">$ stat -f /
 File: "/"
 ID: 5d2e58a2f8a69ac2 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 3844964    Free: 1684537    Available: 1489222
Inodes: Total: 977280     Free: 510081</pre>
<p style="text-align: justify;">Возвращаясь к нашим баранам, здесь вы как раз и можете увидеть общее, а также свободное количество блоков и индексных дескрипторов, доступных на файловой системе, а также другую полезную информацию:</p>
<ul>
<li>идентификатор файловой системы: 5d2e58a2f8a69ac2;</li>
<li>максимальная длина имени файла: 255 символов;</li>
<li>тип ФС: ext2/ext3;</li>
<li>размер блока: 4 килобайта;</li>
<li>общее количество блоков: 3844964, свободных: 1684534, <a href="http://www.ashep.org/2011/vysvobozhdenie-rezervnyx-blokov/">доступных не суперпользователю</a>: 1489222;</li>
<li>общее количество индексных дескрипторов: 977280, свободных: 510081.</li>
</ul>
<p>Так же, как и при выводе информации о файлах, в случае с данными о файловой системе вы можете указать программе желаемый формат при выводе. Например, следующая команда выедет, разделив табуляцией, идентификатор ФС, количество свободных inode и количество свободных блоков, завершив вывод символом новой строки:</p>
<pre>$ stat --printf '%i\t%d\t%b\n' -f /
5d2e58a2f8a69ac2    510081    3844964</pre>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/poluchenie-informacii-o-fajlax-pri-pomoshhi-stat/' addthis:title='Получение информации о файлах при помощи stat' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/poluchenie-informacii-o-fajlax-pri-pomoshhi-stat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Что такое inode</title>
		<link>http://www.ashep.org/2011/chto-takoe-inode/</link>
		<comments>http://www.ashep.org/2011/chto-takoe-inode/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 17:43:50 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Система]]></category>
		<category><![CDATA[inode]]></category>
		<category><![CDATA[файловая система]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2416</guid>
		<description><![CDATA[На просторах Сети часто-густо можно встретить обсуждения работы файловых систем. В подобных дискуссиях часто можно встретить термин &#171;inode&#187;&#160;&#8212; индексный дескриптор. Многие новички задаются вопросом: &#171;что же такое, этот inode?&#187;, поскольку без понимания значения этого термина они не могут вникнуть в суть обсуждения тех или иных тонкостей работы файловых систем. В этой заметке мы с вами [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/chto-takoe-inode/' addthis:title='Что такое inode' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">На просторах Сети часто-густо можно встретить обсуждения работы файловых систем. В подобных дискуссиях часто можно встретить термин <em>&laquo;inode&raquo;</em>&nbsp;&mdash; <em>индексный дескриптор</em>. Многие новички задаются вопросом: &laquo;что же такое, этот inode?&raquo;, поскольку без понимания значения этого термина они не могут вникнуть в суть обсуждения тех или иных тонкостей работы файловых систем. В этой заметке мы с вами попробуем разобраться, что же такое inode и с чем её едят. Автор не является экспертом в области файловых систем, поэтому будет рад любым конструктивным замечаниям и поправкам.</p>
<img class="size-full wp-image-2424 aligncenter" title="Filesystem" src="http://www.ashep.org/wp-content/uploads/2011/06/filesystem.jpg" alt="" width="314" height="302" /><br />
<span id="more-2416"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p style="text-align: justify;">Файловые системы, как правило, состоят из двух частей:</p>
<ol>
<li>метаданных, т. н. данных о данных;</li>
<li>самих данных.</li>
</ol>
<p style="text-align: justify;">Первый пункт звучит довольно забавно: &laquo;данные о данных&raquo;, однако он является ключевым моментов в работе файловых систем. Если быть более точным, метаданные содержат информацию о данных, хранящихся на диске, таких как имена файлов, время их создания, права доступа и так далее. Роль метаданных крайне важна, поскольку без них файловая система представляла бы из себя лишь набор байт, в котором невозможно было бы определить что и где физически находится на диске.</p>
<h3 style="text-align: justify;">Индексный дескриптор</h3>
<p style="text-align: justify;">В общем случае в файловых системах операционных систем *NIX с каждым файлом и каталогом связан соответствующий дескриптор&nbsp;&mdash; inode, который обычно обозначается  целым числом и в котором хранятся метаданные. Происхождение термина &laquo;inode&raquo; точно неизвестно. Из <a href="http://ru.wikipedia.org/wiki/Inode">статьи на Википедии</a>, согласно словам Дениса Ритчи, одного из первых разработчиков UNIX-систем:</p>
<blockquote>
<p style="text-align: justify;">Честно говоря, я мало об этом знаю. Это был всего лишь термин, который мы начали использовать. &#39;Индекс&#39;, как я полагаю, использовался из-за несколько необычной структуры файловой системы, хранившая информацию о доступе к файлам в плоском (двумерном) массиве на диске, а вся информация об иерархии каталогов хранилась отдельно. Таким образом, и-номер являлся индексом в этом массиве, и-нод&nbsp;&mdash; выбранным элементом массива. (Приставка &#39;и-&#39; использовалась в первой версии руководства; со временем дефис перестали употреблять).</p>
</blockquote>
<p style="text-align: justify;">Каким образом создаются дескрипторы и вообще, создаются ли они, зависит от реализации конкретной файловой системы. Некоторые файловые системы создают дескрипторы в момент создания файловой системы, в результате располагая фиксированным количеством индексных дескрипторов, то есть фиксированным пределом количества файлов, хранящихся в ФС.  Так, например, работает файловая система <em>Ext-3</em>. Таким образом получается, что вы в какой-то момент не сможете создать файл, даже если свободного пространства на диске будет достаточно. Такое случается крайне редко, но, тем не менее, не исключено. Если, используя такую файловую систему, вам понадобиться больше индексных дескрипторов, вам придётся заново создавать ФС, средств увеличить количество inode без потери данных нет.</p>
<p style="text-align: justify;">Одним из способов обойти вышеописанное поведение ФС являются <a href="http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D1%82%D0%B5%D0%BD%D1%82">экстенты</a> и/или динамическое выделение индексных дескрипторов. Такие системы могут динамически расширяться и/или увеличивать количество inode.</p>
<p style="text-align: justify;">Индексные дескрипторы не являются чем-то мистическим, они являются частью Linux. Вы можете увидеть их присутствие, например при помощи команды <em>&#39;ls -i&#39;</em>:</p>
<pre>laytonjb@laytonjb-laptop:~/Documents/FEATURES/STORAGE088$ ls -il
total 1024
8847368 -rw-r--r-- 1 laytonjb laytonjb 115020 2011-04-24 07:33 Figure_1.png
8847366 -rw-r--r-- 1 laytonjb laytonjb  39200 2011-04-24 07:38 Figure_2.png
8847361 -rw-r--r-- 1 laytonjb laytonjb  30691 2011-04-24 07:40 Figure_3.png
8847367 -rw-r--r-- 1 laytonjb laytonjb  28835 2011-04-24 07:42 Figure_4.png
8847363 -rw-r--r-- 1 laytonjb laytonjb 115103 2011-04-24 07:43 Figure_5.png
8847362 -rw-r--r-- 1 laytonjb laytonjb 125513 2011-04-24 07:44 Figure_6.png
8847365 -rw-r--r-- 1 laytonjb laytonjb  77831 2011-04-24 07:44 Figure_7.png
7790593 -rw-r--r-- 1 laytonjb laytonjb  15632 2011-04-26 19:40 storage088.html
8847364 -rw-r--r-- 1 laytonjb laytonjb    183 2011-04-24 07:33 text1.txt
3089319 drwxr-xr-x 2 laytonjb laytonjb   4096 2011-04-24 07:54 TRIM_WORKS
5554211 -rw-r--r-- 1 laytonjb laytonjb 449110 2011-04-24 07:52 trim_works.tar.gz</pre>
<p style="text-align: justify;">Числа в первом столбце и есть номера inode. Также обратите внимание на каталог "TRIM_WORKS”, который тоже имеет номер inode, связанный с ним.</p>
<p style="text-align: justify;">Linux, которая в большинстве реализаций является POSIX-совместимой ОС, требует обязательного наличия атрибутов файла, располагающегося на ФС, в частности:</p>
<ul>
<li>размер файла в байтах;</li>
<li>идентификатор устройства;</li>
<li>идентификатор владельца файла;</li>
<li>идентификатор группы-владельца файла;</li>
<li>режим доступа к файлу, определяющий кто и какой доступ имеет к файлу;</li>
<li>дополнительные системные и пользовательские флаги, которые дополнительно могут ограничивать доступ к файлу и его модификацию;</li>
<li>таймштампы, отражающие время модификации индексного дескриптора (<em>ctime, changing time</em>), время модификации содержимого файла (<em>mtime, modification time</em>) и время последнего доступа к файлу (<em>atime, access time</em>);</li>
<li>счётчик для учёта количества жёстких ссылок на файл;</li>
<li>указатели на физические блоки диска, в которых хранится содержимое файла (об этом ниже).</li>
</ul>
<p style="text-align: justify;">Любая POSIX-совместимая Linux ОС должна хранить указанную информацию в индексных дескрипторах или же быть способной представлять эту информацию так, будто бы она хранится в них. Например, <a href="http://www.ashep.org/goto/http://ru.wikipedia.org/wiki/ReiserFS">ReiserFS</a> не использует традиционные inode. Вместо этого для хранения метаданных  в ReiserFS используется комбинированное <a href="http://www.ashep.org/goto/http://ru.wikipedia.org/wiki/B%2B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F">B&plusmn;дерево</a>, к роли ключей которого выступают универсальные идентификаторы объектов. Однако при запросе информации ReiserFS предоставляет её в POSIX-совместимом виде.</p>
<h3 style="text-align: justify;">Структура указателя индексного дескриптора</h3>
<p style="text-align: justify;">Согласно POSIX, в файловой системе есть элемент, называемый <a href="http://en.wikipedia.org/wiki/Inode_pointer_structure">inode pointer structure</a>&nbsp;&mdash; <em>структурой указателя индексного дескриптора</em>. Как говорилось выше, inode хранит метаданные, включая список блоков на диске, в которых располагается непосредственно содержимое файла. Структура указателя индексного дескриптора используется для извлечения списка дисковых блоков, ассоциированных с файлом.</p>
<p style="text-align: justify;">Согласно описанию с Википедии, эта структура хранит 11 или 13, а в самых современных ФС&nbsp;&mdash; 15 указателей. Назначение этих указателей следующее:</p>
<ul>
<li>12 указателей используются для хранения номеров блоков, содержащих непосредственно данные файла, и называются <em>прямыми указателями</em>;</li>
<li>один <em>одиночный косвенный указатель</em>. Этот указатель указывает на блок прямых указателей, хранящих данные файла;</li>
<li>один <em>двойной косвенный указатель</em>. Указывает на блок одиночных косвенных указателей;</li>
<li>один <em>тройной косвенный указатель</em>. Указывает на блок двойных косвенных указателей.</li>
</ul>
<p>Чтобы вышеописанное было проще понять, взгляните на иллюстрацию, взятую с Википедии:</p>
<p><img class="size-full wp-image-2421 aligncenter" title="Ext2-inode" src="http://www.ashep.org/wp-content/uploads/2011/06/Ext2-inode.gif" alt="" width="456" height="286" /></p>
<p style="text-align: justify;">На рисунке выше вы можете видеть прямые, одиночные косвенные и двойные косвенные блоки. Тройные косвенные блоки одним уровнем глубже двойных.</p>
<h3 style="text-align: justify;">Заключение</h3>
<p style="text-align: justify;">Концепция inode является фундаментальной частью *NIX , а также других ОС. По своей сути смысл inode является очень простым для понимания&nbsp;&mdash; это всего лишь метаданные о данных. То есть, он хранит полезную информацию о данных, хранящихся на диске. Такой информацией является, например, идентификатор владельца файла, идентификатор его группы-владельца, права доступа к файлу, а также различные временные штампы. Таким образом, когда вы используете, например, команду &#39;ls&#39;, она извлекает информацию о метаданных файлов и каталогов из их индексных дескрипторов.</p>
<p style="text-align: justify;">Некоторые файловые системы, например Ext3, создают все индексные дескрипторы в момент создания файловой системы. Такой подход может быть не совсем удачным, поскольку вы не сможете создавать новые файлы в случае, если все доступные inode будут использованы, даже если на диске достаточно места. Чтобы избежать подобных ограничений, можно использовать файловые системы вроде Ext4 и XFS, которые создают индексные дескрипторы по мере необходимости.</p>
<p style="text-align: justify;">Понимание назначения inode может оказаться весьма полезным для читателя. Вооружённые даже базовыми знаниями об inode, вы сможете лучше оценивать возможности различных файловых систем при выборе подходящей для вашей задачи.</p>
<p style="text-align: right;">Источник: <a href="http://www.ashep.org/goto/http://www.linux-mag.com/id/8658/">linux-mag.com</a></p>
<hr />
<p style="text-align: justify;">Давно ищете хорошего сотрудника в свой бизнес и уже соврешенно сбились с ног? Подобрать и подготовить хорошего <a href="http://www.frigate.su/ru/services/454/">продавца</a> для вас смогут в агенстве &laquo;Фрегат&raquo;. Кстати, тем, кто ищет хорошую работу, тоже будет полезно обратиться в агенство.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/chto-takoe-inode/' addthis:title='Что такое inode' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/chto-takoe-inode/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Пять grep-подобных программ</title>
		<link>http://www.ashep.org/2011/pyat-grep-podobnyx-programm/</link>
		<comments>http://www.ashep.org/2011/pyat-grep-podobnyx-programm/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 10:05:13 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[grepcidr]]></category>
		<category><![CDATA[ngrep]]></category>
		<category><![CDATA[pdfgrep]]></category>
		<category><![CDATA[pgrep]]></category>
		<category><![CDATA[taggrepper]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2393</guid>
		<description><![CDATA[Все знают и любят grep. Сегодня мы с вами рассмотрим пять утилит, &#171;заточенных&#187; для применения функционала grep в определённых условиях, а именно: pgrep, ﻿grepcidr, ngrep, pdfgrep и ﻿taggrepper. Использовать эти утилиты вы можете из своей любимой оболочки. также в заметке приводятся примеры использования каждой утилиты. pgrep pgrep становится довольно часто используемой командой (или это мне так [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/pyat-grep-podobnyx-programm/' addthis:title='Пять grep-подобных программ' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Все знают и любят <a href="http://www.ashep.org/2010/o-grep-dlya-nachinayushhix/">grep</a>. Сегодня мы с вами рассмотрим пять утилит, &laquo;заточенных&raquo; для применения функционала <em>grep</em> в определённых условиях, а именно: <em>pgrep</em>, <em>﻿grepcidr</em>, <em>ngrep</em>, <em>pdfgrep</em> и <em>﻿taggrepper</em>. Использовать эти утилиты вы можете из своей любимой оболочки. также в заметке приводятся примеры использования каждой утилиты.</p>
<img class="aligncenter" title="Grep" src="http://www.ashep.org/wp-content/uploads/2010/09/grep_tshirt-p235956313637539576t5hl_400.jpg" alt="" width="200" height="200" /><br />
<span id="more-2393"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<h3 style="text-align: justify;">pgrep</h3>
<p style="text-align: justify;"><em>pgrep</em> становится довольно часто используемой командой (или это мне так кажется). Задачей этой утилиты является просмотр списка запущенных процессов и вывод их PID согласно заданным критериям, не выводя при этом PID самой <em>pgrep</em>. Например:</p>
<pre>$ pgrep ssh
378
1854</pre>
<p style="text-align: justify;">В этом примере <em>pgrep</em> вывела идентификаторы процессов, имеющих в своих именах слово &#39;ssh&#39;. Для сравнения, пользуясь &laquo;традиционным&raquo; способом, вам пришлось бы дать команду:</p>
<pre>$ ps -ef |grep ssh |grep -v grep | awk '{print $2}'</pre>
<p style="text-align: justify;">Также, вы можете указывать дополнительные критерии поиска. Например команда:</p>
<pre>$ pgrep -u root sshd</pre>
<p style="text-align: justify;">выведет PID всех процессов, в командной строке запуска которых есть слово &#39;sshd&#39; и <em>эффективный</em> UID которых равен <em>root</em>. Или же, например, при помощи команды</p>
<pre>$ pgrep -u root,daemon</pre>
<p style="text-align: justify;">вы можете получить список PID процессов, эффективные UID которые равны <em>root</em> или <em>daemon</em>. Дополнительную информацию об утилите pgrep можно получить из её <a href="http://linux.die.net/man/1/pgrep">man-страницы</a>.</p>
<h3 style="text-align: justify;">grepcidr</h3>
<p style="text-align: justify;"><em>grepcidr</em> очень удобна в случаях, когда необходимо отыскать вхождения IP-адресов или их диапазонов в формате <a href="http://ru.wikipedia.org/wiki/%D0%91%D0%B5%D1%81%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D1%86%D0%B8%D1%8F">Classless Inter-Domain Routing (CIDR)</a>. Так же, как и <em>grep</em>, <em>grepcidr</em> понимает опцию инвертирования и может производить поиск в файле. grepcidr может производить сравнение с шаблоном тысячи и даже миллионы IP-адресов, используя небольшое количество памяти и делая это быстро.</p>
<p style="text-align: justify;">Формат вызова <em>grepcidr</em> для поиска IP-адресов в файле в общем случае таков:</p>
<pre>$ grepcidr шаблон файл</pre>
<p style="text-align: justify;">Шаблон может быть определён:</p>
<ul>
<li>в CIDR формате:	<em>a.b.c.d/xx</em></li>
<li>в виде диапазона: <em>a.b.c.d-e.f.g.h</em></li>
<li>в виде одиночного адреса:	<em>a.b.c.d</em></li>
</ul>
<p style="text-align: justify;">Например, найдём наших клиентов, оказавшихся в чёрном списке:</p>
<pre>$ grepcidr -f ournetworks blocklist &gt; abuse.log</pre>
<p style="text-align: justify;">Следующая команда отыщет все появления loopback-адресов в файле <em>iplog</em>:</p>
<pre>$ grepcidr 127.0.0.0/8 iplog</pre>
<p style="text-align: justify;">Следующей командой выполняется поиск IP-адресов из диапазона:</p>
<pre>$ grepcidr "192.168.0.1-192.168.10.13" iplog</pre>
<p style="text-align: justify;">А в этой команде список шаблонов берётся из файла <em>list1</em>:</p>
<pre>$ grepcidr -f list1 iplog</pre>
<p style="text-align: justify;">Больше информации об использовании <em>grepcidr</em> можно найти на её <a href="http://www.digipedia.pl/man/doc/view/grepcidr.1">man-странице</a>.</p>
<h3 style="text-align: justify;">ngrep</h3>
<p style="text-align: justify;">Задачей <em>ngrep</em> является поиск соответствия grep-шаблонов в сетевом трафике. <em>ngrep</em> является pcap-совместимой утилитой, что даёт пользователю возможность использовать шестнадцатиричные строки при определении шаблонов.</p>
<p style="text-align: justify;">Если вы запустите <em>ngrep</em> без параметров, вы увидите весь трафик, проходящий через ваш компьютер. Чтобы сузить полосу поиска вхождений шаблона лучше  воспользоваться опцией -d  для определения сетевого интерфейса, который нужно прослушивать. Например, следующая команда будет выводить содержимое пакетов, проходящих через интерфейса eth0 и в которых порт источника или порт получателя равны 80:</p>
<pre># ngrep -d eth0 port 80</pre>
<p style="text-align: justify;">А при помощи следующей команды вы получите содержимое пакетов любого интерфейса, содержащих <em>&#39;error&#39;</em> и в которых порт источника или порт получателя равны 514:</p>
<pre># ngrep -d any 'error' port syslog</pre>
<p style="text-align: justify;">Дополнительную информацию об <em>ngrep</em> можно найти в соответствующей <a href="http://linux.die.net/man/8/ngrep">man-странице</a>.</p>
<h3 style="text-align: justify;">pdfgrep</h3>
<p style="text-align: justify;"><em>pdfgrep</em>, как можно догадаться из её названия, предназначена для поиска по шаблону в тексте PDF-файлов. Набор опций pdfgrep похож на набор опций классической <em>grep</em>, то есть вы можете определить вывод номеров страниц, имён файлов, включить регистронезависимость и тому подобное. Например:</p>
<pre>$ pdfgrep -in seven SomeBook.pdf</pre>
<p style="text-align: justify;">будет выполнять регистронезависимый поиск слова &#39;seven&#39; в файле SomeBook.pdf с указанием номеров страниц, на которых соответствие шаблону было найдено.</p>
<p style="text-align: justify;">Дополнительную информацию об <em>pdfgrep</em> можно найти в соответствующей <a href="http://www.linuxcertif.com/man/1/pdfgrep/">man-странице</a>.</p>
<h3 style="text-align: justify;">taggrepper</h3>
<p style="text-align: justify;">taggrepper&nbsp;&mdash; это небольшая утилита для grep&#39;а тэгов в медиафайлах. На сегодняшний день она умеет выполнять поиск на основе регулярных выражений в тэгах файлов <em>MP3</em>, <em>Ogg Vorbis</em> и <em>FLAC</em>. Поддерживается рекурсивный обход файлов. Вот некоторые часто используемые опции утилиты, определяющие тип информации для вывода:</p>
<ul>
<li>--display-title</li>
<li>--display-artist</li>
<li>--display-album</li>
<li>--display-year</li>
<li>--display-genre</li>
<li>--display-comment</li>
<li>--display-track</li>
<li>--display-composer</li>
<li>--display-orig-artist</li>
<li>--display-copyright</li>
<li>--display-url</li>
<li>--display-encoded-by</li>
</ul>
<p style="text-align: justify;">Например, следующая команда выведет имена всех mp3-файлов 2009 года издания, начиная с текущего каталога:</p>
<pre>$ taggrepper -y 2009 -r *.mp3</pre>
<p style="text-align: justify;">А эта команда будет выведет список файлов каталога ~/AV/Music_collection/, в тэге исполнителя которых будет найден фрагмент &#39;Rahman&#39;:</p>
<pre>$ taggrepper -r -a Rahman ~/AV/Music_collection/</pre>
<p>Дополнительную информацию об <em>taggrepper</em> можно найти в соответствующей <a href="http://www.linuxcertif.com/man/1/taggrepper/">man-странице</a>.</p>
<h3>В заключение</h3>
<p>Не забывайте о существовании конвейеров оболочки и вы всегда сможете добиться хороших результатов при выполнении поставленных задач за более короткие строки.</p>
<p style="text-align: right;">Источник: <a href="http://linuxaria.com/howto/5-grep-like-commands">linuxaria.com</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/pyat-grep-podobnyx-programm/' addthis:title='Пять grep-подобных программ' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/pyat-grep-podobnyx-programm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Проверка ФС и восстановление удалённых файлов в Linux</title>
		<link>http://www.ashep.org/2011/proverka-fs-i-vosstanovlenie-udalyonnyx-fajlov-v-linux/</link>
		<comments>http://www.ashep.org/2011/proverka-fs-i-vosstanovlenie-udalyonnyx-fajlov-v-linux/#comments</comments>
		<pubDate>Tue, 10 May 2011 06:42:53 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Система]]></category>
		<category><![CDATA[e2fsck]]></category>
		<category><![CDATA[lsof]]></category>
		<category><![CDATA[scalpel]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2152</guid>
		<description><![CDATA[Linux&#160;&#8212; одна из самых надёжных операционных систем, которую вы когда-либо видели, однако это вовсе не означает, что оборудование на котором работает Linux такое же надёжное. Жёсткие диски могут работать с ошибками и как следствие&#160;&#8212; вы получите ошибки на ваших файловых системах. Неважно насколько надёжна ваша операционная система, если вы случайно удалили нужные файлы или каталоги. [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/proverka-fs-i-vosstanovlenie-udalyonnyx-fajlov-v-linux/' addthis:title='Проверка ФС и восстановление удалённых файлов в Linux' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><em>Linux</em>&nbsp;&mdash; одна из самых надёжных операционных систем, которую вы когда-либо видели, однако это вовсе не означает, что оборудование на котором работает Linux такое же надёжное. Жёсткие диски могут работать с ошибками и как следствие&nbsp;&mdash; вы получите ошибки на ваших файловых системах. Неважно насколько надёжна ваша операционная система, если вы случайно удалили нужные файлы или каталоги. Однако нее отчаивайтесь, если с вами произошло нечто подобное. Linux располагает всем необходимым, чтобы помочь вам восстановить потерянные файлы в результате удаления или сбоев в работе дисков и файловых систем. О каких инструментах идёт речь? Первым делом мы рассмотрим с вами утилиты <em>e2fsck</em>, <em>scalpel</em> и <em>lsof</em>. В сегодняшней заметке мы с вами посмотрим, как при помощи такого набора инструментов можно исправлять ошибки ФС и восстанавливать удалённые файлы.</p>
<p style="text-align: center;"><img class="size-full wp-image-2153 aligncenter" title="Data recovery" src="http://www.ashep.org/wp-content/uploads/2011/05/data-recovery.jpg" alt="" width="300" height="289" /></p>
<p><span id="more-2152"></span><br />
<!--adsesne--></p>
<h3 style="text-align: justify;">Проверка ФС ext2/ext3/ext4 при помощи e2fsck</h3>
<p style="text-align: justify;">Утилита <em>e2fsck</em> является потомком известной UNIX-утилиты <em>fsck</em>, предназначенной для проверки файловых систем. При помощи <em>e2fsck</em> вы можете проверять на наличие ошибок и выполнять восстановительные работы в файловых системах <em>ext2/ext3/ext4</em>.</p>
<p style="text-align: justify;">Одним из наиболее важных моментов в работе с e2fsck является то, что при помощи неё работы можно проводить только на отмонтированной файловой системе, в противном случае вы можете получить себе ещё больше головной боли, о чём и предупреждает сама утилита при попытке запуска её для работы на смонтированной ФС. Если проверяемая ФС не является корневой, то вы можете завершить работу всех пользователей, переключиться в однопользовательский режим (<em>init 1</em>), отмонтировать ФС и работать с ней.</p>
<p style="text-align: justify;">Однако автор всё же рекомендует воспользоваться каким-нибудь <a href="http://www.ashep.org/2010/pyat-luchshix-linux-live-distributivov/">live-дистрибутивом</a> и, загрузившись с него, выполнять все работы. Используя этот метод вы получите в своё полное распоряжение несмонтированные ФС без необходимости выполнять какие-то дополнительные действия.</p>
<p style="text-align: justify;">Если же вы по каким-то причинам выбираете первый вариант, то после того, как перейдёте в однопользовательский режим:</p>
<pre># init 1</pre>
<p style="text-align: justify;">отмонтируйте нужную для работы файловую систему:</p>
<pre style="text-align: justify;"># umount /dev/sdb1</pre>
<p style="text-align: justify;">и после успешного размонтирования запускайте  <em>e2fsck</em>:</p>
<pre style="text-align: justify;"># e2fsck -y /dev/sdb1</pre>
<p style="text-align: justify;">Опция <em>&#39;-y&#39;</em> сообщает утилите <em>e2fsck</em> о том, что мы заранее согласны со всеми её вопросами и уходим пить кофе, в надежде что она самостоятельно всё сделает. В зависимости от размера файловой системы проверка и восстановление могут занять некоторое время. После окончания проверки вы всегда можете запустить тест ещё раз, чтобы убедиться в том, что не в ФС не возникло новых ошибок, что может быть вызвано аппаратными проблемами накопителя.</p>
<p style="text-align: justify;">После того, как все проверки и восстановительные работы будут закончены, вы можете смонтировать проверенную файловую систему и обратно вернуться в много пользовательский режим. Или же вы просто можете перезагрузить систему.</p>
<h3 style="text-align: justify;">Восстановление удалённых файлов при помощи /proc и lsof</h3>
<p style="text-align: justify;">Теперь давайте рассмотрим процесс восстановления удалённых файлов. Вообще, причиной тому что вы можете восстановить удалённый файл является тот факт, что &laquo;файл&raquo;&nbsp;&mdash; это лишь ссылка на индексный дескриптор файла (<em>inode)</em>. Именно в <em>inode</em> хранится информация о физическом размещении файла. Когда вы удаляете файл, фактически вы просто удаляете ссылку на <em>inode</em>, в то время как сам дескриптор ещё какое-то время будет существовать: до тех пор, пока процесс, ранее открывший этот файл не освободит соответствующий дескриптор для записи. Таким образом, есть какое-то время, пусть и короткое, в течение которого можно восстановить содержимое удалённого файла. Ключом в этом процессе является файловая система <a href="http://www.ashep.org/2011/nemnogo-ob-ispolzovanii-proc/">/proc</a>, содержащая среди всего прочего информацию обо всех выполняющихся в системе процессах и открытых ими файлах. Каждый процесс, работающий в системе имеет соответствующий его PID каталог в <em>/proc</em>. Зная PID процесса, всё ещё держащего открытым удалённый файл, мы всегда можем восстановить его содержимое из каталога /proc/[pid]/ открывшего его процесса. Давайте на простом примере посмотрим, как это делается.</p>
<p style="text-align: justify;">Сперва давайте создадим какой-нибудь файл:</p>
<pre style="text-align: justify;">$ echo 'Очень важные данные' &gt; ~/myfile.txt</pre>
<p style="text-align: justify;">Теперь у нас есть файл <em>myfile.txt</em> с важными данными, расположенный в домашнем каталоге. Давайте попробуем удалить его и затем восстановить следующим образом. Сначала мы откроем файл для просмотра командой <em>less</em>, после чего приостановим её работу, оставив таким образом нужный нам файл открытым. Итак, пошагово.</p>
<p>Откройте файл командой <em>less</em> для просмотра</p>
<pre>$ less ~/myfile.txt</pre>
<p>После того, как файл будет открыт и вы увидите его содержимое, нажмите <em>Ctrl+z</em> , чтобы приостановить выполнение <em>less</em>.</p>
<p>Удалите файл:</p>
<pre>$ rm ~/myfile.txt</pre>
<p>Убедитесь в том, что файла больше нет</p>
<pre>$ ls -l ~/myfile.txt</pre>
<p style="text-align: justify;">Поскольку работа ранее запущенной нами <em>less</em> ещё не завершена, то файл остаётся для неё открытым и фактически не удалён. Давайте восстановим его.</p>
<p style="text-align: justify;">Для начала необходимо узнать PID процесса, открывшего файл и номер файлового дескриптора. Сделать это можно при помощи программы <em>lsof</em>:</p>
<pre>$ lsof | grep myfile.txt
less      2675      ashep    4r      REG    8,1      37 294478 /home/ashep/myfile.txt (deleted)</pre>
<p style="text-align: justify;">Во втором поле вывода <em>lsof</em> содержится PID&nbsp;&mdash; 2675, а в четвёртом номер дескриптора&nbsp;&mdash; 4. Теперь можно приступать к восстановлению:</p>
<pre>$ cp /proc/2675/fd/4 ~/recovered.txt</pre>
<p style="text-align: justify;">Проверьте, то ли содержимое находится в файле, которое нам нужно:</p>
<pre>$ cat ~/recovered.txt
Очень важные данные</pre>
<p style="text-align: justify;">Как видим, всё прошло успешно и нам удалось восстановить удалённый файл.</p>
<h3>Восстановление удалённых файлов при помощи Scalpel</h3>
<p style="text-align: justify;">После того как процесс, открывший файл, завершится, восстановление файла становится задачей потруднее, поскольку индексный дескриптор освобождается и всякая связь между данными в блоках на диске и файловой системой потеряна. До тех пор, пока данные физически не будут перезаписаны на диске, существует возможность их восстановления при помощи утилиты <em>Scalpel</em>. Этот инструмент последовательно, блока за блоком, обходит содержимое диска и анализирует его содержимое, пытаясь найти признаки существования там файлов. Для поиска <em>Scalpel</em> использует шаблоны из последовательности байт, присущих определённым типам файлов. Например, PNG-файлы содержат в заголовке последовательность байт <em>\x50\x4e\x47</em>.</p>
<p style="text-align: justify;"><em>Scalpel</em> вы найдёте в репозиториях большинства современных дистрибутивов. После установки утилиты первым делом нужно определиться с тем, какие файлы программа будет искать при работе. Определения шаблонов для поиска находятся в файле <em>/etc/scalpel/scalpel.conf</em>. По умолчанию содержимое файла целиком закомментировано и прежде чем начать работу вам необходимо раскомментировать нужные шаблоны и/или добавить свои. Формат описания шаблона довольно прост:</p>
<pre>extension  case_sensitive  size  header  [footer]</pre>
<p style="text-align: justify;">где</p>
<ul>
<li><em>extension</em> определяет расширение файла, которое <em>Scalpel</em> будет дописывать при восстановлении;</li>
<li><em>case_sensitive</em> указывает утилите, имеет ли значение регистр символов в шаблоне поиска;</li>
<li>при помощи size определяется максимальный размер восстанавливаемых файлов;</li>
<li>в <em>header</em> и необязательном <em>footer</em> описываются последовательности заголовка файла и нижней его части соответственно.</li>
</ul>
<p>Например, определение шаблона для JPG-файлов может выглядеть так:</p>
<pre>jpg  y  200000000  \xff\xd8\xff\xe0\x00\x10  \xff\xd9</pre>
<p>После того, как внесёте необходимые изменения в конфигурационный файл Scalpel и подготовите пустую (обязательно!) директорию для сохранения найденных файлов, можно запускать процесс поиска и восстановления:</p>
<pre># scalpel -o ~/recovered /dev/sdb1</pre>
<p>где при помощи опции <em>&#39;-o&#39;</em> определяется путь к каталогу для сохранения найденных файлов. Процесс работы утилиты как правило очень долгий, поскольку она сканирует всё устройство целиком, поэтому воспользуйтесь моментом и сходите прогуляться на улицу, свежий воздух ещё никому не мешал ;)</p>
<p>После того, как <em>Scalpel</em> завершит свою работу, изучите содержимое выходного каталога на предмет наличия в нём нужных вам файлов.</p>
<h3>Заключение</h3>
<p style="text-align: justify;">Мало кто хотел бы попасть в ситуацию, когда важные данные окажутся случайно удалёнными или повреждёнными. И хотя <em>Linux</em> предлагает средства для восстановления утраченных данных, приятного в этом процессе мало. Поэтому будьте всегда предельно внимательны к своим данным и работе с ними. Ну и, конечно же, не забывайте про своевременное <a href="http://www.ashep.org/tag/backup">резервное копирование</a>&nbsp;&mdash; старый и проверенный метод, спасший не одну тысячу нервных клеток от верной гибели.</p>
<p style="text-align: right;">По материалам с <a href="http://www.linux.com/learn/tutorials/397719:repair-a-linux-file-system-and-reclaim-deleted-files">linux.com</a></p>
<hr />
<p style="text-align: justify;">Решились наконец распрощаться со своим старым-добрым-верным мобильным помощником и приобрести ему достойную современную замену? <a href="http://euroteka.com.ua/category/mobile">Интернет-магазин мобильных телефонов</a> Euroteka.Com.Ua рад предложить вам огромнейший ассортимент мобильных телефонов на любой вкус и бюджет, по адекватным ценам с доставкой по Украине.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/proverka-fs-i-vosstanovlenie-udalyonnyx-fajlov-v-linux/' addthis:title='Проверка ФС и восстановление удалённых файлов в Linux' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/proverka-fs-i-vosstanovlenie-udalyonnyx-fajlov-v-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Немного об использовании /proc</title>
		<link>http://www.ashep.org/2011/nemnogo-ob-ispolzovanii-proc/</link>
		<comments>http://www.ashep.org/2011/nemnogo-ob-ispolzovanii-proc/#comments</comments>
		<pubDate>Mon, 09 May 2011 17:08:31 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Система]]></category>
		<category><![CDATA[proc]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2137</guid>
		<description><![CDATA[Файловая система /proc&#160;&#8212; это специальная ФС, присутствующая во многих современных UNIX-системах и содержащая массу полезной информации в текстовом виде, хотя и не всегда понятном рядовым пользователям. Важно помнить, что эта ФС не является физической и файлы, расположенные на ней, не совсем файлы в традиционном понимании. Вернее было бы называть их псевдофайлами, поскольку существуют они только [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/nemnogo-ob-ispolzovanii-proc/' addthis:title='Немного об использовании /proc' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Файловая система <em>/proc</em>&nbsp;&mdash; это специальная ФС, присутствующая во многих современных UNIX-системах и содержащая массу полезной информации в текстовом виде, хотя и не всегда понятном рядовым пользователям. Важно помнить, что эта ФС не является физической и файлы, расположенные на ней, не совсем файлы в традиционном понимании. Вернее было бы называть их <em>псевдофайлами</em>, поскольку существуют они только в оперативной памяти компьютера и не хранятся на диске. В этой статье автор приводит небольшой список наиболее часто используемых пользователями файлов файловой системы  <em>/proc</em> с описанием хранящегося в них содержимого.</p>
<p style="text-align: center;"><img class="size-full wp-image-2148 aligncenter" title="/proc" src="http://www.ashep.org/wp-content/uploads/2011/05/proc.jpg" alt="" width="280" height="126" /></p>
<span id="more-2137"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<h3 style="text-align: justify;">/proc/[pid]</h3>
<p style="text-align: justify;">Внутри каталога <em>/proc</em> вы обнаружите множество каталогов, имена которых состоят из цифр. Имя каждого такого каталога соответствует <em>PID</em> (идентификатору процесса) работающего в системе процесса.</p>
<ul>
<li><em>/proc/[pid]/cmdline</em>. В этом файле хранится командная строка, которой был запущен данный процесс;</li>
<li><em>/proc/[pid]/cwd</em>. Этот файл представляет собой символическую ссылку на текущий рабочий каталог процесса;</li>
<li><em>/proc/[pid]/exe</em> представляет собой символическую ссылку на исполняемый файл, который инициировал запуск процесса;</li>
<li><em>/proc/[pid]/status</em> содержит информацию о состоянии процесса, его имени, родительском процессе, а также различную статистическую информацию, например об используемой памяти.</li>
</ul>
<h3>/proc/cmdline</h3>
<p style="text-align: justify;">В этом файле содержатся все аргументы, переданные ядру в момент старта системы.</p>
<h3>/proc/cpuinfo</h3>
<p style="text-align: justify;">Здесь вы можете получить подробную информацию о процессорах, работающих в вашей системе: производитель, имя, рабочую частоту, поддерживаемые технологии, размер кэша и т. п.</p>
<h3>/proc/filesystems</h3>
<p style="text-align: justify;">Этот файл содержит перечень всех поддерживаемых ядром типов файловых систем. Строки, начинающиеся с <em>&#39;nodev&#39;</em>, указывают на то, что ФС не является &laquo;физической&raquo;. Например, такими системами являются сетевые  файловых системы, вроде NFS, или, например, псевдо-ФС, например <em>/proc</em>.</p>
<h3 style="text-align: justify;">/proc/loadavg</h3>
<p style="text-align: justify;">Хранит информацию о <a href="http://en.wikipedia.org/wiki/Load_%28computing%29">загрузке</a> системы. Первые три поля хранят ту же информацию, которую вы получаете о средней загрузке системы при помощи команды <em>uptime</em>.</p>
<p style="text-align: justify;">Четвёртое поле состоит из двух значений, разделённых слэшем. Первая часть значения поля показывает количество выполняющихся в данный момент процессов/потоков. Это значение не может быть больше количества присутствующих в вашей системе CPU. Вторая часть поля отображает количество процессов присутствующих в системе.</p>
<p style="text-align: justify;">Значение пятого поля содержит ID последнего запущенного в системе процесса. Обратите внимание, что если вы просматриваете содержимое <em>/proc/loadavg</em> при помощи, например, <em>cat</em>, то вы увидите значение PID именно программы <em>cat</em>.</p>
<h3 style="text-align: justify;">/proc/meminfo</h3>
<p style="text-align: justify;">В этом файле хранится информация об использовании памяти системой. Именно отсюда программа <em>free</em> берёт информацию для вывода.</p>
<h3>/proc/net</h3>
<p style="text-align: justify;">В этом каталоге хранится информация, касающаяся работы сетевых устройств и протоколов:</p>
<ul>
<li><em>/proc/net/arp</em> содержит <a href="http://ru.wikipedia.org/wiki/ARP">ARP-таблицу</a>;</li>
<li><em>/proc/net/dev</em> для каждого сетевого интерфейса хранит статистические данные, такие как количество принятых/переданных пакетов, ошибок и т. п.;</li>
<li><em>/proc/net/route</em> содержит таблицу маршрутизации в шестнадцатиричном виде;</li>
<li><em>/proc/net/wireless</em> хранит статистические данные о работе беспроводных интерфейсов.</li>
</ul>
<h3>/proc/swaps</h3>
<p style="text-align: justify;">В этом файле вы найдёте информацию обо всех используемых в системе разделах/файлах подкачки, их приоритетах, объёме и используемом пространстве.</p>
<h3>/proc/sys/kernel/hostname</h3>
<p style="text-align: justify;">Этот файл содержит хостнейм вашей системы. Вы можете изменить его, просто записав в этот файл другое значение при помощи <em>echo</em>.</p>
<h3>/proc/sys/kernel/threads-max</h3>
<p style="text-align: justify;">Из этого файла вы можете узнать, какое максимальное количество процессов к одновременному существованию допускается в вашей системе. Сравните это значение со значением четвёртого поля из файла <em>/proc/loadavg</em>.</p>
<h3>/proc/sys/vm/swappiness</h3>
<p style="text-align: justify;">Как это уже <a href="http://www.ashep.org/2010/o-svoppinge-v-linux/">освещалось</a> в одной из статей, значение в этом файле регулирует поведение системы относительно частоты сброса данных из оперативной памяти в своп. Чем выше это значение&nbsp;&mdash; тем активнее система будет свопиться.</p>
<h3 style="text-align: justify;">/proc/uptime</h3>
<p style="text-align: justify;">Значение из этого файла состоит из двух полей. Значение из первого поля в секундах отражает продолжительность работы системы с момента её запуска, а значение второго&nbsp;&mdash; длительность простоя системы. При помощи, например, следующей команды вы можете узнать в процентном выражении, сколько времени простаивает ваша система:</p>
<pre>$ echo `cut -d ' ' -f 2 /proc/uptime` / `cut -d ' ' -f 1 /proc/uptime` '* 100' | bc -l</pre>
<h3 style="text-align: justify;">/proc/vmstat</h3>
<p style="text-align: justify;">Содержит информацию об использовании виртуальной памяти.</p>
<h3 style="text-align: justify;">/proc/sys/net/ipv4/conf/default/forwarding</h3>
<p>Значением в этом файле включается/отключается форвардинг пакетов между сетевыми интерфейсами. Если вы собираетесь использовать вашу систему в качестве маршрутизатора, то при загрузке компьютера в этот файл должна помещаться единица. В противном случае (что есть по умолчанию) там должен быть ноль.</p>
<p style="text-align: right;">Источник <a href="http://www.petur.eu/blog/?p=320">petur.eu</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/nemnogo-ob-ispolzovanii-proc/' addthis:title='Немного об использовании /proc' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/nemnogo-ob-ispolzovanii-proc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>5 советов для работы с историей в Bash</title>
		<link>http://www.ashep.org/2011/5-sovetov-dlya-raboty-s-istoriej-v-bash/</link>
		<comments>http://www.ashep.org/2011/5-sovetov-dlya-raboty-s-istoriej-v-bash/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 07:53:42 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2043</guid>
		<description><![CDATA[Говорят что те, кто не помнит историю, обречены вновь и вновь повторять одно и то же. А если вы не умеете пользоваться историей в Bash, то вы не сможете использовать мощь вашей системы в полном объёме. Однако, начать никогда не поздно и возможно, прочитав эту заметку, вы откроете для себя несколько полезных и нужных в [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/5-sovetov-dlya-raboty-s-istoriej-v-bash/' addthis:title='5 советов для работы с историей в Bash' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Говорят что те, кто не помнит историю, обречены вновь и вновь повторять одно и то же. А если вы не умеете пользоваться историей в <em>Bash</em>, то вы не сможете использовать мощь вашей системы в полном объёме. Однако, начать никогда не поздно и возможно, прочитав эту заметку, вы откроете для себя несколько полезных и нужных в повседневной работе навыков работы с GNU Bash.</p>
<p style="text-align: center;"><img class="size-full wp-image-2051 aligncenter" title="History" src="http://www.ashep.org/wp-content/uploads/2011/04/history.gif" alt="" width="302" height="317" /></p>
<span id="more-2043"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p style="text-align: justify;">Если вы проводите какое-то количество времени в оболочке, то скорее всего знаете о том, что существует &laquo;история&raquo; команд, которые вы выполняли, аналогично тому, как ваш веб-браузер помнит историю посещённых вами веб-страниц. Хотя, конечно, история команд в оболочках появилась гораздо раньше истории посещённых страниц в браузерах.</p>
<p style="text-align: justify;">Многие пользователи знают о том, что доступ к истории команд можно получить при помощи команды <em>history</em> или же при помощи клавиатурных комбинаций <em>Ctrl+p</em> (предыдущая команда) и <em>Ctrl+n</em> (следующая команда). Это очень полезные и часто используемые приёмы работы с историей, однако при помощи них не задействуете все возможности Bash для работы с историей. Давайте рассмотрим несколько трюков работы с историей Bash, пользуясь командой <em>history</em> или другими способами.</p>
<h3 style="text-align: justify;">Использование номеров</h3>
<p style="text-align: justify;">Если вы дадите команду <em>history</em>, вы получите список последних введённых команд с порядковым номером перед каждой из них. Вы можете повторно запустить любую команду из истории при помощи конструкции</p>
<pre>$ !n</pre>
<p style="text-align: justify;">где <em>n</em>&nbsp;&mdash; номер записи в истории. То есть, например, инструкция</p>
<pre>$ !50</pre>
<p style="text-align: justify;">выполнит пятидесятую команду из истории. Также вы можете использовать конструкцию</p>
<pre style="text-align: justify;">$ !-n</pre>
<p style="text-align: justify;"><em> </em>если вам нужно выполнить <em>n-ю</em> по счёту команду, начиная с конца списка. Например, ваш вывод <em>history</em> выглядит так:</p>
<pre>1  sudo su
2  exit
3  sudo apt-get update</pre>
<p style="text-align: justify;">тогда инструкция</p>
<pre>$ !-3</pre>
<p style="text-align: justify;">запустит команду <em>sudo su</em>.</p>
<h3 style="text-align: justify;">Вызов последней команды</h3>
<p style="text-align: justify;">Как часто вы вводите какую-то команду, а затем видите, что вы, намереваясь предварить её <em>sudo</em>, забыли это сделать? У меня такое происходит постоянно. Можно исправить это, вернувшись к последней команде при помощи клавиши <em>&laquo;стрелка вверх&raquo;</em> или при помощи комбинации <em>Ctrl+p</em>, затем, перейдя в начало строки при помощи клавиши <em>Home</em> или <em>Ctrl+a</em> вписать пропущенное sudo. Есть и более простой способ:</p>
<pre>$ sudo !!</pre>
<p style="text-align: justify;">Это запустит последнюю команду (<em>!!</em>) при помощи <em>sudo</em>. Неплохо?</p>
<p style="text-align: justify;">Вы, вероятно, знаете конструкцию <em>!command</em>, которая запустит последнюю команду из истории, которая начинается с <em>command</em>. Таким образом, если вы недавно запускали очень длинную команду и помните с чего она начиналась, такой способ запуска из истории может вам пригодиться. А знаете ли вы, что Bash  в этом случае ищет не команду, а ищет <em>подстроку</em>? То есть, вам не нужно после восклицательного знака вписывать всю команду целиком, достаточно лишь первых символов. Допустим, вы запускали что-то вроде:</p>
<pre>$ git commit -a -m "Various and sundry notes"</pre>
<p style="text-align: justify;">Многие пользователи введут</p>
<pre>$ !git</pre>
<p style="text-align: justify;">чтобы повторить команду, однако зачатую вполне достаточно выполнить</p>
<pre>$ !g</pre>
<p style="text-align: justify;">конечно же, при условии, что после искомой команды вы больше не выполняли команд, начинающихся с <em>&laquo;g&raquo;</em>.</p>
<p style="text-align: justify;">Если вам вдруг понадобится выполнить поиск не сначала строки, а в любой её части, воспользуйтесь конструкцией <em>&laquo;!?string?&raquo;</em>. Например:</p>
<pre>$ !?commit?</pre>
<h3 style="text-align: justify;">Вызов последнего параметра команды</h3>
<p style="text-align: justify;">Используя комбинацию <em>&laquo;Esc+.&raquo;</em> (<em>Escape</em> с точкой), вы можете вызывать из истории последнее <em>слово</em>, переданное команде в качестве аргумента. Например, вы запускали:</p>
<pre style="text-align: justify;">$ cp filename1 filename2</pre>
<p style="text-align: justify;">Теперь, если вы нажмёте <em>&laquo;Esc+.&raquo;</em>, то вы получите <em>&laquo;filename2&raquo;</em>. Попробуйте самостоятельно поиграть с этой функцией&nbsp;&mdash; очень полезная штука!</p>
<p style="text-align: justify;">А что, если вам нужно не последнее слово, а скажем, второе? Или вообще все? Например, у вас в истории есть команда:</p>
<pre>$ ls file1.txt file2.txt file3.txt file4.txt</pre>
<p style="text-align: justify;">и вам понадобилось вытащить два слова из середины? Легко!</p>
<pre style="text-align: justify;">$ ls !:2-3</pre>
<p style="text-align: justify;">Если же вам вдруг понадобились вообще все аргументы, переданные команде, вы можете воспользоваться такой конструкцией:</p>
<pre>$ ls !:*</pre>
<h3 style="text-align: justify;">Поиск</h3>
<p style="text-align: justify;">Ещё одна полезная функция&nbsp;&mdash; это поиск при помощи <em>&laquo;Ctrl+r&raquo;</em>. Нажмите <em>&laquo;Ctrl+r&raquo;</em> и в появившемся приглашении начните вводить часть какой-нибудь ранее ведённой команды. По мере ввода символов Bash будет пытаться найти в истории последнюю команду, содержащую указанные вами символы. После того, как найдёте, можете начать <em>&laquo;Ctrl+r&raquo;</em> ещё раз и Bash выведет более раннюю команду, если таковая имеется. После того, как вы отыщете нужную команду, просто нажмите <em>&laquo;Enter&raquo;</em> и она появится в вашей командной строке.</p>
<p style="text-align: justify;">Если вам необходимо отредактировать команду, прежде чем запускать, воспользуйтесь традиционными &laquo;стрелкой влево&raquo; и &laquo;стрелкой вправо&raquo;, чтобы переместить курсор в нужное место команды для исправления.</p>
<h3 style="text-align: justify;">Безопасность</h3>
<p style="text-align: justify;">История команд очень полезная штука, однако иногда бывают ситуации, когда нежелательно, чтобы она сохранялась. Например, вы используете для работы разделяемую между многими пользователями систему и не хотите, чтобы системные администраторы системы выдели какие команды вы вводили. Даже если вы пользуетесь личным компьютером, всегда есть шанс, что он будет взломан и вам хотелось бы не хранить в истории действительно важные данные. В конце-концов вы можете захотеть не захламлять историю какими-то командами, поскольку в их хранении просто нет смысла. Например, вы можете часто пользоваться <em>ls</em>, однако зачем хранить её в истории, вместо того, чтобы хранить в ней только длинные и действительно полезные с точки зрения хранения команды?</p>
<p style="text-align: justify;">Давайте посмотрим, каким способом можно управлять хранением команд в истории.</p>
<p style="text-align: justify;">Первый способ&nbsp;&mdash; это определить в <em>.bashrc</em> переменную окружения со следующим значением:</p>
<pre>HISTCONTROL=ignorespace:ignoredups</pre>
<p style="text-align: justify;">Опция <em>ignorespace</em> заставляет Bash игнорировать команды, начинающиеся с пробела. Если вам нужно, чтобы Bash не сохранил в истории команду, содержащую секретную информацию&nbsp;&mdash; просто предварите её пробелом.</p>
<p style="text-align: justify;">Опция <em>ingoredups</em> исключает хранение в истории дубликатов команд, что часто помогает значительно разгрузить историю команд.</p>
<p style="text-align: justify;">Вообще, некоторые дистрибутивы &laquo;из коробки&raquo; имеют эти опции установленными. Если это не ваш случай&nbsp;&mdash; просто добавьте строку в ваш <em>~/.bashrc</em>.</p>
<p style="text-align: justify;">Вы также можете заставить Bash игнорировать некоторые команды. Допустим, вы не хотите хранить в истории команды, содержащие имя какого-нибудь сервера. Просто определите значение переменной окружения HISTIGNORE и можете чувствовать себя спокойно:</p>
<pre>HISTIGNORE="*myserver*"</pre>
<p style="text-align: justify;">Да, по поводу &laquo;спокойствия&raquo;. На разделяемых системах некоторые пользователи могут видеть команды, запущенные вами при помощи утилит <em>top</em> и <em>ps</em>. Поэтому, если вы не уверены на 100% в надёжности системы, с которой работаете&nbsp;&mdash; не стоит запускать там какие бы то ни было команды, содержащие секретные данные.</p>
<h3 style="text-align: justify;">Заключение</h3>
<p style="text-align: justify;">Очень надеюсь, что рассмотренные здесь приёмы пригодятся вам в повседневной работе и сделают её выполнение чуточку приятнее. Однако, это далеко не всё. Обязательно посмотрите man-страницу по history в вашей системе. Уверен, вы сможете найти для себя ещё массу полезного!</p>
<p style="text-align: right;">Источник <a href="http://www.linux.com/learn/tutorials/433684-five-tips-for-working-with-gnu-bash-history-on-linux">linux.com</a></p>
<hr />
<p>Сегодня, чтобы создать успешный бизнес, необходимо обеспечить надёжную информационную поддержку. <a href="http://itsspb.ru/">Обслуживание компьютеров юр. лиц</a> на абонентской основе — лучшее решение для тех, кому не требуется постоянный ИТ-специалист в штате. Быстро, надёжно, удобно.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/5-sovetov-dlya-raboty-s-istoriej-v-bash/' addthis:title='5 советов для работы с историей в Bash' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/5-sovetov-dlya-raboty-s-istoriej-v-bash/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Использование Git для управления конфигурационными файлами</title>
		<link>http://www.ashep.org/2011/ispolzovanie-git-dlya-upravleniya-konfiguracionnymi-fajlami/</link>
		<comments>http://www.ashep.org/2011/ispolzovanie-git-dlya-upravleniya-konfiguracionnymi-fajlami/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 00:41:24 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=2025</guid>
		<description><![CDATA[Если вы достаточно длительное время используете UNIX/Linux, то у вас уже вероятно имеются хорошо &#171;заточенные&#187; файлы конфигурации Bash, Vim, Emacs и других приложений. Копирование вручную этих файлов между всеми системами, с которыми вы работаете, может быть весьма утомительным процессом. Git может существенно облегчить ваши мучения из-за копирования ваших конфигурационных файлов на новые компьютеры. Обычно в [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/ispolzovanie-git-dlya-upravleniya-konfiguracionnymi-fajlami/' addthis:title='Использование Git для управления конфигурационными файлами' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Если вы достаточно длительное время используете <em>UNIX</em>/<em>Linux</em>, то у вас уже вероятно имеются хорошо &laquo;заточенные&raquo; файлы конфигурации <em>Bash</em>, <em>Vim</em>, <em>Emacs</em> и других приложений. Копирование вручную этих файлов между всеми системами, с которыми вы работаете, может быть весьма утомительным процессом. <strong>Git </strong>может существенно облегчить ваши мучения из-за копирования ваших конфигурационных файлов на новые компьютеры.</p>
<p style="text-align: center;"><img class="size-full wp-image-2033 aligncenter" title="Git" src="http://www.ashep.org/wp-content/uploads/2011/04/git-logo.png" alt="" width="136" height="160" /></p>
<span id="more-2025"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p style="text-align: justify;">Обычно в своей работе я пользуюсь <a href="http://www.ashep.org/tag/dropbox">Dropbox</a>, однако как быть с конфиг-файлами, хранящимися в <em>/etc</em> и в домашнем каталоге? Можно, конечно, придумать какое-нибудь извращение и приспособить Dropbox для хранения этих файлов, однако здесь возникает ещё одна проблема: как заставить Dropbox закачивать на новую систему только определённые файлы, а не все сразу?</p>
<p style="text-align: justify;">Ещё одним решением может быть использование <a href="http://www.ashep.org/tag/rsync">rsync</a>, <a href="http://duplicity.nongnu.org/">Duplicity</a> или <a href="http://www.cis.upenn.edu/~bcpierce/unison/">Unison</a>, однако они не позволяют сохранять версионность файлов, и хранят лишь одну-единственную копию файла с самыми последними изменениями. Короче, Git (или другая система контроля версий) в моём случае подходит лучше всего, а может быть отлично сгодится и для вас.</p>
<p style="text-align: justify;">Другой причиной, по которой мой выбор пал на Git, стало то, что я уже имею некоторый положительный опыт работы с ним и мне хотелось бы ещё попрактиковаться, используя Git в своей повседневной жизни. Конечно, опытные пользователи Git располагают гораздо большим набором знаний и вероятно могут гораздо эффективнее меня решить поставленные задачи. Я же попытался изучив лишь основные моменты работы с Git, создать инструкцию, которой бы могли свободно воспользоваться люди, не знакомые с ним вообще. Если у вас есть идеи, как лучше организовать процесс работы с файлами&nbsp;&mdash; пишите в комментариях, я всегда рад новым идеям.</p>
<p style="text-align: justify;">Вкратце опишем перечень шагов, которые нам предстоит сделать в процессе изучения данного материала:</p>
<ul>
<li>создать ключи SSH, чтобы не приходилось авторизоваться паролем;</li>
<li>установить Git на всех системах где будем его использовать;</li>
<li>создать &laquo;голый&raquo; (<em>bare</em>) репозиторий на удалённой системе;</li>
<li>создать репозиторий в локальной системе, файлы с которой будем синхронизировать;</li>
<li>добавить файлы в локальный репозиторий;</li>
<li>сделать слепок (<em>commit</em>) добавленных файлов;</li>
<li>отправить (push) изменения в удалённый репозиторий;</li>
<li>сделать изменения в локальных файлах и сделать слепок изменений;</li>
<li>клонировать репозиторий на другую систему.</li>
</ul>
<h3>Начнём</h3>
<p style="text-align: justify;">Первое, что нам понадобится&nbsp;&mdash; это система, которая будет хранить наш Git-репозиторий. У вас должна быть возможность подключаться к ней по SSH. Это может быть как компьютер в вашей локальной сети, так и система, расположенная в Интернет. Вы даже можете использовать онлайн-сервис <a href="https://github.com/">GitHub</a>, если у вас нет подходящего компьютера.</p>
<p style="text-align: justify;">Первым делом вам необходимо создать пару SSH-ключей и настроить аутентификацию на удалённой системе. Чтобы каждый раз не вводить пароль, вы можете сгенерировать закрытый ключ без пароля, однако не забывайте о том, что если кто-то сможет заполучить ваш закрытый ключ, то он сможет авторизоваться по SSH на удалённой системе. Процесс генерации ключей на моей системе выглядел так:</p>
<pre style="text-align: justify;">$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/ashep/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ashep/.ssh/id_dsa.
Your public key has been saved in /home/ashep/.ssh/id_dsa.pub.
The key fingerprint is:
f0:59:19:5d:69:c7:4c:62:d0:c1:38:fe:f1:2b:2d:2c ashep@adesktop
The key's randomart image is:
+--[ DSA 1024]----+
|          ...*=*.|
|           o+.=.+|
|      .   o. o . |
|       o o  . .  |
|        S    . o |
|              . .|
|            . . .|
|           E + o |
|            . o  |
+-----------------+</pre>
<p style="text-align: justify;">После того, как пара ключей  создана, закрытый ключ будет размещён в в <em>~/.ssh/id_dsa</em>, а открытый&nbsp;&mdash; в <em>~/.ssh/id_dsa.pub</em>. Теперь, чтобы удалённая система аутентифицировала  вас на основе ключа, а не пароля, необходимо скопировать содержимое локального файла <em>~/.ssh/id_dsa.pub</em> в файл <em>~/.ssh/authorized_keys</em> на удалённой системе. В <em>Debian</em>/<em>Ubuntu</em> для этих целей есть специальный shell-скрипт <em>ssh-copy-id</em>, им и воспользуемся:</p>
<pre style="text-align: justify;">$ ssh-copy-id ashep@aserver
ashep@aserver's password:
Now try logging into the machine, with "ssh 'ashep@aserver'", and check in:

  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.</pre>
<p style="text-align: justify;">Пользователи же других систем, в которых <em>ssh-copy-id</em> отсутствует, могут воспользоваться старой-доброй <em>scp</em>:</p>
<pre>$ scp /home/ashep/.ssh/id_dsa.pub ashep@aserver:/home/ashep/.ssh/authorized_keys</pre>
<p style="text-align: justify;">Будьте внимательны и если в <em>~/.ssh/authorized_keys</em> на удалённой системе у вас уже имеются какие-то ключи, то добавьте вручную открытый ключ к существующим, поскольку приведённая выше команда затрёт существующий файл.</p>
<p style="text-align: justify;">Ну и, само-собой разумеется, в ваших системах, которые будут участвовать в работе, должен быть установлен Git. На сегодняшний день Git присутствует в репозиториях всех современных дистрибутивов, а также в коллекции портов <em>FreeBSD</em>, так что у вас не должно возникнуть сложностей с его установкой. Я использую <em>Ubuntu </em>и в ней Git установился &laquo;лёгким движением руки&raquo;:</p>
<pre style="text-align: justify;">$ sudo apt-get install git-core</pre>
<h3 style="text-align: justify;">Создание репозиториев</h3>
<p style="text-align: justify;">Пришло время создавать репозитории. Начнём с создания репозитория на удалённой системе, затем создадим локальный, в который и добавим файлы. Подключитесь к удалённой системе по SSH:</p>
<pre style="text-align: justify;">$ ssh ashep@aserver</pre>
<p style="text-align: justify;">создайте каталог для хранения репозитория:</p>
<pre style="text-align: justify;">$ mkdir project</pre>
<p style="text-align: justify;">и создайте в это каталоге &laquo;голый&raquo; Git-репозиторий:</p>
<pre style="text-align: justify;">$ cd project &amp;&amp; git init --bare
Initialized empty Git repository in /home/ashep/project/</pre>
<p style="text-align: justify;">Просто, не так ли? Теперь в вашей локальной системе необходимо создать репозиторий для хранения отслеживаемых файлов. Обычно, если вы работаете над каким-то проектом, каталог репозитория <em>.git</em> хранится в каталоге проекта. В нашем же случае необходимо будет хранить файлы из разных мест, поэтому лучшим вариантом будет создать репозиторий в корне домашнего каталога:</p>
<pre>$ cd ~/ &amp;&amp; git init
Initialized empty Git repository in /home/ashep/.git/</pre>
<p style="text-align: justify;">Репозиторий успешно создан и прежде, чем мы продолжим работу, давайте минимально настроим Git, а точнее определим имя и email, которые будут упоминаться к истории коммитов (слепков):</p>
<pre style="text-align: justify;">$ git config --global user.name "Alexander Shepetko"
$ git config --global user.email "ashep@ashep.org"</pre>
<p style="text-align: justify;">Теперь добавим что-нибудь в репозиторий, указывая Git отслеживать изменения:</p>
<pre>$ git add .vim
$ git add .vimrc</pre>
<p style="text-align: justify;">И сделаем слепок состояния добавленных файлов, указав при помощи опции <em>-m</em> комментарии к слепку:</p>
<pre>$ git commit -m 'Первый слепок'
[master (root-commit) f4c5dcf] Первый слепок
 4 files changed, 90 insertions(+), 0 deletions(-)
 create mode 100644 .vim/.netrwhist
 create mode 100644 .vim/spell/ru.utf-8.spl
 create mode 100644 .vim/spell/ru.utf-8.sug
 create mode 100644 .vimrc</pre>
<p style="text-align: justify;">Отлично, файлы и каталог успешно добавлены, теперь можно &laquo;слить&raquo; локальный репозиторий в удалённый. Для начала необходимо в локальном репозитории определить один или несколько  удалённых, с которыми Git сможет производить синхронизацию. Добавим ранее созданный удалённый репозиторий <em>project</em> на удалённой системе <em>aserver</em>, доступ к которой у нас настроен от имени пользователя <em>ashep</em>:</p>
<pre>$ git remote add origin ashep@aserver:project</pre>
<p style="text-align: justify;">И отправим изменения из локального репозитория:</p>
<pre>$ git push origin master
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 2.37 MiB | 462 KiB/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To ashep@aserver:project
 * [new branch]      master -&gt; master</pre>
<h3 style="text-align: justify;">Отслеживание изменений</h3>
<p style="text-align: justify;">После того, как вы сделали свой  первый слепок и отправили изменения в удалённый репозиторий, самое время разобраться с тем, как отслеживать изменения в файлах. Сделайте какое-нибудь незначительное изменение, например, в файле <em>.vimrc</em><strong> </strong>и сделайте после этого слепок состояния всех отслеживаемых файлов:</p>
<pre>$ git commit -a -m 'Изменён .vimrc'
[master 0d6096f] Изменён .vimrc
 1 files changed, 0 insertions(+), 1 deletions(-)</pre>
<p style="text-align: justify;">Теперь вы можете отправить изменения в удалённый репозиторий:</p>
<pre style="text-align: justify;">$ git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 317 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To ashep@aserver:project
   f4c5dcf..0d6096f  master -&gt; master</pre>
<h3 style="text-align: justify;">Копирование файлов на другие системы</h3>
<p style="text-align: justify;">Пришло время &laquo;размножить&raquo; наши конфигурационные файлы на тех системах, где это нам нужно. Авторизуйтесь в нужной системе и создайте в своём домашнем каталоге новый  Git-репозиторий, как это мы делали ранее:</p>
<pre>$ cd ~/ &amp;&amp; git init
Initialized empty Git repository in /home/ashep/.git/</pre>
<p style="text-align: justify;">И теперь скопируйте файлы удалённого репозитория на диск:</p>
<pre style="text-align: justify;">$ git pull ashep@aserver:project
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 11 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (11/11), done.
From aserver:project
 * branch            HEAD       -&gt; FETCH_HEAD</pre>
<p style="text-align: justify;">На это всё! Если вы сделаете изменения в каком-то из отслеживаемых файлов на любой системе, просто воспользуйтесь командами <em>git commit</em> и <em>git push</em>, как это было показано выше и изменения будут доставлены в удалённый репозиторий, после чего вы сможете из загрузить во все локальные репозитории систем, в которых эти версии файлов вам необходимы, при помощи команды <em>git pull</em>.</p>
<p style="text-align: justify;">Обратите внимание на то, что мы используем <em>git pull</em>, а не <em>git clone</em>, поскольку нам нужно получать именно изменения в файлах, а не весь репозиторий целиком.</p>
<h3 style="text-align: justify;">Управление версиями</h3>
<p style="text-align: justify;">По ходу работы вы можете добавлять в репозиторий новые файлы для отслеживания при помощи команд <em>git add</em> и удалять ненужные при помощи <em>git rm</em>. Если вам необходмо узнать, какие файлы находятся в состоянии &laquo;отслеживаемых&raquo;, воспользуйтесь командой <em>git ls-files</em>:</p>
<pre>$ git ls-files
.vim/.netrwhist
.vim/spell/ru.utf-8.spl
.vim/spell/ru.utf-8.sug
.vimrc</pre>
<p style="text-align: justify;">Что делать, если вы сделали ненужные изменения в локальном файле и хотите восстановить версию, находящуюся в последнем слепке? Для этого существует команда <em>git checkout</em>. Например, следующая команда восстановит последнюю версию файла .vimrc:</p>
<pre>$ git checkout .vimrc</pre>
<p style="text-align: justify;">Просмотреть историю слепков можно при помощи команды <em>git log</em>:</p>
<pre>$ git log
commit 0d6096f96c647e8b1bdfb6a217cbae967b16a5cd
Author: Alexander Shepetko
Date:   Fri Apr 22 02:46:15 2011 +0300

    Изменён .vimrc

commit f4c5dcf1f5c55ab8b495c6e16afb1eee73b8380a
Author: Alexander Shepetko
Date:   Fri Apr 22 01:54:14 2011 +0300
    Первый слепок</pre>
<p style="text-align: justify;">Обратите внимание на 40-битное значение хэша слепка. Оно уникально идентифицирует каждый коммит, так что вы можете обращаться к нему. В частности иногда бывает полезно восстановить не отдельный файл а весь слепок целиком. Для этого достаточно команде git revert передать хэш-значение нужного слепка:</p>
<pre>$ git revert 0d6096f96c647e8b1bdfb6a217cbae967b16a5cd
Finished one revert.
[master 933c16f] Revert "Изменён .vimrc"
 1 files changed, 1 insertions(+), 0 deletions(-)</pre>
<h3 style="text-align: justify;">Резюме</h3>
<p style="text-align: justify;">Хотя Git далёк от определения дружественной пользователям утилиты, разобраться с основами его использования не так уж и сложно. Данная заметка никоим образом не претендует на описание принципов работы Git, а лишь рассказывает об идее применения этой очень мощной утилиты для нужд рядовых пользователей и системных администраторов. Git обладает огромными возможностями и если вам это интересно, и вам хотелось бы подробней узнать о них, советую вам начать с замечательной книги <a href="http://progit.org/book/ru/">Pro Git</a>, в большей части уже доступной на русском языке.</p>
<p style="text-align: right;">По мотивам <a href="http://www.linux.com/learn/tutorials/431119:weekend-project-using-git-to-manage-config-files">linux.com</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/ispolzovanie-git-dlya-upravleniya-konfiguracionnymi-fajlami/' addthis:title='Использование Git для управления конфигурационными файлами' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/ispolzovanie-git-dlya-upravleniya-konfiguracionnymi-fajlami/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Управление серверами при помощи ClusterSSH</title>
		<link>http://www.ashep.org/2011/upravlenie-serverami-pri-pomoshhi-clusterssh/</link>
		<comments>http://www.ashep.org/2011/upravlenie-serverami-pri-pomoshhi-clusterssh/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 12:17:39 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[ClusterSSH]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=1871</guid>
		<description><![CDATA[Если вы являетесь UNIX-администратором, вероятней всего каждый день вам приходится обслуживать не один сервер, и не один хост. Возможно даже, что количество управляемых вами систем довольно огромно, например, если вы являетесь администратором фермы веб-серверов. Если вам понадобится выполнить одну и ту же команду сразу на нескольких серверах, вы можете последовательно подключиться к каждому по SSH [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/upravlenie-serverami-pri-pomoshhi-clusterssh/' addthis:title='Управление серверами при помощи ClusterSSH' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Если вы являетесь UNIX-администратором, вероятней всего каждый день вам приходится обслуживать не один сервер, и не один хост. Возможно даже, что количество управляемых вами систем довольно огромно, например, если вы являетесь администратором фермы веб-серверов. Если вам понадобится выполнить одну и ту же команду сразу на нескольких серверах, вы можете последовательно подключиться к каждому по SSH и ввести эту команду. Или же вы можете сохранить кучу своего драгоценного времени, воспользовавшись утилитой вроде <strong>ClusterSSH</strong>.</p>
<p style="text-align: center;"><a href="http://www.ashep.org/wp-content/uploads/2011/03/cssh-01.png"><img class="size-thumbnail wp-image-1876 aligncenter" title="ClusterSSH" src="http://www.ashep.org/wp-content/uploads/2011/03/cssh-01-600x450.png" alt="" width="600" height="450" /></a></p>
<span id="more-1871"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p style="text-align: justify;"><strong>ClusterSSH</strong>&nbsp;&mdash; это обёртка к XTerm и клиенту SSH, написанная на Perl/Tk. Таким образом, ClusterSSH может работать в любой POSIX-совместимой ОС, где есть необходимые программные компоненты&nbsp;&mdash; <strong>Perl</strong> с модулями <strong>Tk</strong> и <strong>X11::Protocol</strong>, <strong>XTerm</strong> и <strong>OpenSSH</strong> Автор успешно запускал утилиту в системах под управлением <strong>Linux</strong>, <strong>Solaris</strong> и <strong>Mac OS X</strong>.</p>
<h2 style="text-align: justify;">Установка</h2>
<p style="text-align: justify;">Установка ClusterSSH в <strong>Debian</strong> и <strong>Ubuntu </strong>не представляет какой-либо сложности и заключается в выполнении команды:</p>
<pre style="text-align: justify;">$ sudo apt-get install clusterssh</pre>
<p style="text-align: justify;">Также существуют готовые пакеты для <strong>Fedora</strong> и порты в <strong>FreeBSD</strong>. Пользователи систем <strong>Apple</strong> могут установить ClusterSSH из <strong>MacPorts</strong>. Ну и, конечно же, вы можете собрать утилиту из исходников.</p>
<h2 style="text-align: justify;">Настройка</h2>
<p style="text-align: justify;">ClusterSSH может настраиваться как из глобального файла конфигурации расположенного в <strong>/etc/clusters</strong>, так и из локального для каждого пользователя файла <strong>~/.csshrc</strong>. Автор предпочитает хранить настройки в локальном файле конфигурации. Формат файла конфигурации ClusterSSH очень прост. В документации ClusterSSH используется термин &laquo;кластер&raquo;. Кластер&nbsp;&mdash; это группа систем, которые вам необходимо администрировать, используя один интерфейс. В файле конфигурации вы можете сперва объявить несколько кластеров, а после определить набор систем, входящих в кластер.</p>
<p style="text-align: justify;">Например, давайте представим, что нам нужно настроить два кластера, содержащие по два хоста каждый. &laquo;cluster1&raquo; будет содержать системы &laquo;test1&raquo; и &laquo;test2&raquo;, а &laquo;cluster2&raquo;&nbsp;&mdash; системы &laquo;test3&raquo; и &laquo;test4&raquo;. Описать это в файле конфигурации, как уже говорилось, очень просто:</p>
<pre>clusters = cluster1 cluster2
cluster1 = test1 test2
cluster2 = test3 test4</pre>
<p style="text-align: justify;">Также вы можете создавать метакластеры, т. е. кластеры, которые включают в себя другие кластеры. Например, если вам нужен кластер, содержащий все машины (назовём его &laquo;all&raquo;), вы можете создать его таким образом:</p>
<pre>clusters = cluster1 cluster2 all
cluster1 = test1 test2
cluster2 = test3 test4
all = test1 test2 test3 test4</pre>
<p style="text-align: justify;">или же использовать метакластер:</p>
<pre>clusters = cluster1 cluster2 all
cluster1 = test1 test2
cluster2 = test3 test4
all = cluster1 cluster2</pre>
<p style="text-align: justify;">Такой способ объединения систем более удобен, поскольку в случае изменений в одном из кластеров &laquo;cluster1&raquo; или &laquo;cluster2&raquo; изменения автоматически коснуться и метакластера &laquo;all&raquo;, и вам не придётся изменять содержимое последнего вручную. Это может сэкономить вам массу времени, особенно в случаях, когда ваш <strong>.csshrc</strong> станет заметно больше в размерах.</p>
<h2 style="text-align: justify;">Использование</h2>
<p style="text-align: justify;">Запуск ClusterSSH подобен запуску клиента SSH. Например, чтобы подключиться ко всем системам кластера &laquo;cluster1&raquo; от имени пользователя &laquo;vasya&raquo; выполните следующую команду:</p>
<pre style="text-align: justify;">$ cssh -l vasya cluster1</pre>
<p style="text-align: justify;">Как и в случае с использованием клиента OpenSSH, параметр <strong>-l</strong> вместе с его значением можно опустить, тогда будет использоваться имя пользователя, из-под учётной записи которого вы запустили ClusterSSH.</p>
<p style="text-align: justify;">На скриншоте в начале статьи запечатлено подключение к двум системам. Маленькое окошко с заголовком "CSSH [2]"&nbsp;&mdash; это консоль ClusterSSH. Всё, что вы будете вводить в текстовом поле этого окошка. будет отправлено в открытые сессии, в данном случае&nbsp;&mdash; системам &laquo;test1&raquo; и &laquo;test2&raquo;.</p>
<p style="text-align: justify;">Вы также можете подключаться к системам, которых нет в конфигурации кластеров. Для этого просто перечислите их имена вместо указания имени кластера:</p>
<pre style="text-align: justify;">$ cssh -l vasya machine1 machine2 machine3</pre>
<p style="text-align: justify;">Если вам необходимо отправить команду какому-то определённому хосту, а не всем сразу, тогда просто сделайте активным окно XTerm с нужной SSH-сессией и отправьте необходимую команду.</p>
<p style="text-align: justify;">ClusterSSH предлагает ещё несколько удобных функций для работы с набором подключений. Как показано на скриншоте ниже, для доступа к этим функциям используется меню &laquo;Hosts&raquo;.</p>
<p style="text-align: center;"><a href="http://www.ashep.org/wp-content/uploads/2011/03/cssh-02.png"><img class="size-thumbnail wp-image-1878 aligncenter" title="ClusterSSH" src="http://www.ashep.org/wp-content/uploads/2011/03/cssh-02-600x450.png" alt="" width="600" height="450" /></a></p>
<p style="text-align: justify;">Крайне полезна бывает функция &laquo;Retile Windows&raquo;, которая выполняет автоматическое размещение окон с учётом свободного пространства экрана. &laquo;Add host (s) or Cluster (s)&raquo; позволяет пользователю добавлять новые хосты и/или кластеры не покидая текущей сессии работы с ClusterSSH. Также обратите внимание на имена хостов, перечисленные в нижней части меню и на чекбоксы слева от них. Включая и отключая чекбоксы вы можете выбирать хосты, которые будут получать команды, вводимые в консоли ClusterSSH. Очень удобная возможность, если вам необходимо отправить команду всех хостам, исключив пару-тройку ненужных.</p>
<p style="text-align: justify;">Ещё одна интересная возможность спрятана в элементе меню &laquo;Send&nbsp;&mdash; Hostname&raquo;. Выбрав это меню, ClusterSSH отправит во все активные сессии имя хоста, к которому каждая сессия подключена. Довольно полезная штука, когда вы сочиняете командную строку, в которой используются имена хостов и, естественно, являются разными для каждой сессии.</p>
<h2 style="text-align: justify;">Предостережение</h2>
<p style="text-align: justify;">Как и множество UNIX-утилит, ClusterSSH может принести больше вреда, чем пользы, в случае неправильного или необдуманного применения. Будьте очень осторожны при работе с этой утилитой. Подумайте над тем, чего вам может стоить критическая ошибка допущенная сразу на нескольких десятках/сотнях серверов. Трижды проверяйте всё, что вводите в консоли, прежде, чем давить на &laquo;Enter&raquo;.</p>
<h2 style="text-align: justify;">Заключение</h2>
<p style="text-align: justify;">ClusterSSH никоим образом не заменяет собой специализированные системы для управления и конфигурирования UNIX-систем, однако она может оказаться очень полезной в случаях, когда у вас существует отлаженный однотипный для нескольких управляемых систем процесс администрирования. Использование ClusterSSH может сэкономить массу времени при грамотном и осторожном применении, и ровно настолько же может быть опасна в руках неосторожного или неопытного администратора.</p>
<p style="text-align: right;">Оригинал статьи на <a href="http://www.linux.com/news/featured-blogs/193:original-linux-tutorials/413853:managing-multiple-linux-servers-with-clusterssh">Linux.Com</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/upravlenie-serverami-pri-pomoshhi-clusterssh/' addthis:title='Управление серверами при помощи ClusterSSH' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/upravlenie-serverami-pri-pomoshhi-clusterssh/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Пять трюков с SSH</title>
		<link>http://www.ashep.org/2011/pyat-tryukov-s-ssh/</link>
		<comments>http://www.ashep.org/2011/pyat-tryukov-s-ssh/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 00:15:58 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Сеть]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=1801</guid>
		<description><![CDATA[При работе с удалёнными системами одной, пожалуй, из самых часто-используемых утилит системными администраторами и многими пользователями является ssh. Простая, надёжная, проверенная. Однако не каждый знает, что варианты использования secure shell более разнообразны, чем простое подключение к удалённой оболочке. Сегодня мы рассмотрим пять интересных трюков с ssh и с scp, которые многим могут пригодиться в работе [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/pyat-tryukov-s-ssh/' addthis:title='Пять трюков с SSH' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">При работе с удалёнными системами одной, пожалуй, из самых часто-используемых утилит системными администраторами и многими пользователями является <strong>ssh</strong>. Простая, надёжная, проверенная. Однако не каждый знает, что варианты использования secure shell более разнообразны, чем простое подключение к удалённой оболочке. Сегодня мы рассмотрим пять интересных трюков с <strong>ssh</strong> и с <strong>scp</strong>, которые многим могут пригодиться в работе и скрасить трудовые будни администраторов, разработчиков и простых пользователей.</p>
<p style="text-align: center;"><img class="size-full wp-image-1802 aligncenter" title="Пять трюков с SSH" src="http://www.ashep.org/wp-content/uploads/2011/03/magic-tricks.gif" alt="" width="200" height="200" /></p>
<span id="more-1801"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<h2>X-сессия через SSH-туннель</h2>
<p style="text-align: justify;">Иногда бывает необходимо запустить X-приложение на удалённом хосте, при этом графический ввод-вывод перенаправить на локальный. Кроме традиционных вариантов с использованием <a href="http://www.ashep.org/tag/xdmcp/">XDMCP</a> существует многим известный способ перенаправить ввод-вывод X-сессии в SSH-туннель.</p>
<p style="text-align: justify;">Первым делом убедитесь, что в конфигурации вашего демона SSH включена опция  <strong>X11Forwarding</strong>, разрешающая перенаправление X-сессии. В файле, расположенном обычно в <strong>/etc/ssh/sshd_config</strong>, раскомментируйте или добавьте строку:</p>
<pre>X11Forwarding yes</pre>
<p style="text-align: justify;">Имейте ввиду, что включение этой опции снизит потенциальный уровень защищённости вашего сервера, так что не стоит включать её без необходимости.</p>
<p style="text-align: justify;">После того, как будет изменено содержимое конфигурационного файла SSH-сервера, его необходимо перезапустить:</p>
<pre style="text-align: justify;">$ sudo service ssh restart</pre>
<p style="text-align: justify;">Теперь со стороны клиента можно инициировать SSH-подключение с перенаправлением X-сессии:</p>
<pre style="text-align: justify;">$ ssh -X user@host</pre>
<p style="text-align: justify;">И после того, как авторизуетесь, можно запускать любые X-приложения, например:</p>
<pre style="text-align: justify;">$ gnome-terminal</pre>
<p style="text-align: justify;">Или, как вариант, можно запустить приложение в &laquo;фоновом режиме&raquo;, т. е. не оставаясь подключённым к удалённой оболочке:</p>
<pre style="text-align: justify;">$ ssh -Xf user@host gnome-terminal</pre>
<h2 style="text-align: justify;">Поиск фалов на удалённом компьютере</h2>
<p style="text-align: justify;">Очень полезно бывает иногда найти файлы на удалённом компьютере, получив результаты поиска в локальном терминале. Сделать это очень просто. Например:</p>
<pre style="text-align: justify;">$ ssh user@host "find /home/user -iname '*.mp3'"</pre>
<p style="text-align: justify;">Само-собой, подобным образом вы можете выводить локально результаты работы любой удалённой команды.</p>
<h2 style="text-align: justify;">Редактирование удалённых файлов в Vim</h2>
<p style="text-align: justify;">Вовсе необязательно подключаться к удалённой оболочке и редактировать файл непосредственно на сервере. Некоторым нравится делать это локально. Следующая команда запустить Vim, безопасно скопирует удалённый файл при помощи <strong>scp</strong> и после выхода из редактора обновит изменения на сервере, если таковые будут:</p>
<pre style="text-align: justify;">$ vim scp://user@host//etc/samba/smb.conf</pre>
<p style="text-align: justify;">Кстати, помимо всего прочего, если соединение с сервером вдруг оборвётся, вас это не будет никоим образом волновать. Всё происходит локально, так что обрыв соединения с удалённым сервером не грозит вам потерять результаты работы.</p>
<h2 style="text-align: justify;">Воспроизведение музыки с удалённого сервера</h2>
<p style="text-align: justify;">Этот трюк, может быть, многим и не будет столь полезен, однако он прост, интересен и о нём просто нельзя не упомянуть. Данным способом можно прослушивать ваши звуковые файлы, расположенные на удалённом хосте, не копируя их в локальную систему:</p>
<pre>$ ssh user@host "cat /home/user/music/artist/*.mp3" | mpg123 -</pre>
<h2>Воспроизведение видео с удалённого сервера</h2>
<p style="text-align: justify;">Смысл тот же, что и в случае с воспроизведением звука, только здесь речь идёт о видеофайлах и вместо mpg123 используется всем известный vlc, умеющий воспроизводить видеопоток в том числе и из стандартного ввода:</p>
<pre>$ ssh user@host "cat /home/user/video/movie.mp4" | vlc -</pre>
<p style="text-align: right;">По материалам <a href="http://www.go2linux.org/linux/2011/02/my-top-five-ssh-tips-and-tricks-small-cheatsheet-914">go2linux.org</a></p>
<hr />
<p style="text-align: justify;">Сегодня уже ни для кого не секрет, что своевременная и грамотная поисковая <a href="http://www.seo-dream.ru/seo/">оптимизация сайта</a>&nbsp;&mdash; залог успешности бизнеса. Качественное продвижение сайтов по приемлемым ценам и во вменяемые сроки для вас с радостью выполнит команда профессионалов из seo-dream.ru.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/pyat-tryukov-s-ssh/' addthis:title='Пять трюков с SSH' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/pyat-tryukov-s-ssh/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Использование alias в bash</title>
		<link>http://www.ashep.org/2011/ispolzovanie-alias-v-bash/</link>
		<comments>http://www.ashep.org/2011/ispolzovanie-alias-v-bash/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 15:45:43 +0000</pubDate>
		<dc:creator>ashep</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[alias]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://www.ashep.org/?p=1765</guid>
		<description><![CDATA[В какой-то момент в жизни почти каждого пользователя Linux наступает момент, когда терминал используется в работе всё чаще и чаще. Пользователь начинает понимать, что многие действия в режиме командной строки делать удобнее и быстрее, нежели при помощи GUI. Чем больше вы будете осваивать работу в командной оболочке, тем больше вам она будет по душе. Работа [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/ispolzovanie-alias-v-bash/' addthis:title='Использование alias в bash' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">В какой-то момент в жизни почти каждого пользователя Linux наступает момент, когда терминал используется в работе всё чаще и чаще. Пользователь начинает понимать, что многие действия в режиме командной строки делать удобнее и быстрее, нежели при помощи GUI. Чем больше вы будете осваивать работу в командной оболочке, тем больше вам она будет по душе. Работа с командной оболочкой целиком состоит из ввода команд&nbsp;&mdash; длинных и коротких. Думаю, вы так же как и автор, не очень любите вводить длинные команды и не отказались бы от способа сократить количество вводимых символов при наборе команды. В сегодняшней заметке речь пойдёт об <strong>alias</strong>&nbsp;&mdash; своего рода &laquo;сокращателе&raquo; команд.</p>
<p style="text-align: center;"><img class="size-full wp-image-1771 aligncenter" title="alias" src="http://www.ashep.org/wp-content/uploads/2011/03/bashrc-aliases03.jpg" alt="" width="320" height="229" /></p>
<span id="more-1765"></span>
<div style="margin-bottom: 5px; text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-1230167300848028";
/* 468x60 */
google_ad_slot = "1268117829";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p style="text-align: justify;">alias создана для того, чтобы делать сложные вещи простыми (или простые&nbsp;&mdash; ещё проще). Вместо того, чтобы использовать длинную и/или сложную команду вы можете создать простой псевдоним для неё и затем использовать его в своё удовольствие. Общий формат определения псевдонима при помощи alias таков:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> псевдоним=<span style="color: #ff0000;">&quot;команда&quot;</span></pre></div></div>

<p style="text-align: justify;">Этой командой вы &laquo;связываете&raquo; <strong>команду</strong> с назначаемым ей <strong>псевдонимом</strong>. Далее, если вы введёте в командной строке имя <strong>псевдонима</strong>, он автоматически будет заменён оболочкой на соответствующую ему <strong>команду</strong>. В качестве псевдонима можно использовать набор алфавитно-цифровые символы, дефис, точку, запятую и символ подчёркивания.</p>
<h2>Делаем простые команды ещё проще</h2>
<p style="text-align: justify;">Возьмём, например, часто многими используемую команду <strong>&#39;ls -l&#39;</strong>, отображающую список файлов в каталоге в т. н. &laquo;длинном&raquo; формате. Можно упростить ввод этой чатсо используемой команды. Например, так:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">ll</span>=<span style="color: #ff0000;">&quot;ls -l&quot;</span></pre></div></div>

<p style="text-align: justify;">Теперь вместо <strong>&#39;ls -l&#39;</strong> вы можете вводить <strong>&#39;ll&#39;</strong> и получать список файлов в &laquo;длинном&raquo; формате.</p>
<p style="text-align: justify;">Ещё пример. Иногда впопыхах или после пары банок пива усталые пользователи начинают вводить &#39;sl&#39;  вместо &#39;ls&#39; и очень нервничают по этому поводу. Исправим эту неприятность:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">sl</span>=<span style="color: #ff0000;">&quot;ls&quot;</span></pre></div></div>

<p style="text-align: justify;">Вот ещё более простой пример, используя который, можно ускорить ввод команды <strong>exit</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">x</span>=<span style="color: #ff0000;">&quot;exit&quot;</span></pre></div></div>

<p style="text-align: justify;">Следующие три примера делают популярные команды более интерактивными по умолчанию:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">cp</span>=<span style="color: #ff0000;">&quot;cp -iv&quot;</span>
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">mv</span>=<span style="color: #ff0000;">&quot;mv -iv&quot;</span>
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">rm</span>=<span style="color: #ff0000;">&quot;rm -iv&quot;</span></pre></div></div>

<h2>Упрощаем управление пакетами</h2>
<p style="text-align: justify;">Почти во всех современных дистрибутивах имеется система управления пакетами, а также набор программного обеспечения для работы с ней. Ниже, на примере менеджера управления пакетами APT, используемом в Debian и его потомках, автор демонстрирует способ упрощения работы с ним.</p>
<p style="text-align: justify;">Для того, чтобы установить какой-то пакет в Debian/Ubuntu, обычно используется команда:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> имя_пакета</pre></div></div>

<p style="text-align: justify;">Эта длинная команда отбирает много времени, сил и энергии. Давайте упростим её при помощи alias;</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Install</span>=<span style="color: #ff0000;">&quot;sudo apt-get install&quot;</span></pre></div></div>

<p style="text-align: justify;">Теперь устанавливать пакеты стало проще:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Install имя_пакета</pre></div></div>

<p style="text-align: justify;">Таким же образом можно упростить остальные часто используемые моменты при управлении пакетами:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Update</span>=”<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update”
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Upgrade</span>=”<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> upgrade”
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Search</span>=”<span style="color: #c20cb9; font-weight: bold;">apt-cache</span> search”
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Autoremove</span>=”<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> autoremove”
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Autoclean</span>=”<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> autoclean”
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Purge</span>=”<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> remove –purge”</pre></div></div>

<h2>Псевдонимы для &laquo;неудобных&raquo; клавиш</h2>
<p style="text-align: justify;">На некоторых клавиатурах символ точки расположен крайне неудобно и если вы частенько им пользуетесь, начинают возникать различного рода неудобства. По этой причине автор иногда не может с первого раза корректно ввести команду &#39;cd ...&#39; и предлагает таким же как он исправить ситуацию при помощи псевдонимов (вместо точки, само-собой, можно использовать что-нибудь другое, если вам так удобнее):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> .=”<span style="color: #7a0874; font-weight: bold;">cd</span> ..”
<span style="color: #7a0874; font-weight: bold;">alias</span> ..=”<span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>..”
<span style="color: #7a0874; font-weight: bold;">alias</span> ...=”<span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..”
<span style="color: #7a0874; font-weight: bold;">alias</span> ....=”<span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..”</pre></div></div>

<h2>Сёрфинг в терминале</h2>
<p style="text-align: justify;">Если вы часто пользуетесь <a href="http://lynx.isc.org/">lynx</a>, то и дело вводя URL часто посещаемых сайтов из командной строки, попробуйте облегчить себе жизнь за счёт использования псевдонимов:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Google</span>=”<span style="color: #c20cb9; font-weight: bold;">lynx</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.google.com<span style="color: #000000; font-weight: bold;">/</span>”
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">Yahoo</span>=”<span style="color: #c20cb9; font-weight: bold;">lynx</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.yahoo.com<span style="color: #000000; font-weight: bold;">/</span>”
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">asheporg</span>=”<span style="color: #c20cb9; font-weight: bold;">lynx</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.ashep.org<span style="color: #000000; font-weight: bold;">/</span>”</pre></div></div>

<h2>Упрощаем сложные команды</h2>
<p style="text-align: justify;">Сложные команды не только трудны для запоминания, но ещё и требуют много времени на их ввод. Если вы пользуетесь сложными командами каждый день, это рано или поздно начнёт вас утомлять и раздражать. Не лучше ли сделать псевдонимы для таких команд и перестать морочить себе голову?</p>
<p style="text-align: justify;">Например, чтобы отыскивать десятку самых больших файлов в вашей системе одной командой, можно создать следующий псевдоним:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">top10files</span>=”<span style="color: #c20cb9; font-weight: bold;">find</span> . <span style="color: #660033;">-type</span> f <span style="color: #660033;">-exec</span> <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-sh</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span> \; <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-r</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> -<span style="color: #000000;">10</span>”</pre></div></div>

<p style="text-align: justify;">Если вы частенько подключаетесь к серверу с IP-адресом <strong>1.2.3.4</strong> по SSH, висящем на порту <strong>22</strong>, от имени пользователя <strong>vasya</strong>, вам может оказаться полезным подобный псевдоним:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">my_server</span>=<span style="color: #ff0000;">&quot;ssh vasya@1.2.3.4 -p 22&quot;</span></pre></div></div>

<p style="text-align: justify;">Также вы можете создавать псевдонимы для ваших bash-сценариев, например:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">clc</span>=<span style="color: #ff0000;">&quot;bash /home/vasya/bin/calc.sh&quot;</span></pre></div></div>

<h2>Заключение</h2>
<p style="text-align: justify;">Посмотреть список созданных псевдонимов можно при помощи команды <strong>alias</strong>, введённой без параметров. Если какой-то из псевдонимов вам уже не нужен, вы всегда можете удалить его при помощи команды <strong>unalias</strong>. Например:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">unalias</span> Google</pre></div></div>

<p style="text-align: justify;">или же удалить вообще все псевдонимы, если нужно:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">unalias</span> <span style="color: #660033;">-a</span></pre></div></div>

<p style="text-align: justify;">Да, чуть не забыл. Все созданные вами псевдонимы автоматически удалятся сразу же после завершения сеанса работы с терминалом. Если же вы хотите всегда иметь под рукой нужные сокращения, просто добавьте нужные команды в ваш <strong>~/.bashrc</strong>.</p>
<p style="text-align: right;">Оригинал статьи на <a href="http://linux-blog.org/using-alias-in-linux/">linux-blog.org</a></p>
<hr />
<p style="text-align: justify;">
В условиях никак не покидающего и отчётливо ощущаемом многими финансовом кризисе очень важно не потерять работу. Тем же, кого сие несчастье настигло и кого интересуют <a href="http://rabota.kar.slando.kz/karaganda/">вакансии в Караганде</a> и Карагандинской области, приглашаю посетить раздел вакансий на <strong>slando.kz</strong>!</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.ashep.org/2011/ispolzovanie-alias-v-bash/' addthis:title='Использование alias в bash' ><a class="addthis_button_twitter"></a><a class="addthis_button_evernote"></a><a class="addthis_button_facebook"></a><a class="addthis_button_vk"></a><a class="addthis_button_mymailru"></a><a class="addthis_button_moikrug"></a><a class="addthis_button_compact"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ashep.org/2011/ispolzovanie-alias-v-bash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

